New code to install forms so that appropriate icons are shown in the Viewer.
[gpgol.git] / src / ChangeLog
1 2008-08-04  Werner Koch  <wk@g10code.com>
2
3         * olflange.cpp (install_forms): New.
4         (GpgolExt): Install forms if needed.
5         * common.c (get_data_dir): New.
6         * common.h (struct): Add field FORMS_REVISION.
7         * main.c (read_options, write_options): Read and write that option.
8
9 2008-07-31  Werner Koch  <wk@g10code.com>
10
11         * ext-commands.h (class GpgolExtCommands): Add m_nCmdRevertFolder.
12         * ext-commands.cpp (GpgolExtCommands, InstallCommands): Ditto.
13         (DoCommand): Implement RevertFolder command.
14
15         * common.h (struct): Add variable DISABLE_GPGOL.
16         * session-events.cpp (OnDelivery): Make use of that variable.
17         * message.cpp (message_incoming_handler): Ditto.
18         * user-events.cpp (OnSelectionChange): Ditto
19         * message-events.cpp (OnRead, OnReadComplete, OnWrite) 
20         (OnWriteComplete): Ditto
21         * mapihelp.cpp (mapi_get_int_prop): New.
22
23         * olflange.cpp (Install): Improve version check.
24
25         * revert.cpp, revert.h: New. 
26         * mapihelp.cpp (mapi_attachment_to_body): New.
27         (mapi_get_old_message_class): New.
28         (mapi_change_message_class): Do not release newvalue when saving
29         the old class.
30         * olflange.cpp (parse_version_number, parse_version_string) 
31         (compare_versions, gpgol_check_version): New.
32         * ext-commands.cpp (DoCommand): Support a "revert message class"
33         debug command.
34
35 2008-06-27  Werner Koch  <wk@g10code.com>
36
37         * mapihelp.cpp (get_gpgololdmsgclass_tag): New.
38         (mapi_change_message_class): Save old message class.
39
40 2008-06-19  Werner Koch  <wk@g10code.com>
41
42         * olflange-dlgs.cpp (GPGOptionsDlgProc): Change S/MIME enabled
43         message icon.
44         * olflange.cpp (GpgolExt): Ditto for the new version installed
45         notice.
46
47 2008-06-12  Werner Koch  <wk@g10code.com>
48
49         * dialogs.rc: Add button for calling the engine's configuration.
50         * dialogs.h (IDC_GPG_CONF): New.
51         * engine.c (engine_start_confdialog): New.
52         * engine-assuan.c (op_assuan_start_confdialog): New.
53         * olflange-dlgs.cpp (GPGOptionsDlgProc): Act upon the button.
54
55         * mapihelp.cpp (mapi_get_from_address): New.
56         * engine.c (engine_decrypt_start, engine_verify_start): Add new
57         arg FROM_ADDRESS.
58         * engine-assuan.c (op_assuan_verify, op_assuan_decrypt): Ditto.
59         * mimeparser.c (mime_verify, mime_verify_opaque, mime_decrypt):
60         Pass FROM_ADDRESS to the backend.
61
62         * olflange.cpp (DllUnregisterServer): Delete CLSIDs.
63
64 2008-06-05  Werner Koch  <wk@g10code.com>
65
66         * mimeparser.c (mime_decrypt): Set session number and title.
67         (mime_verify_opaque, mime_verify): Ditto.
68         * mapihelp.cpp (mapi_get_subject): New.
69         * engine.c (engine_set_session_number, engine_set_session_title) 
70         (engine_set_sender_address): New.
71         (struct engine_filter_s): Add fields session_number, session_title
72         and sender_address.
73         (engine_private_get_session_number): New. 
74         (engine_private_get_session_title): New.
75         (release_filter): Release them.
76         (engine_new_session_number): New.
77         * engine-assuan.c (send_session_info): New
78         (op_assuan_decrypt, op_assuan_verify): Call it.
79         (op_assuan_sign): Use the end-of-option option for the SENDER command.
80
81 2008-05-28  Werner Koch  <wk@g10code.com>
82
83         * dialogs.h (IDC_BODY_AS_ATTACHMENT): New.
84         * dialogs.rc: Add body-as-attachemnt checkbox to the otpion
85         dialog.
86         * olflange-dlgs.cpp (set_labels, GPGOptionsDlgProc): Add it.
87         * main.c (write_options, read_options): Handle bodyAsAttachment
88         registry key.
89         * mimeparser.c (start_attachment): Do not set the hidden flag if
90         the new option is used.
91         * mapihelp.cpp (mapi_test_attach_hidden): New.
92         (mapi_get_gpgol_body_attachment): Make use of that flag.
93
94 2008-05-23  Werner Koch  <wk@g10code.com>
95
96         * mimemaker.c (struct sink_s): Add field ENC_COUNTER.
97         (write_buffer_for_cb): Update that.
98         (mime_encrypt): Bail out if no data has been encrypted.
99         (mime_sign_encrypt): Ditto.
100
101 2008-05-07  Werner Koch  <wk@g10code.com>
102
103         * mimeparser.c (t2body): Fix last change.
104
105 2008-05-02  Werner Koch  <wk@g10code.com>
106
107         * mimeparser.c (t2body): Detect non-inline text parts.
108         * rfc822parse.c (rfc822parse_query_parameter): Add special mode
109         for an ATTR of NULL.
110
111 2008-04-16  Werner Koch  <wk@g10code.com>
112
113         * message-events.h (class GpgolMessageEvents): Add M_GOTINSPECTOR.
114         * message.cpp (message_incoming_handler): Change return type.
115
116         * ext-commands.cpp (check_toolbar, check_menu_toolbar): New.
117         (update_protocol_menu): Explicitly update the toolbar.
118
119 2008-04-15  Werner Koch  <wk@g10code.com>
120
121         * Outlook.gpl: New.
122
123 2008-04-14  Werner Koch  <wk@g10code.com>
124
125         * display.cpp (is_inspector_display): New.
126         (find_message_window): Rewrote.
127
128         * message-events.cpp (OnRead): Use it.
129         * message.cpp (message_incoming_handler): Add arg FORCE.
130         * message-events.cpp (OnRead): Pass false for FORCE.
131         * item-events.cpp (OnOpen): Ditto.
132         * ext-commands.cpp (DoCommand): Let CmdCryptoState process and
133         display the current message again.
134         (GpgolExtCommands): Remove m_nCmdCheckSig and m_nCmdDecrypt.
135
136 2008-04-10  Werner Koch  <wk@g10code.com>
137
138         * ol-ext-callback.cpp (is_preview_pane_visible)
139         (show_preview_pane): New.
140
141         * display.cpp (update_display): Add arg IS_SENSITIVE and do not
142         use the OOM method if this is set.
143
144         * mapihelp.h (mapi_save_changes): New. Use if everywhere.
145         (mapi_delete_body_props): Use it to delete body parts.
146         * mapihelp.cpp (mapi_do_save_changes): New.
147         * mimemaker.c (finalize_message): Do no delete body parts because
148         mapi_save_changes does this now.
149
150         * mimeparser.c (finish_message): Remove the body property in
151         protect mode.
152
153 2008-04-04  Werner Koch  <wk@g10code.com>
154
155         * engine-assuan.c (worker_start_read, worker_check_read): Factor
156         common code out to ..
157         (write_to_callback): .. new.
158         (async_worker_thread): Better comments and minor changes.
159         (enqueue_callback): Add arg INACTIVE.
160         (set_items_active): New.
161         (start_command): Set items active.
162         (op_assuan_encrypt): Create input and output items as inactive.
163         (async_worker_thread): Handle the inactive flag.
164
165         * common.c (gpgol_spawn_detached): Do not inherit handles.
166
167 2008-04-02  Werner Koch  <wk@g10code.com>
168
169         * engine-assuan.c (destroy_command): Add arg FORCE.
170         (op_assuan_encrypt_bottom): Call destroy_command.
171
172         * mimeparser.c (struct mime_context): Use parser_error to return
173         gpg error codes.
174
175         * main.c (read_options): Allow names for debug flags.
176         * common.c (trim_spaces): New.
177
178 2008-03-31  Werner Koch  <wk@g10code.com>
179
180         * engine-assuan.c (struct work_item_s): Add SWITCH_COUNTER.
181         (switch_threads, clear_switch_threads): New.
182         (worker_start_write): Use it.
183         * engine.c (struct engine_filter_s): Add SWITCH_COUNTER.
184         (switch_threads, clear_switch_threads): New.
185         (filter_gpgme_read_cb): Use it.
186
187         * ext-commands.h (class GpgolExtCommands): Add m_nCmdCryptoState.
188         * ext-commands.cpp (InstallCommands): Add a toolbar crypto state
189         button.
190         (DoCommand): Show a message when trying to select the disabled
191         S/MIME protocol.
192
193         * message.cpp (message_sign, message_verify, message_decrypt) 
194         (sign_encrypt): Display message boxes only in debug mode.
195
196         * olflange-dlgs.cpp: Remove G-Data 2001 copyright because all that
197         old code has gone.
198
199         * dialogs.rc (IDD_EXT_OPTIONS): Remove option to select the key
200         manager.
201         (IDD_GPG_OPTIONS): Remove caching time, reorder options, add group
202         boxes.
203         * olflange-dlgs.cpp (GPGOptionsDlgProc): Clean up accordingly.
204         * config-dialog.c (config_dlg_proc): Ditto.
205         (get_open_file_name, does_file_exist, error_box): Remove.
206
207         * ext-commands.cpp: Rename nCmdShowInfo to nCmdDebug0 and enable
208         it only in debug mode.
209
210 2008-03-26  Werner Koch  <wk@g10code.com>
211
212         * engine-gpgme.c (cleanup): Implement.
213         (op_gpgme_init): Save thread handle.
214         (waiter_thread): Check shutdown flags.
215
216         * engine-assuan.c (get_uiserver_name): Fallback to GPA.
217
218 2008-03-19  Werner Koch  <wk@g10code.com>
219
220         * mapihelp.cpp (mapi_change_message_class): Look into
221         multipart/mixed for PGP messages.
222
223         * mapihelp.cpp (mapi_get_attach): Add arg UNPROTECT and changed
224         all callers.
225         * common.h (DBG_MIME_PARSER, DBG_MIME_DATA): New.
226         * mimeparser.c (debug_mime_parser, debug_mime_data): New to
227         replace DEBUG_PARSER.
228         (struct mime_context): Add field is_opaque_signed. 
229         (t2body): Set it.
230         (mime_decrypt): Handle an embedded opaque signed S/MIME part.
231         (mime_verify_opaque): Add arg INBUFER, INBUFFERLEN and
232         START_PART_COUNTER.
233
234 2008-03-18  Werner Koch  <wk@g10code.com>
235
236         * mimeparser.c (message_cb): Clear all mimestruct fields.  Fixes
237         segv introduced 2008-03-07.
238
239         * engine-assuan.c (async_worker_thread): Handle broken pipe.
240
241 2008-03-13  Werner Koch  <wk@g10code.com>
242
243         * mimeparser.c (message_cb): Skip the OPEN event in non-MIME mode.
244
245         * rfc822parse.c (rfc822parse_open): Reset ERRNO.
246
247 2008-03-11  Werner Koch  <wk@g10code.com>
248
249         * engine-assuan.c (op_assuan_encrypt): Factor some code out to ..
250         (op_assuan_encrypt_bottom): .. new.
251         (engine_assuan_encstate_s): New.
252         * engine.c (engine_encrypt_start): Split some code into ..
253         (engine_encrypt_prepare): .. new.
254         (engine_cancel): Cancel prepared encryption.
255         * mimemaker.c (mime_encrypt): Use engine_encrypt_prepare and _start.
256         (mime_sign_encrypt): Likewise, but do the _start only after
257         completing the signing.
258
259 2008-03-10  Werner Koch  <wk@g10code.com>
260
261         * engine.c (FILTER_BUFFER_SIZE): Increase to 4k.
262         (engine_filter, engine_wait, engine_wait): Replace Sleep by
263         SwitchToThread.
264         * engine-assuan.c (struct work_item_s): Increase buffer to 1k.
265         (worker_start_write, async_worker_thread): Replace Sleep by
266         SwitchToThread.
267
268 2008-03-07  Werner Koch  <wk@g10code.com>
269
270         * mapihelp.cpp (mapi_get_sender): New.
271         * mymapitags.h (PR_PRIMARY_SEND_ACCT): New.
272         * mimemaker.c (do_mime_sign): Pass the sender to the engine.
273
274         * common.h (opt): Add field SVN_REVISION.
275         * main.c (read_options, write_options): Set it.
276         * olflange.cpp (GpgolExt): Print a warning on program update.
277
278         * engine.c (struct engine_filter_s): Add field ADD_EXTRA_LF.
279         (engine_request_exra_lf): New.
280         (engine_wait): Implement that.
281         * mimeparser.c (mime_decrypt): Add arg SIMPLE_PGP and call
282         engine_request_exra_lf.
283         (struct mime_context): Add field NO_MAIL_HEADER.
284         (message_cb): Implement it.
285         * message.cpp (message_decrypt): Set that flag for old style PGP.
286
287         * common.h (DBG_COMMANDS, debug_commands): New.
288         * ext-commands.cpp: Use it.
289
290 2008-03-06  Werner Koch  <wk@g10code.com>
291
292         * mimemaker.c (do_mime_sign): Figure out the protocol to use.
293         * engine.c (engine_sign_start): Add new args SENDER and R_PROTOCOL.
294         * engine-assuan.c (op_assuan_sign): Ditto.  Send SENDER command.
295
296 2008-03-05  Werner Koch  <wk@g10code.com>
297
298         * main.c (read_options): Insert the debug registry key.
299         (write_options): More debug output.
300
301 2008-02-28  Werner Koch  <wk@g10code.com>
302
303         * olflange-dlgs.cpp (GPGOptionsDlgProc): Fix initial setting of
304         openpgp and smime state.  I wish C would haved used := for
305         assignments.
306
307 2008-02-26  Werner Koch  <wk@g10code.com>
308
309         * common.c (qp_decode): Add arg S_LBRK.
310         * mimeparser.c (plaintext_handler, ciphertext_handler): Handle
311         soft line breaks.
312
313         * mapihelp.cpp (mapi_change_message_class): Handle opaque S/MIME
314         messages without an smime-type parameter.
315
316 2008-02-25  Werner Koch  <wk@g10code.com>
317
318         * message.cpp (message_verify): Show message boxes for non-signed
319         messages.
320         (message_decrypt): Likewise.
321
322 2008-02-19  Marcus Brinkmann  <marcus@g10code.de>
323
324         * engine-assuan.c (get_uiserver_name): Change default uiserver
325         path and remove work-around.
326
327 2008-02-18  Werner Koch  <wk@g10code.com>
328
329         * message.cpp (pgp_body_to_attachment): New.
330         (message_decrypt): Use it.
331         (message_wipe_body_cruft): Also wipe already processed PGP
332         encrypted messages.  Factor common code out to ...
333         (do_wipe_body): .. new.
334         * mapihelp.h (ATTACHTYPE_PGPBODY): New.
335
336 2008-02-15  Werner Koch  <wk@g10code.com>
337
338         * olflange-dlgs.cpp: Remove code for IDC_ENCRYPT_WITH_STANDARD_KEY
339         and IDC_ENCRYPT_TO.
340         * dialogs.rc: Ditto.
341
342 2008-02-13  Werner Koch  <wk@g10code.com>
343
344         * mapihelp.cpp (get_gpgolcharset_tag, mapi_get_gpgol_charset) 
345         (mapi_set_gpgol_charset): New. 
346         (mapi_get_gpgol_body_attachment): Transcode from Latin-1.
347         * mimeparser.c (start_attachment): Set the charset property.
348         (struct mime_context): Remove is_utf8 field.
349
350 2008-02-11  Werner Koch  <wk@g10code.com>
351
352         * common.h (tlvinfo_t): New.
353         * common.c (parse_tlv): New.  Based on code from libksba.
354         * mapihelp.cpp (has_smime_filename): New.
355         (is_really_cms_encrypted): New.
356         (mapi_change_message_class): Use this here to work around a
357         CryptoEx bug.
358
359 2008-02-08  Werner Koch  <wk@g10code.com>
360
361         * mapihelp.cpp (mapi_change_message_class): Improve detecion of
362         CryptoEx messages.
363
364 2008-02-07  Werner Koch  <wk@g10code.com>
365
366         * engine.c (engine_verify_start): Enable opaque signature for the
367         assuan backend.
368         * engine-assuan.c (op_assuan_verify): New arg OUTDATA.  Add
369         support for opaque signatures.
370
371         * mimeparser.c (mime_verify_opaque): New.
372         * message.cpp (message_verify): Handle opaque signed S/MIME.
373
374         * message.cpp (message_wipe_body_cruft): Delete only encrypted
375         messages.
376
377 2008-02-06  Werner Koch  <wk@g10code.com>
378
379         * mimeparser.c (mime_decrypt): New arg IS_RFC822.
380         * message.cpp (message_decrypt): Add code to see whether to use
381         the new arg.
382
383 2008-02-01  Werner Koch  <wk@g10code.com>
384
385         * mimeparser.c (ciphertext_handler, ciphermessage_cb)
386         (ciphermessage_t2body): New.
387         (mime_decrypt): Use an rfc822 parser to pass the message to the
388         engine.
389
390         * mapihelp.cpp (mapi_get_attach_as_stream): Add arg R_ATTACH.
391         (mapi_set_attach_hidden): New.
392
393 2008-01-31  Werner Koch  <wk@g10code.com>
394
395         * message.cpp (message_verify): Check that the body attachment is
396         available before shortcutting the verification.
397         * user-events.cpp (OnSelectionChange): Change SMIME message
398         class.
399         * mapihelp.cpp (mapi_change_message_class): Add arg
400         SYNC_OVERRIDE. Changed all callers to pass false.
401         (mapi_test_sig_status): Take care of sent messages.
402         (mapi_get_gpgol_body_attachment): Change args to allow use as
403         testing fucntion too.  Adjusted caller.
404
405 2008-01-29  Werner Koch  <wk@g10code.com>
406
407         * mimemaker.c (do_mime_sign): Set CTE for SMIME.
408         (delete_all_attachments): Remove extra semicolon accidently
409         inserted with revision 916.
410
411 2008-01-18  Marcus Brinkmann  <marcus@g10code.de>
412
413         * mimeparser.c (mime_verify): New variable sig_len, and pass it on
414         to engine_verify_start.
415         * engine.h (engine_verify_start): Add new argument sig_len.
416         * engine.c (engine_verify_start): Add new argument sig_len and
417         pass it on to op_assuan_verify and op_gpgme_verify.
418         * engine-assuan.h (op_asssuan_verify): Add new argument sig_len.
419         * engine-gpgme.c (op_gpgme_verify): New argument sig_len and use
420         it instead of string length of signature.
421         * engine-assuan.c (op_assuan_verify): Likewise.
422
423 2008-01-11  Werner Koch  <wk@g10code.com>
424
425         * mimemaker.c (finalize_message): Add args PROTOCOL and ENCRYPT
426         and use them to set the override message class.
427         (mime_sign, mime_encrypt, mime_sign_encrypt): Pass this info via
428         the new args.
429         (do_mime_sign): Set micalg to sha1 for CMS.
430
431         * message.cpp (message_decrypt): Add hack fro seldgenerated messages.
432
433 2008-01-10  Werner Koch  <wk@g10code.com>
434
435         * mapihelp.cpp (get_gpgolmsgclass_tag, mapi_set_gpgol_msg_class):
436         New.
437         (mapi_change_message_class, mapi_get_message_type): Try override
438         first.
439
440         * message.cpp (message_incoming_handler): Remove arg MSGTYE and
441         let the function retrieve it.  Changed all callers.  Retry after a
442         sucessful message class change.
443         * olflange.cpp (getMsgtype): Remove.  The caching might lead to
444         problems and makes it all more complex.  Changed all callers to
445         use mapi_get_message_type.
446         
447         * mimemaker.c (create_top_encryption_header) <SMIME>: Write empty
448         line after header.
449
450 2008-01-09  Werner Koch  <wk@g10code.com>
451
452         * mimeparser.c (finish_saved_body): New.
453         (finish_attachment): Keep the body attachment open.
454         (mime_decrypt, mime_verify): Close the saved body data.
455         (t2body): Continue body attachments.
456
457         * message.cpp (message_verify): Save changes.
458
459         * mapihelp.cpp (mapi_change_message_class): Handle case of
460         PGP/MIME signed with IPM.Note.  Save only of really needed, use
461         FORCE_SAVE and keep it open for read and write.
462
463 2008-01-07  Marcus Brinkmann  <marcus@g10code.de>
464
465         * engine-assuan.c (replace_dollar_s): Remove obsolete function.
466         (get_quoted_socket_name): Remove obsolete function.
467         (get_uiserver_name): Invoke GUI server with --daemon.  Fix buglet
468         in assignment.
469         (destroy_command): Change return type to void to suppress compiler
470         warning.
471
472 2008-01-04  Werner Koch  <wk@g10code.com>
473
474         * engine-assuan.c (send_options): Call AllowSetForegroundWindow.
475
476         * main.c (read_options): Allo other values than 1 for enableDebug.
477         * common.h (DBG_IOWORKER, DBG_IOWORKER_EXTRA, DBG_FILTER) 
478         (DBG_FILTER): New.
479         * engine.c (debug_filter): Turn it into a macro.
480         (debug_filter_extra): New macro, used instead of checking the
481         value of debug_filter.
482         * engine-assuan.c (debug_ioworker, debug_ioworker_extra): new.
483         Use them all over the file to enable debugging.
484         * engine.c (engine_encrypt_start): Add arg HWND.
485         (engine_sign_start, engine_decrypt_start, engine_verify_start) 
486         (engine_start_keymanager): Ditto.
487
488         * mimemaker.c (mime_encrypt, mime_sign_encrypt, mime_sign) 
489         (do_mime_sign): Add arg HWND and pass it to the engine.
490         * mimeparser.c (mime_verify, mime_decrypt): Pass HWND.
491         * message.cpp (message_sign, sign_encrypt): Pass HWND.
492         (message_incoming_handler, message_verify, message_decrypt): Add
493         arg HWND and pass it on.
494         * message-events.cpp (OnRead): Pass HWND to message function.
495         * ext-commands.cpp (DoCommand):  Ditto.
496
497 2008-01-03  Werner Koch  <wk@g10code.com>
498
499         * mimemaker.c (mime_sign_encrypt): Fix result test of do_mime_sign.
500         (write_tempsign_attachment): Remove.
501         (do_mime_sign): Change last ark to a sink_t.
502         (mime_sign_encrypt): Rework to use a temporary stream instead of a
503         temporary attachment.
504         (create_mapi_attachment): Remove arg TEMPSIGN.
505
506 2007-12-18  Werner Koch  <wk@g10code.com>
507
508         * mapihelp.cpp (get_msgcls_from_pgp_lines): Limit check to the
509         first 1 k and stop testing after the first PGP armor line.
510         (mapi_get_message_type): Return MSGTYPE_SMIME.
511         (mapi_change_message_class): Take care of CryptoEx signatures.
512         * mapihelp.h (MSGTYPE_SMIME): New.
513         * message.cpp (message_incoming_handler): Check message class for
514         unknown and unchecked messages.  Take care MSGTYPE_SMIME.
515         * ext-commands.cpp (DoCommand): Add debug command change message class.
516
517 2007-12-07  Werner Koch  <wk@g10code.com>
518
519         * ext-commands.cpp (InstallCommands): Removed toolbar button fro
520         decrypt as this is not anymore needed.  Fixes bug#860.
521         (QueryHelpText): Ditto.
522
523 2007-11-12  Werner Koch  <wk@g10code.com>
524
525         * olflange.h (class GpgolExt): Rename m_gpgSelectSmime to
526         m_protoSelection.
527         * message-events.cpp (OnWriteComplete): Use it accordingly.
528         * main.c (write_options, read_options): Load and save it.
529         * dialogs.rc: Add new check box for OpenPGP default protocol.
530         * olflange-dlgs.cpp (GPGOptionsDlgProc): Adjust for above chnages.
531
532 2007-11-09  Werner Koch  <wk@g10code.com>
533
534         * main.c (read_options): New option ENABLE_DEBUG to be enabled
535         only using the Registry.
536         (read_options): Show warning for certain option combinations.
537         * olflange-dlgs.cpp (GPGOptionsDlgProc): Hide the Advanced options
538         button unless in debug mode.
539
540         * mapihelp.cpp (get_gpgollastdecrypted_tag): New.
541         (mapi_test_last_decrypted): New.
542         (mapi_has_last_decrypted): new.
543         * mimeparser.c (finish_message): Update the Last Decrypted property.
544         * message.cpp (message_decrypt): Use it here.
545         (message_wipe_body_cruft): New.
546
547         * main.c (do_log_window_hierarchy): Factor some code out to ..
548         (do_log_window_info): .. this.
549         (log_window_hierarchy): Log parent window info.
550         (get_64bit_session_marker): New.
551         (initialize_session_key): Init session marker.
552
553         * Makefile.am (gpgol_SOURCES): Remove item-events.cpp 
554         * olflange.cpp (GpgolExt): Disable the GpgOLItemEvents as they can
555         only be used with the undocumented ECF file.
556
557 2007-10-29  Werner Koch  <wk@g10code.com>
558
559         * mimemaker.c (create_top_signing_header): Add arg FIRST.
560         (mime_sign): Factor allmost all code out to ..
561         (do_mime_sign): .. new function.
562         (create_mapi_attachment): Add arg TEMPSIGN.
563         (delete_all_attachments): Adjust for that.
564         (mime_encrypt): Factor some code out to ..
565         (create_top_encryption_header): .. new.
566         (write_tempsign_attachment): New.
567         (mime_sign_encrypt): Implement.
568
569 2007-10-22  Werner Koch  <wk@g10code.com>
570
571         * engine-assuan.c (connect_uiserver): Try to start the server.
572         (get_uiserver_name, replace_dollar_s, get_quoted_socket_name): New.
573
574         * main.c (REGKEY): Remove.
575         * common.h (GNUPG_REGKEY): New.
576         * common.c (default_homedir): Use it in place of a hard coded one.
577         (get_locale_dir): Ditto.
578         (gpgol_spawn_detached): New.
579
580 2007-10-18  Werner Koch  <wk@g10code.com>
581
582         * common.c (get_system_check_bitmap): New.
583
584         * decrypt.bmp, encrypt.bmp, sign.bmp, key_mana.bmp: Change
585         background color to pink and voila Outlook presents them
586         transparent.
587
588         * logo.bmp: Cleaned up to use just one color.
589         * olflange-dlgs.cpp (GPGOptionsDlgProc): Do not use LoadImage.
590
591 2007-10-16  Werner Koch  <wk@g10code.com>
592
593         * myexchext.h (EECMDID_): Add a few more of these constants.
594         * ext-commands.cpp (check_menu): New.
595         (toolbar_add_menu): Rename to ..
596         (add_menu): .. this.
597         (toolbar_from_tbe): Remove.
598         (add_toolbar): New.
599         (InstallCommands): Use new toolbar helper.
600         (QueryButtonInfo): Changed to use new toolbar helper.
601         (~GpgolExtCommands): New.
602
603         * engine.c (engine_encrypt_start): Add arg R_PROTOCOL.
604         * engine-assuan.c (op_assuan_encrypt): Add arg R_USED_PROTOCOL and
605         ask the server for it.
606         * mimemaker.c (sink_encryption_write_b64): New.
607         (mime_encrypt): Add S/MIME support.
608
609 2007-10-15  Werner Koch  <wk@g10code.com>
610
611         * engine-assuan.c (op_assuan_start_keymanager): New.
612         * engine.c (engine_start_keymanager): New.
613         * ext-commands.cpp (DoCommand): Call it.
614
615 2007-10-12  Werner Koch  <wk@g10code.com>
616
617         * gpgol-rsrcs.rc: Remove.
618         * dialogs.rc: Renamed from olflange-rsrcs.rc.
619         * dialogs.h: Rename for olflange-ids.h.  Changed all includers.
620         * Makefile.am: Adjust accordingly.
621
622         * verify-dialog.c (verify_dialog_box): Do not distinguish
623         languages.
624         (verify_dlg_set_labels): New.
625         (verify_dlg_proc): Call it.
626
627         * passphrase-dialog.c (passphrase_callback_box): Do not
628         distinguish languages.
629         (decrypt_key_dlg_set_labels): New.
630         (decrypt_key_dlg_proc): Call it.
631         (decrypt_key_ext_dlg_set_labels): New.
632         (decrypt_key_ext_dlg_proc): Call it.
633
634         * recipient-dialog.c (recipient_dialog_box): Do not distinguish
635         languages.
636         (recipient_dialog_box2): Ditto.
637         (recipient_dlg_set_labels): New.
638         (recipient_dlg_proc): Call it.
639
640 2007-10-11  Werner Koch  <wk@g10code.com>
641
642         * ext-commands.cpp (toolbar_add_menu): USe "@" to indicate a
643         separator and "" to ski the entry.  Changed callers.
644
645         * common.h (struct): Remove AUTO_SIGN_ATTACH.  Add ENABLE_SMIME.
646         * main.c (read_options, write_options): Save the new option.
647         * olflange-dlgs.cpp (GPGOptionsDlgProc): Implement new option and
648         print warning.
649         * mapihelp.cpp (mapi_change_message_class): Take care of enable_smime.
650         
651         * olflange-ids.h: Renumbered.
652         * olflange-rsrcs.rc: Keep only the english dialog and changed all
653         text to dummy texts.
654         * olflange-dlgs.cpp (set_labels): New.
655         (GPGOptionsDlgProc): Call it.
656         * property-sheets.cpp (GetPages): Do not distinguish languages.
657         * config-dialog.c (config_dialog_box): Ditto.
658         (config_dlg_set_labels): New.
659         * gpgol-rsrcs.rc (IDD_OPT): Move to olflange-rsrcs.rc and rename
660         to IDD_EXT_OPTIONS.
661         (IDD_OPT_DE): Remove.
662
663 2007-10-10  Werner Koch  <wk@g10code.com>
664
665         * main.c (read_options): Remove saveDecryptedAttachment.  Add
666         smimeDefault.
667
668 2007-10-08  Werner Koch  <wk@g10code.com>
669
670         * main.c (do_log): Remove trailing LF from w32 error message and
671         also print the numeric error code.
672
673 2007-09-25  Werner Koch  <wk@g10code.com>
674
675         * Makefile.am (gpgol_LDADD): Link against libassuan.
676
677         * util.h (DIM, DIMof): New.
678
679         * engine.c (filter_gpgme_read_cb): Implement nonblock feature.
680         (filter_gpgme_write_cb): Ditto.
681
682 2007-09-24  Werner Koch  <wk@g10code.com>
683
684         * common.c (standard_homedir, default_homedir): New. 
685         (w32_shgetfolderpath): Make static.
686
687 2007-09-21  Werner Koch  <wk@g10code.com>
688
689         * mimeparser.c (build_mimeinfo): New.
690         (finish_message): Store the mime structure.
691         * mapihelp.cpp (mapi_get_message_class): New.
692         (mapi_get_sig_status): New.
693         (get_gpgolprotectiv_tag, get_gpgolsigstatus_tag) 
694         (get_gpgolattachtype_tag): Factored code out to ...
695         (create_gpgol_tag): .. New.
696         (get_gpgolmimeinfo_tag): New.
697         (mapi_get_mime_info): New.
698
699 2007-09-20  Werner Koch  <wk@g10code.com>
700
701         * user-events.cpp, user-events.h:  New.
702         * olflange.h (class GpgolExt): Add member for it.
703         * olflange.cpp (QueryInterface): Hook it in.
704
705 2007-09-19  Werner Koch  <wk@g10code.com>
706
707         * mapihelp.cpp (mapi_has_sig_status): Return true if any sig
708         status is present.
709         (mapi_test_sig_status): New. Take semantics of the former
710         mapi_has_sig_status.  Changed all callers.
711         (mapi_change_message_class): Set sign status to n/a for other
712         message classed.
713         * mimemaker.c (finalize_message): Mark created messages.
714         (write_buffer_for_cb): Rename from write_buffer_voidarg and return
715         number of bytes written.
716         (collect_signature): Return number of bytes written.
717         
718         * mapihelp.h (struct mapi_attach_item_s): New member
719         PRIVATE_MAPITABLE.
720         * mapihelp.cpp (mapi_create_attach_table) 
721         (mapi_release_attach_table): Keep the mapi table oben and put
722         PR_ATATCH_NUM into the MAPIPOS member.
723         (mapi_get_gpgol_body_attachment): Use PR_ATATCH_NUM.
724
725         * mimeparser.c (finish_message): New.
726         (mime_decrypt, mime_verify): Call it.
727
728 2007-09-17  Werner Koch  <wk@g10code.com>
729
730         * olflange.cpp: Print gpgme version.
731
732 2007-09-14  Werner Koch  <wk@g10code.com>
733
734         * engine-gpgme.c: Rewrote most of it.
735
736 2007-09-13  Werner Koch  <wk@g10code.com>
737
738         * common.c (xrealloc): New.
739
740 2007-09-11  Werner Koch  <wk@g10code.com>
741
742         * engine-gpgme.c (op_encrypt_data): New.
743
744 2007-09-08  Werner Koch  <wk@g10code.com>
745
746         * engine.c: New.
747         * engine.h: Rewrite.  Factor existing stuff out to ..
748         * engine-gpgme.h: .. new.
749         * engine-assuan.h, engine-assuan.c: New.
750
751 2007-09-07  Werner Koch  <wk@g10code.com>
752
753         * common.c (qp_decode): Handle softe line breaks. 
754
755 2007-09-06  Werner Koch  <wk@g10code.com>
756
757         * mapihelp.cpp (mapi_get_body): New.
758
759         * mimeparser.c (protocol_t): Move to .. common.h.
760
761 2007-09-05  Werner Koch  <wk@g10code.com>
762
763         * mimemaker.c, mimemaker.h: New.
764
765 2007-08-31  Werner Koch  <wk@g10code.com>
766
767         * mapihelp.cpp (mapi_set_header): New.
768         * message.cpp (pgp_mime_from_clearsigned): New.
769         (message_verify): Use it.
770         * main.c: Call srand ().
771         * util.h (trailing_ws_p): New.
772         * common.c (generate_boundary): New.
773
774 2007-08-30  Werner Koch  <wk@g10code.com>
775
776         * message-events.h (class GpgolMessageEvents): Rename M_IS_SMIME
777         to M_PROCESSED.
778         * message-events.cpp (OnRead, OnReadComplete): Ditto.
779         (OnReadComplete): Remove preview decryption stuff.
780         (OnWriteComplete): Remove GpgMsg based code.
781         * ext-commands.cpp (DoCommand): Ditto
782         (InstallCommands): Do not init the watcher.
783         * olflange.cpp (GpgolExt): Do not init the watcher.
784         (GpgolExt): Do not clanup the watcher.
785         * main.c (DllMain): Ditto.
786         * gpgmsg.cpp, gpgmsg.hh: Remove.
787         * watcher.cpp: Remove
788         * pgpmime.c, pgpmime.h: Remove.
789
790         * mapihelp.h (MSGTYPE_GPGOL_CLEAR_SIGNED)
791         (MSGTYPE_GPGOL_PGP_MESSAGE): New.
792         * mapihelp.cpp (mapi_get_message_type): Map them.
793         (get_msgcls_from_pgp_lines): New.
794         (mapi_change_message_class): Detect old old style PGP messages.
795         (mapi_get_body_as_stream): New.
796         * message.cpp (message_verify, message_decrypt): Handle them.
797         * message-events.cpp (OnRead): Ditto.
798
799 2007-08-29  Werner Koch  <wk@g10code.com>
800
801         * ext-commands.h (class GpgolExtCommands): Add members
802         M_NCMDKEYMANAGER and M_NCMDDECRYPT.
803         * ext-commands.cpp (GpgolExtCommands): Initialize it.
804         (InstallCommands): Use them here instead of reusing another variable.
805         (DoCommand, Help, QueryHelpText, QueryButtonInfo): Restructured
806         for better readibility.
807
808 2007-08-21  Werner Koch  <wk@g10code.com>
809
810         * w32-gettext.c (SUBLANG_BENGALI_BANGLADESH): Fix to 2 as per MSDN.
811         (SUBLANG_PUNJABI_PAKISTAN): Remove as it is not in MSDN.
812         (SUBLANG_ROMANIAN_MOLDOVA): Remove as it is not in MSDN.
813         (SUBLANG_ROMANIAN_ROMANIA): Change to value 1 as per MSDN.
814
815 2007-08-13  Marcus Brinkmann  <marcus@g10code.de>
816
817         * Makefile.am (gpgol_SOURCES): Add common.h.
818
819 2007-08-06  Werner Koch  <wk@g10code.com>
820
821         Lots of changes to support S/MIME and to revamp most of the old
822         code.  More changes to follow.  The list of changes below is not
823         complete as it does not identfy all newly written code.
824         
825         * mimeparser.c: New. Based on pgpmime.c 
826
827         * display.cpp (update_display): Removed unused arg MSG.
828         (update_display): Set the body to an empty string even if it is
829         not HTML.
830
831         * olflange.cpp (Install): Print OL version only once.
832
833         * verify-dialog.c (verify_dialog_box): Add arg PROTOCOL.
834         (load_sigbox): Ditto.
835         (verify_dlg_proc): Changed title acccording to used protocol.
836
837         * Makefile.am (gpgol_LDADD): Add libadvapi due to our use of
838         CryptGenRandom.
839
840         * main.c (get_crypt_random, initialize_session_key): New. 
841         (DllMain): Initialize the session key.
842         (get_128bit_session_key, create_initialization_vector): New.
843
844         * serpent.c: New.  Taken from libgcrypt 1.3.0 and stripped down to
845         fit our needs.  Add CFB encryption API.
846         * serpent.h: New.
847
848         * mapihelp.cpp (mapi_mark_moss_attach): New.
849         * mymapitags.h (PR_ATTACHMENT_HIDDEN): New.
850
851         * display.cpp (open_inspector): New.
852
853         * mapihelp.cpp (mapi_get_binary_prop): New.
854
855         * engine-gpgme.c (op_verify_detached_sig_gpgme): Add arg
856         PROTOCOL.  Changed all callers to pass the OPENPGP protocol.
857
858         * common.c (b64_decode): Renamed from base64_decode and use new
859         type for the context.
860         (b64_init): New.
861         * pgpmime.c (qp_decode, base64_decode): Move to common.c and make
862         public.
863
864         * common.h (STRICT): Remove.
865         * intern.h: Rename to common.h.
866
867 2007-07-20  Werner Koch  <wk@g10code.com>
868
869         * myexchext.h (IOutlookExtItemEvents.): New.
870         * item-events.h, item-events.cpp: New.
871         * olflange.cpp (GpgolExt, QueryInterface): Hook it in.
872
873 2007-07-19  Werner Koch  <wk@g10code.com>
874
875         * attached-file-events.cpp: Renamed from attach.c.
876         * attached-file-events.h: Renamed from attach.h.  Removed some
877         inlines to the impl file.
878
879         * Makefile.am (gpgol_LDADD): Add libole32.
880
881 2007-07-18  Werner Koch  <wk@g10code.com>
882
883         * mapihelp.c (log_mapi_property): Support STRIGN8 and UNICODE.
884
885         * myexchext.h (IExchExtUserEvents, IExchExtSessionEvents): New
886         declarations.
887         * session-events.cpp, session-events.h: New.
888         * olflange.cpp (GpgolExt, QueryInterface): Hook session-events in.
889
890         * olflange.cpp (DllRegisterServer): Register only for interfaces
891         we really use.
892         (ext_context_name): New. Factored out from several places.
893         (Install): Initialize for Session context.
894
895         Renamed all CGPGExchExt* classes to Gpgol*.
896         
897         * olflange.h, olflange.cpp: Factor most code out to ..
898         * ext-commands.cpp, ext-commands.h, message-events.cpp
899         * message-events.h, property-sheets.cpp, property-sheets.h
900         * ol-ext-callback.cpp, ol-ext-callback.h: .. New.
901
902 2007-07-17  Werner Koch  <wk@g10code.com>
903
904         * Makefile.am (gpgol_LDADD): Add ws2_32.
905
906         * main.c (log_window_hierarchy, do_log_window_hierarchy): New.
907         * olflange.cpp (show_window_hierarchy): Replace by
908         log_window_hierarchy.
909         (g_initdll): Make static.
910         (InstallCommands): Factor some code out to ..
911         (toolbar_from_tbe, toolbar_add_menu): .. new.
912
913         * mapihelp.c, mapihelp.h: New. 
914         * olflange.cpp (show_mapi_property): Factor out to mapihelp.c
915         and rename to log_mapi_property.
916
917 2007-04-10  Werner Koch  <wk@g10code.com>
918
919         * display.cpp (find_message_window): Add arg LEVEL for debugging.
920         Ignore MsoCommand* Windows.  Fixes bug 735.
921
922 2006-10-14  Timo Schulz  <ts@g10code.de>
923
924         * recipient-dialog.c (lv_get_item_param): New.
925         (copy_item): Use it here to copy the opaque param.
926         (recipient_dlg_proc): And here to avoid the hidden column.
927         (initialize_rsetbox): Localize column names.
928
929         * olflange.cpp (get_outlook_property): Free returned BSTR.
930         (InstallCommands): Likewise.
931         
932 2009-09-06  Timo Schulz  <ts@g10code.de>
933
934         * recipient-dialog.c (recipient_dialog2): Do not free
935         key array here.
936         
937 2008-08-21  Timo Schulz  <ts@g10code.de>
938
939         * engine-gpgme.c (op_lookup_keys): Only add useable keys
940         and add all invalid keys to unknown.
941         * recipient-dialog.c (copy_item): Rewritten.
942         (initialize_keybox): Add comment to clarify use of fnd_keys.
943         (recipient_dialog_box): Simplified.
944         (find_item): Support partial search.
945         
946 2006-08-19  Timo Schulz  <ts@g10code.de>
947
948         * olflange-rsrcs.rc: Correct some dialog sizes.
949         * passphrase-dialog.c (decrypt_key_dlg_proc): Automatically
950         select the secret key if only one is available.
951         * config-dialog.c (GPGOptionsDlgProc): Passphrase cache
952         time is now requested in minutes but still internally
953         stored as seconds.
954         
955 2006-08-15  Timo Schulz  <ts@g10code.de>
956
957         * decrypt.bmp, encrypt.bmp: Restore format.
958         * olflange.cpp (OnWriteComplete): Correct exit code handling.
959         * recipient-dialog.c (initialize_rsetbox): Correct column width.
960         (recipient_dlg_proc): Do not show the cancel error any longer.
961         * passphrase-dialog.c (decrypt_key_dlg_proc): Likewise.
962         (decrypt_key_ext_dlg_proc): Ditto.
963         * olgpgcore.def: Deleted unused file.
964         
965 2006-06-14  Timo Schulz  <ts@g10code.com>
966
967         * gpgol-rscs.rc (IDD_OPT): The English version of the dialog
968         has no log file item. Add it.
969         
970 2006-05-22  Timo Schulz  <ts@g10code.com>
971
972         * verify-dialog.c (load_sigbox): A sigsum of 0 also indicates
973         a valid (good) signature.
974         
975 2006-04-25  Werner Koch  <wk@g10code.com>
976
977         * xmalloc.h: New.  Moved prototypes from util.h 
978         * w32-gettext.h:  Include it.
979         * common.c (utf8_to_wincp): Removed and replaced all callers by
980         utf8_to_native.
981         * common.c (wchar_to_utf8, utf8_to_wchar): Moved to ..
982         * w32-gettext.c: .. here.
983         (utf8_to_native): Make sure that we always return
984         a string and never NULL.
985         (native_to_utf8): New.
986         (native_to_wchar): New.
987         * gpgmsg.cpp (decrypt): Use native_to_utf8 for i18n strings
988         expected to be utf-8.
989         * pgpmime.c (pgpmime_decrypt, pgpmime_verify): Ditto.
990
991 2006-04-24  Werner Koch  <wk@g10code.com>
992
993         * gpgmsg.cpp (decrypt): New arg INFO_ONLY.
994         * olflange.cpp (OnReadComplete): Add code to call decrypt but with
995         INFO_ONLY if preview decryption has not been requested.
996         * main.c (read_options): New compatibility option no_preview_info.
997
998         * gpgmsg.cpp (getRecipients): Don't add the default key here.
999         (encrypt_and_sign): But do it here.
1000         * engine-gpgme.c (op_get_one_key): New.
1001
1002 2006-04-22  Timo Schulz  <ts@g10code.com>
1003
1004         * common.c (utf8_to_wincp): Corrected utf8 decoding.
1005         * passphrase-dialog.c (load_recipbox): Likewise.
1006         * olflange-dlg.cpp (GPGOptionsDlgProc): Activate the
1007         'confirm' button when the dialog state has been changed.
1008         * olflange-rsrcs.rc (IDD_GPG_OPTIONS_DE): Change description.
1009         
1010 2006-03-28  Werner Koch  <wk@g10code.com>
1011
1012         * olflange-rsrcs.rc (IDD_GPG_OPTIONS_DE): Add new control box.
1013         (IDD_GPG_OPTIONS): Updated to match German version.
1014         * olflange-dlgs.cpp (GPGOptionsDlgProc): Ditto.
1015         * gpgmsg.cpp (decrypt): Implemented PREFER_HTML option.
1016         (get_long_attach_data): New.
1017
1018 2006-03-27  Werner Koch  <wk@g10code.com>
1019
1020         * engine-gpgme.c (op_verify_detached_sig_gpgme): New.
1021
1022         * pgpmime.c (pgpmime_verify): New. First take on a PGP/MIME
1023         signature verification.
1024
1025         * gpgmsg.cpp (is_pgpmime): Renamed to is_pgpmime_enc.
1026         (class GpgMsgImpl): Niew members media_type. media_subtype and
1027         ct_protocol.
1028         (get_msg_content_type): New.
1029         (decrypt): Show a warning for PGP/MIME signed messages.
1030
1031 2006-03-26  Werner Koch  <wk@g10code.com>
1032
1033         * intern.h: New option PREFER_HTML.
1034         * main.c (write_options, read_options): Ditto.
1035
1036 2006-03-20  Werner Koch <wk@g10code.com>
1037
1038         * olflange.cpp (Install): Also check major part of build version.
1039         
1040 2006-03-17  Timo Schulz  <ts@g10code.com>
1041
1042         * w32-gettext.c (utf8_to_native): Make it global.
1043         * config-dialog.c (get_open_file_name): Make sure the selected
1044         file really exists.
1045         * passphrase-dialog.c (decrypt_dlg_proc): UTF8 conversion.
1046         (passphrase_callback_box): Likewise.
1047         * recipient-dialog.c (recipient_dlg_proc): Likewise.
1048         * verify-dialog.c (load_akalist): Likewise.
1049         (load_sigbox): Likewise.
1050         * common.c (utf8_to_wincp): New.
1051
1052 2006-03-15  Werner Koch  <wk@g10code.com>
1053
1054         * olflange.cpp (Install): Print gpgol version for debugging.
1055
1056 2006-03-14  Timo Schulz  <ts@g10code.com>
1057
1058         * passphrase-dialog.c (decrypt_dlg_proc): When used
1059         as a signing key selection dialog, use a different title.
1060         * gpgol-rsrcs.rc: Use German titles for German dialog versions.
1061         
1062 2006-02-23  Werner Koch  <wk@g10code.com>
1063
1064         * main.c (read_options): Set default caching time to 10 minutes.
1065
1066 2006-01-16  Werner Koch  <wk@g10code.com>
1067
1068         * verify-dialog.c (load_sigbox): Give a hint in case of a bad
1069         signature.
1070
1071         * gpgol-rsrcs.rc (IDD_ENC_DE): Add an informational header.
1072
1073 2005-12-07  Werner Koch  <wk@g10code.com>
1074
1075         * olflange.cpp (Install): Check the version and print a warning.
1076
1077         * olflange-dlgs.cpp (GPGOptionsDlgProc): Simplified the default
1078         key code.
1079
1080         * config-dialog.c (store_config_value): Create key if it does not
1081         exists.
1082         (load_config_value_ext): Removed.
1083
1084 2005-12-06  Werner Koch  <wk@g10code.com>
1085
1086         * config-dialog.c (start_key_manager): Don't pass the options to
1087         access.
1088
1089 2005-12-06  Werner Koch  <wk@g10code.com>
1090
1091         * gpgmsg.cpp (getRecipients): Add the default key to the list of
1092         recipients.
1093         * recipient-dialog.c (recipient_dlg_proc): Add the already found
1094         keys to the selected ones.
1095
1096         * olflange.cpp (OnWriteComplete): Need to disable the deleting of
1097         HTML bodys.
1098
1099 2005-12-05  Werner Koch  <wk@g10code.com>
1100
1101         * Makefile.am (gpgol_LDADD): Add -loleaut32.
1102         * engine-gpgme.c (op_verify_detached_sig_mem): New.
1103         * olflange.cpp (OnWriteComplete): Pass HTML flag to sign call.
1104         (put_outlook_property): Need to use a BSTR for the sake of putting
1105         HTMLBody.
1106         * gpgmsg.cpp (sign): Add arg WANT_HTML.
1107         (free_attach_info): New.  Use it in the destructor.
1108         (createHtmlAttachment): New.
1109         (encrypt_and_sign, sign): Use it here.
1110         (writeAttestation): Don't write an empty attestation.
1111
1112 2005-12-02  Werner Koch  <wk@g10code.com>
1113
1114         * verify-dialog.c (verify_dialog_box): Actually allow for German
1115         dialog.
1116         * recipient-dialog.c (recipient_dialog_box) 
1117         (recipient_dialog_box2): Ditto.
1118         * passphrase-dialog.c (signer_dialog_box) 
1119         (passphrase_callback_box): Ditto.
1120
1121         * intern.h (struct): New field PREVIEW_DECRYPT.  Use it instead os
1122         the old compatibility flags.
1123         * main.c (write_options, read_options): Store/load preview decrypt.
1124         * config-dialog.c (config_dlg_proc): Removed homedir and gpgbinary
1125         options as they are deprecated. Put logfile entry here.
1126         * olflange-dlgs.cpp (GPGOptionsDlgProc): Remove logfile entry. Add
1127         preview-decrypt checkbox.
1128         * olflange.cpp (InstallCommands): Remove experimental preview
1129         command.
1130
1131         * w32-gettext.c (gettext_localename): New.
1132         * config-dialog.c (config_dialog_box): Use it here to match the
1133         gettext behaviour.
1134         (GetPages): Ditto.
1135
1136 2005-12-01  Werner Koch  <wk@g10code.com>
1137
1138         * engine-gpgme.c (op_decrypt_stream_to_gpgme, decrypt_stream) 
1139         (op_decrypt): Add arg PREVIEW_MODE.
1140         * pgpmime.c (pgpmime_decrypt): New arg PREVIEW_MODE.
1141         (struct pgpmime_context): New field PREVIEW.
1142         (message_cb, plaintext_handler): Handle preview mode.
1143         * gpgmsg.cpp (class GpgMsgImpl): Renamed SILENT to PREVIEW.
1144         (setSilent): Renamed to ..
1145         (setPreview): .. this.
1146         (decrypt): Handle preview mode.  Display a string while decrypting
1147         PGP/MIME messages.
1148
1149         * display.cpp (update_display): New arg TEXT.
1150         * gpgmsg.cpp (class GpgMsgImpl): Removed BODY_PLAIN and BODY.
1151         (getDisplayText): Removed.
1152         (loadBody): Changes to return the allocated body.
1153         (getOrigText): Removed.
1154         (getMessageType): Rewritten to take the body text as argument.
1155         (decrypt): Pass plaintext directly to update_display.  Free
1156         plaintext.
1157         (sign, encrypt_and_sign): Likewise.
1158
1159         * olflange.cpp (OnWriteComplete): Always delete PR_BODY on error.
1160
1161 2005-11-30  Werner Koch  <wk@g10code.com>
1162
1163         * gpgmsg.cpp: Made more strings translatable.
1164         * olflange.cpp: Replaced all LoadStrings by gettext calls.
1165         * olflange-ids.h: Removed the IDS_ constants.
1166         * olflange-rsrcs.rc: Removed the stringtables.
1167
1168         * common.c (get_root_key, read_w32_registry_string): New.  Taken
1169         for libgpg-error.
1170         * main.c (i18n_init): New.
1171         (DllMain): Call it.
1172         (get_locale_dir, drop_locale_dir): New.
1173
1174         * w32-gettext.c, w32-gettext.h: New.  Taken form libgpg-error.
1175         Slightly modified due to the fact that gpgol is W32-only.
1176         * util.h (_, N_): Define standard i18n macros.
1177
1178         * display.cpp (set_message_body): Do not delete a RTF property.
1179
1180         * util.h (SRCNAME): New.  Changed all __FILE__ to this.
1181         * main.c (log_srcname): New.
1182
1183 2005-11-20  Werner Koch  <wk@g10code.com>
1184
1185         * gpgmsg.cpp (loadBody): For HTML try to read the HTMLBody from
1186         the OOM as a last resort.
1187         * olflange.cpp (get_outlook_property): New.
1188         (put_outlook_property_int): New.
1189
1190 2005-11-15  Werner Koch  <wk@g10code.com>
1191
1192         * Makefile.am (gpgol_LDADD): Remove -lintl for now.
1193
1194         * olflange.cpp (OnWriteComplete): Make sure that we don't sent out
1195         unencrypted stuff on error.
1196         * display.cpp (set_message_body): Add arg IS_HTML.
1197         (update_display): Ditto.
1198
1199         * gpgmsg.cpp (loadBody): New arg WANT_HTML.
1200         (getOrigText): Ditto.
1201
1202         * olflange.h (class CGPGExchExtMessageEvents): Add M_WANT_HTML.
1203         * olflange.cpp (OnWrite): Set it.
1204         (OnWriteComplete): Pass its value to the encrypt functions.
1205
1206 2005-11-10  Werner Koch  <wk@g10code.com>
1207
1208         * config-dialog.c (start_key_manager): Changed invocation of
1209         default keymanager.
1210
1211 2005-10-21  Marcus Brinkmann  <marcus@g10code.de>
1212
1213         * Makefile.am (libgpgme.a, libgpgme.a): New targets.
1214         (gpgol_DEPENDENCIES): Add libgpgme.a and libgpg-error.a.
1215         (clean-local): Likewise.
1216         (gpgol_LDADD): Link to these local versions statically.
1217
1218 2005-10-20  Marcus Brinkmann  <marcus@g10code.de>
1219
1220         * mapi32.def: New file.
1221         * Makefile.am (gpgol_DEPENDENCIES): New variable.
1222         (libmapi32.a): New target.
1223         (gpgol_LDADD): Replace mapi32.dll with "-L . -lmapi32".
1224         (clean-local): New target.
1225
1226 2005-10-19  Werner Koch  <wk@g10code.com>
1227
1228         * gpgmsg.cpp (sign, encrypt_and_sign): Don't set the body first to
1229         empty. If this is really required we should do this in
1230         set_message_body.
1231         (sign): Save changes. Set content type to text/plain.
1232         (encrypt_and_sign): Save changes also for empty bodies.
1233
1234 2005-10-06  Werner Koch  <wk@g10code.com>
1235
1236         * gpgmsg.cpp (writeAttestation): Use gpgme_free for BUFFER.
1237         * engine-gpgme.c (data_to_file): Ditto.
1238
1239 2005-10-06  Marcus Brinkmann  <marcus@g10code.de>
1240
1241         * Makefile.am (gpgol_DEPENDENCIES): New variable.
1242         (libmapi32.a): New target.
1243         (gpgol_LDADD): Replace mapi32.dll with "-L . -lmapi32".
1244
1245         * Makefile.am (gpgol_LDADD): Prefix gpgol.def and mapi32.dll with
1246         $(srcdir).
1247
1248         * Makefile.am (.rc.o): Invoke windres with "-I .".
1249
1250         * Makefile.am (.rc.o): Invoke windres with -I $(srcdir).
1251
1252         * Makefile.am (gpgol_SOURCES): Add util.h.
1253
1254 2005-09-29  Werner Koch  <wk@g10code.com>
1255
1256         * gpgmsg.cpp (encrypt_and_sign): Pass signing key to encryption
1257         function.
1258
1259         * passphrase-dialog.c (signer_dialog_box): New arg encrypting. 
1260
1261         * gpgmsg.cpp (encrypt_and_sign): Set content type.
1262
1263         * engine-gpgme.c (op_lookup_keys): Fixed multiple key detection.
1264
1265 2005-09-28  Werner Koch  <wk@g10code.com>
1266
1267         * olflange.cpp (DoCommand): Catch close command and resend to
1268         avoid the "save changes?".
1269
1270         * display.cpp (update_display): Take care of utf-8 issues.
1271         * common.c (latin1_to_utf8): New.
1272         * pgpmime.c (latin1_data_write): New.
1273         (plaintext_handler): Use it here.
1274         (message_cb): Detect utf-8 encoding.
1275
1276         * main.c (read_options): Make sure that compat flags are always
1277         properly initialized.
1278
1279         * display.cpp (find_message_window): First try to find the window
1280         by class name.
1281
1282         * common.c (wchar_to_utf8_2): New.
1283
1284 2005-09-27  Werner Koch  <wk@g10code.com>
1285
1286         * pgpmime.c (pgpmime_decrypt): Pass a pseduo filename to the
1287         decryption function.
1288
1289         * verify-dialog.c (load_sigbox): Get key direct from gpgme.
1290         * passphrase-dialog.c (load_secbox, load_recipbox): Reworked.
1291         (decrypt_key_dlg_proc, decrypt_key_ext_dlg_proc): Reworked.
1292         (count_keys, release_keyarray): New.
1293         (signer_dialog_box, passphrase_callback_box): Adjusted to above
1294         changes.
1295         * engine-gpgme.c (op_deinit): Remove keycache cleanup.
1296         * Makefile.am (gpgol_SOURCES): Removed keycache.c, keycache.h.
1297         * keycache.c, keycache.h: Removed.
1298
1299         * recipient-dialog.c (recipient_dialog_box) 
1300         (recipient_dialog_box2): Rewritten and changed interface.
1301         (load_rsetbox): Removed keycache stuff and rewrote to make use of
1302         the keyarray.
1303         (copy_item, initialize_keybox, recipient_dlg_proc): Ditto.
1304         (keycache_to_key_array): Removed.
1305         * engine-gpgme.c (op_lookup_keys): Rewritten, changed interface.
1306         * gpgmsg.cpp (count_recipients): Renamed to ..
1307         (count_strings): .. this.
1308         (count_keys): New.
1309         (free_recipient_array): Renamed to ..
1310         (free_string_array): .. this.
1311         (encrypt_and_sign): Adjusted for changes in op_lookup_keys and
1312         recipient_dialog_box2.
1313
1314 2005-09-26  Werner Koch  <wk@g10code.com>
1315
1316         * passphrase-dialog.c (get_pubkey_algo_str): Add DSA and old Elgamal.
1317
1318         * gpgmsg.cpp (gatherAttachmentInfo): Ignore attachments we can't
1319         open.
1320
1321         * main.c (write_options): Print message on error.  Rearranged to
1322         make use of a table for all options.
1323
1324 2005-09-23  Werner Koch  <wk@g10code.com>
1325
1326         * recipient-dialog.c (recipient_dlg_proc): Removed
1327         IDC_ENC_OPTARMOR stuff; it was not used.
1328         (load_rsetbox): Fixed detection of encryption capability.
1329
1330         * gpgol-ids.h, gpgol-rsrcs.rc: Ditto.
1331         
1332 2005-09-22  Werner Koch  <wk@g10code.com>
1333
1334         * engine-gpgme.c (decrypt_stream): Use gpgme_op_decrypt_verify.
1335
1336         * gpgmsg.cpp (gatherAttachmentInfo): Ignore attestations when
1337         checking for pgp/mime.
1338
1339         * pgpmime.c (pgpmime_decrypt): Added arg HWND.
1340         (message_cb, plaintext_handler): Write attachments.
1341         * pgpmime.c (base64_decode): New.
1342         * rfc822parse.c (parse_field): Treat Content-Disposition special.
1343
1344         * gpgmsg.cpp (get_save_filename): Moved to ..
1345         * common.c (get_save_filename): .. here.
1346
1347 2005-09-20  Timo Schulz  <ts@g10code.com>
1348
1349         * attach.c: New.
1350         * attach.h: New.
1351         * olflange.cpp (CGPGExchExt): Allocate class for
1352         attached file events.
1353         (QueryInterface): Return interface pointer for
1354         attached file events.
1355         * passphrase-dialog.c (load_secbox): Use new GPGME
1356         interface.
1357         (get_pubkey_algo_str): New.
1358         * verify-dialog.c (load_sigbox): Likewise.
1359         * recipient-dialog.c (load_recipbox): Likewise.
1360
1361 2005-09-19  Werner Koch  <wk@g10code.com>
1362
1363         * msgcache.c (flush_if_needed): New.
1364         (msgcache_put): use it.
1365         * intern.h (opt): New compatibility flags AUTO_DECRYPT and
1366         NO_ATTESTATION.
1367         * olflange.cpp (InstallCommands): Use watcher stuff only when this
1368         option has been enabled.
1369         * gpgmsg.cpp (decrypt): Take care of NO_ATTESTATION.
1370         * main.c (DllMain): Removed debug output; this should not be
1371         used before initialization!
1372         * watcher.cpp: Include config.h.  Removed weird line endings.
1373         * gpgmsg.cpp (encrypt_and_sign): Call SaveChanges.
1374
1375 2005-09-15  Timo Schulz  <ts@g10code.com>
1376
1377         * util.h: Provider watcher prototypes.
1378         * watcher.cpp (watcher_init_hook): New.
1379         (watcher_free_hook): New.
1380         (watcher_set_callback_ctx): New.
1381         (cbt_proc): New.
1382         * display.cpp (find_message_window): Removed GpgMsg param.
1383         Changed all callers.
1384         
1385 2005-09-15  Werner Koch  <wk@g10code.com>
1386
1387         * olflange.cpp (OnWriteComplete): Take care of EEME_FAILED.
1388         (OnWrite): Check that we are encrypting only plain text messages.
1389
1390         * myexchext.h: Add flags used by OnReadComplete.
1391
1392 2005-09-14  Werner Koch  <wk@g10code.com>
1393
1394         * gpgmsg.cpp (writeAttestation): Add a content type.
1395         (gatherAttachmentInfo): Detect whether we already have an attestation.
1396         (decrypt): Don't create duplicate attestations.
1397         (writeAttestation): Translate LF to CRLF.
1398
1399 2005-09-13  Werner Koch  <wk@g10code.com>
1400
1401         * pgpmime.c (pgpmime_decrypt): New arg ATTESTATION.
1402         * engine-gpgme.c (add_verify_attestation): New.
1403         (op_decrypt, op_verify_detached_sig, op_verify_detached_sig)
1404         (op_verify_detached_sig): Add new arg ATTESTATION.  Changed all
1405         callers.
1406         (at_sig_summary, at_sig_validity, add_verify_attestation): New.
1407         The code has been taken and modified from Mutt's crypt-gpgme.c and
1408         entirely been writen by g10 Code.
1409         (at_fingerprint): Ditto.
1410
1411         * gpgmsg.cpp (class GpgMsgImpl): New member ATTESTATION.  Use it
1412         in all calls to the functions above.
1413
1414         * gpgmsg.cpp (decryptAttachment, decrypt): Save plaintext back
1415         into the MAPI if desired.
1416
1417 2004-09-08  Timo Schulz  <ts@g10code.com>
1418
1419         * passphrase-dialog.c (lod_recipbox): Use gpgme directly
1420         to resolve the keyids to userids.
1421         * usermap.c, usermap.h: Removed.
1422         * HashTable.cpp, HashTable.h: Removed.
1423
1424 2005-09-07  Timo Schulz  <ts@g10code.com>
1425
1426         * common.c: Removed unused code.
1427         * intern.h: Likewise.
1428
1429 2005-09-07  Timo Schulz  <ts@g10code.com>
1430
1431         * olflange.cpp (ul_release): New. Wrapper with error checking
1432         around UlRelease.
1433         (InstallCommands): Separate test for type and if string is empty.
1434         
1435 2005-09-06  Werner Koch  <wk@g10code.com>
1436
1437         * engine-gpgme.c (op_decrypt_stream): Factored most code out to ..
1438         (decrypt_stream): .. new.
1439         (op_decrypt_stream_to_buffer): Simplified accordingly.  Fixed
1440         possible buffer overflow when trying to make it a string. 
1441         (op_decrypt_stream_to_gpgme): New.
1442
1443         * pgpmime.c, pgpmime.h: New.
1444         * rfc822parse.h, rfc822parse.c: New.  Taken from GnuPG 1.9.
1445
1446 2005-09-06  Timo Schulz  <ts@g10code.com>
1447
1448         * config-dialog.c (get_open_file_name): Correctly terminated filter.
1449         New parameter for the title. Changed all callers.
1450         (get_folder): Likewise.
1451         
1452 2005-09-01  Werner Koch  <wk@g10code.com>
1453
1454         * gpgmsg.cpp (get_pgp_armor_type): New.
1455         (gatherAttachmentInfo):  Enhanced to detect text/plain pgp.
1456         (verify): Removed.
1457         (decrypt): Do clearsig verification here.
1458
1459         * gpgmsg.cpp (decrypt): Kludge to workaround OL not updating a
1460         window.
1461         * msgcache.c (msgcache_get_from_mapi): New.
1462         * display.cpp (find_message_window): Don't use the GpgMsg function
1463         to to the string compare.
1464         * gpgmsg.cpp (matchesString): Removed.
1465
1466         * msgcache.c (msgcache_set_active): Removed.
1467         (msgcache_get): Rewritten.
1468         (msgcache_put): Now uses PR_CONVERSATION_INDEX as key.  Update
1469         existing entries.
1470
1471         * olflange.cpp (OnRead): Removed msgcache_set_active.
1472         (InstallCommands): Now uses the ConversationIndex to match the
1473         reply with the message.
1474
1475 2005-08-31  Werner Koch  <wk@g10code.com>
1476
1477         * olflange.cpp (DllRegisterServer): Define a CLSID and set the
1478         ThreadingModel.
1479
1480 2005-08-30  Werner Koch  <wk@g10code.com>
1481
1482         Renamed from "outlgpg" to "gpgol".
1483
1484         More or less finished this major rewrite.
1485
1486 2005-08-26  Werner Koch  <wk@g10code.com>
1487
1488         * MapiGPGME.cpp, MapiGPGME.h: Removed.
1489         * display.cpp, display.h: New. 
1490
1491 2005-08-23  Werner Koch  <wk@g10code.com>
1492
1493         * msgcache.c, msgcache.h: New.
1494
1495 2005-08-22  Werner Koch  <wk@g10code.com>
1496
1497         * olflange.cpp: Major cleanups and partly rewrites.
1498
1499 2005-08-18  Werner Koch  <wk@g10code.com>
1500
1501         * gpgmsg.cpp, gpgmsg.hh: New.
1502         
1503 2005-08-17  Werner Koch  <wk@g10code.com>
1504
1505         * MapiGPGME.cpp (setMessageAccess): Removed as it was only used at
1506         one place.
1507         (setRTFBody): Use the above code here directly..
1508         (setWindow, setMessage): Removed.  We can't use that because there
1509         is only one instance of this class.
1510         (decrypt): Add args HWND and MSG.  Changed caller.
1511         (getBody): Changed to ..
1512         (get_body): .. plain function and add new arg MSG.  Changed all
1513         callers.
1514         (isHtmlMessage): Likewise changed to ..
1515         (is_html_message): .. plain function and add new arg MSG.
1516         (doCmd): Removed.
1517
1518         * common.c (utf8_to_wchar): New.
1519
1520         * MapiGPGME.cpp (passphraseCallback): Removed.
1521         (getPassphrase, clearPassphrase, storePassphrase): Removed.
1522         (add_html_line_endings): Rewritten.
1523
1524         * engine-gpgme.c (op_sign_encrypt_start): Removed because it is
1525         not used anywhere.
1526         (op_sign): Renamed to ..
1527         (do_sign): .. this and made local.
1528
1529 2005-08-16  Werner Koch  <wk@g10code.com>
1530
1531         * MapiGPGME.cpp (signAttachment): Simplified.
1532         * engine-gpgme.c (op_sign_file): Add arg TTL.
1533         (op_sign_file_ext): Removed.
1534         (op_sign_file_next): Renamed to ..
1535         (do_sign_file): .. this and made local.
1536         (do_sign_file): Updated to use new passphrase callback
1537         semantics.
1538         (op_decrypt_file): Ditto.
1539         (free_recipients): Need to use gpgme_key_release and not just
1540         free.
1541
1542         * engine-gpgme.c (do_decrypt): Factored some code out to ..
1543         (update_passphrase_cache): .. new.
1544         (op_sign_encrypt_file): Updated to use new passphrase callback
1545         semantics.
1546
1547         * MapiGPGME.cpp (getBody): Properly distinguish property types.
1548         (delete_buf): Removed macro.  We now use malloc for the body
1549         string.  Changed other places to use delete directly for clarity.
1550         (fail_if_null): Removed.  Replaced by direct tests and a call to
1551         out_of_core.
1552         (setDefaultKey): Now use malloc/free instead of new/delete.
1553         Changed at other places too.
1554         (getDefaultKey): Changed to return a const char *.
1555
1556         * common.c (wchar_to_utf8): New.
1557         (out_of_core): Made global and call abort after displaying the
1558         message box.
1559
1560 2005-08-14  Werner Koch  <wk@g10code.com>
1561
1562         * MapiGPGME.cpp (log_debug_w32): New.
1563         (do_log): New arg W32ERR.  Make sure to print a trailing LF.
1564
1565         * passphrase-dialog.c (passphrase_callback_box): Revamped.
1566         (free_decrypt_key): Wipe out a passphrase.  Remove superfluous
1567         variable clearing.
1568         * util.h (wipememory2, wipememory): New.
1569         (wipestring): New.
1570         * engine-gpgme.c (op_decrypt): Renamed to ..
1571         (do_decrypt): .. this and made local.
1572         (clear_error_if_cancel): Removed as we inlined the code.
1573         (do_decrypt): Cleaned up.
1574         * main.c (DllMain): Initialize passcaching subsystem.
1575         * passcache.c, passcache.h: New.
1576         * intern.h: Include it here.
1577         * util.h: New.
1578
1579         * olflange.cpp (DllRegisterServer): Remove key for the old
1580         versions of this plugin.
1581
1582         Merged olgpgmain.dll and olgpgcore.dll into outlgpg.dll.
1583         
1584         * Makefile.am: Renamed target to outlgpg. Added required files.
1585         * olflange.cpp, olflange.h: Renamed from GPGExch.cpp and
1586         GPGExch.h.  Removed all the MFC cruft as it is not required - it
1587         was only used to get hands on the hInstance of the DLL; chnaged
1588         that to use the glob_hinst which gets set by DllMain.
1589         * outlgpg.def: New.
1590         * olflange-def.h: New.
1591         * olflange-dlgs.cpp: Renamed from GPGOptionsDlgs.cpp.
1592         * olflange-ids.h: Renamed from ../olflange/resource.h
1593         * olflange-rsrcs.rc: Renamed from ..olflange/olgpgmaindlgs.rc and
1594         stripped off unneedded stuff.
1595         * olgpgcoredlgs.rc: Renamed to ..
1596         * outlgpg-rsrcs.rc: .. this and stripped of cruft.
1597         * olgpgcoredlgs.h: Renamed to ..
1598         * outlgpg-ids.h: .. this.
1599         * versioninfo.rc.in: New.
1600         
1601 2005-08-12  Timo Schulz  <ts@g10code.com>
1602
1603         * config-dialog.c (sotre_extension_value, load_extension_value):
1604         Adjust registry key.
1605
1606 2005-08-12  Werner Koch  <wk@g10code.com>
1607
1608         * intern.h: Moved keycache prototypes to keycache.h.
1609         * MapiGPGME.cpp (lock_log, unlock_log): New.
1610         * engine-gpgme.c (op_init): Check GPGME version.
1611         * main.c (outlook_gpg_get_version): Removed as it is now derived
1612         from config.h.
1613         (DllMain): Initializes gpgme and mapigpgme.
1614         * MapiGPGME.cpp (initialize_mapi_gpgme): New.
1615
1616         * config-dialog.c (store_extension_value, load_extension_value):
1617         Changed key to "OutlGPG".
1618
1619         * MapiGPGME.h (class MapiGPGME): New methods versionString and
1620         showVersion.  Breaks ABI but it doesn't matter as we are also
1621         going to change the name of the project.
1622
1623         * Makefile.am: Renamed target to olgpgcore.
1624         * resource.h: Renamed to ...
1625         * olgpgcoredlgs.h: .. and removed cruft from generator.
1626         * gpgmedlgs.rc: Renamed to ..
1627         * olgpgcoredlgs.rc: ... and removed cruft.
1628         * libgpgmedlgs.def: Renamed to ..
1629         * olgpgcore.def: .. this.
1630         
1631 2005-08-11  Werner Koch  <wk@g10code.com>
1632
1633         * MapiGPGME.cpp (log_debug): New.  Rewrote the whole log stuff.
1634         It is not anymore per instance.
1635         (logDebug): New version with va_list arg.
1636
1637         * MapiGPGME.cpp (passphraseCallback): Use gpgme_error_t becuase
1638         C++ enforces enum types.
1639
1640         * engine-gpgme.c (op_lookup_keys): s/id/names/.  id is a reved
1641         word Obj-C and it is good style not to use it in plain C code.
1642         (op_sign_file_next): Use gpgme_passphrase_cb_t in declaration.
1643         (op_decrypt_next): Ditto.
1644
1645         * MapiGPGME.cpp (count_recipients): Renamed from countRecipients
1646         method, made local and changed both callers.
1647         (log_key_info): Changed output format.  New arg PREFIX. Changed
1648         callers.
1649         (add_html_line_endings): Renamed from addHtmlLineEndings method
1650         and made local.
1651         (logDebug): Open in text mode.  Removed all superfluous "\r" from
1652         callers.
1653
1654 2005-08-09  Timo Schulz  <ts@g10code.com>
1655
1656         * main.c (outlook_gpg_get_version): New.
1657         Use same version as the Outlook GPG plugin.
1658
1659         * MapiGPGME.cpp [!__MINGW32__]: Changed sequence of include files.
1660
1661 2005-08-09  Werner Koch  <wk@g10code.com>
1662
1663         * MapiGPGME.cpp (userid_from_key, keyid_from_key): New. Changed
1664         all calls to the deprecated gpgme_key_get_string_attr function by
1665         these.
1666
1667         * MapiGPGME.h, MapiGPGME.cpp: Splitted into interace and
1668         implementation.
1669         * HashTable.h (class HashTable): No need to dll export anything.
1670
1671 2005-08-08  Werner Koch  <wk@g10code.com>
1672
1673         * common.c (w32_shgetfolderpath): Added.
1674         * config-dialog.c (load_config_value_ext): use it here.
1675
1676 2005-07-21  Timo Schulz  <twoaday@g10code.com>
1677
1678         * MapiGPGME.cpp (decrypt): Only return if no valid PGP
1679         data was found and the message has no attachments.
1680         * engine-gpgme.c (op_encrypt): Use --textmode to fix 
1681         problems when the recipient OS has different line endings.
1682         For example Win32->Linux.
1683
1684 2005-07-20  Timo Schulz  <twoaday@g10code.com>
1685
1686         * MapiGPGME.cpp (addHtmlLineEndings): New.
1687         (encrypt):Use it here.
1688         (signEncrypt): Likewise. Free memory in case of errors.
1689         (decrypt): Free memory in case of the verify procedure.
1690         Issue a warning when the text of the mail could not be
1691         updated.
1692         (isMessageEncrypted): New.
1693         (countAttachments): Check for null pointers.
1694         (clearPassphrase): Likewise.
1695         * config-dialog.c (store_config_value): Support '%val%' input.
1696         * verify-dialog.c (load_akalist): Return the number of user-ids
1697         which were added.
1698         * passphrase-dialog.c (load_secbox): Make sure we really start
1699         to add the item data at the begin.
1700         * intern.h: Fixed GCC compiler problem.
1701
1702 2005-07-19  Timo Schulz  <twoaday@g10code.com>
1703
1704         * MapiGPGME.cpp (encrypt): Handle cancel.
1705         (encryptAttachments): If no attachments exist, close the table.
1706         (decryptAttachments): Likewise.
1707         (signAttachments): Likewise.
1708         (isHtmlBody): New.
1709         (isHtmlMessage): New.
1710         (setBody): Html support.
1711         (encrypt): Figure out if message is html and encode the right body.
1712         (signEncrypt): Likewise.
1713         (verify): Always use the non-html body for GPG input.
1714         (decrypt): Likewise.
1715
1716         * engine-gpgme.c (recipient_dialog_box2): Set cancel flag.
1717         (op_sign_start): Handle cancel.
1718         (recipient_dlg_proc): Make sure there is at least one selected
1719         key. Disable armor checkbox.
1720
1721 2005-07-19  Timo Schulz  <twoaday@g10code.com>
1722
1723         * MapiGPGME.cpp (~MapiGPGME): After releasing the
1724         memory, set all pointers to NULL. It seems that NT5
1725         bases operating systems are more pedantic with such
1726         issues than 9X based systems.
1727         (freeUnknownKeys): Likewise.
1728         (freeRecipients): Likewise.
1729         (encrypt): Outlook 2003 returns a body string which
1730         is not NULL but \0 with a length of 0. Handle it.
1731         (sign): Likewise.
1732         (signEncrypt): Likewise.
1733
1734         * engine-gpgme.c (free_recipients): New.
1735         (op_encrypt_start): Handle cancel and free memory.
1736
1737
1738 2005-07-18  Timo Schulz  <ts@g10code.com>
1739
1740         * gpgmedlgs.rc: Native language support for German.
1741
1742 2005-07-14  Timo Schulz  <ts@g10code.com>
1743
1744         * MapiGPGME.cpp: Add some missing MAPI constants.
1745         (passphrase_callback_box): Repair cancel button.
1746         (decrypt): If the user cancels the operation, do not
1747         alter the message text.
1748         * config-dialog.c (expand_path): New. From WinPT.
1749         (load_config_value): Support for REG_EXPAND_SZ.
1750         Suggested by Sebastian.
1751
1752 2005-07-13  Timo Schulz  <ts@g10code.de>
1753
1754         * MapiGPGME.cpp (sign): Ignore empty bodies.
1755         (signEncrypt): Likewise. Free recipient memory.
1756         (encrypt): Modify code so it really works.
1757         (attachPublicKey): New.
1758         * engine-gpgme.c (op_export_keys): New.
1759
1760 2005-07-12  Timo Schulz  <ts@g10code.de>
1761
1762         * MapiGPGME.cpp (displayError): New.
1763         (writeOptions): Use it here. Simplify the code.
1764         (signAttachments): New.
1765         (sign): Sign attachments. Noted by Ralf.
1766         (processAttachment): Support for sign-only.
1767
1768 2005-07-08  Timo Schulz  <ts@g10code.de>
1769
1770         * MapiGPGME.cpp (setEnableLogging): New.
1771         (getEnableLogging): New.
1772         (logDebug): Move all logging code to this function.
1773         (readOptions): Automatically enable logging if the
1774         'LogFile' registry entry is valid.
1775         (prepareLogging): New.
1776         (readOptions): Properly handle ""-strings.
1777         * config-dialog.c (does_file_exist): Allow to have
1778         parameters like '--keymanager' and cut them off before
1779         checking the existence.
1780         (start_key_manager): Free memory.
1781         (config_dlg_proc): Initialize pointer to 'NULL'.
1782         (SHFree): New. Special function to handle shell memory.
1783         (get_folder): Free memory.
1784         (does_folder_exist): New.
1785
1786 2005-07-06  Timo Schulz  <ts@g10code.de>
1787
1788         * MapiGPGME.cpp: s/ATTR_/ATT_.
1789         (saveDecryptedAttachment): Cut off the prefix.
1790         (clearConfig): New.
1791         (clearObject): New.
1792         (MapiGPGME): Use it here.
1793
1794         Use ATT_PREFIX instead of a hardcoded string.
1795
1796         * engine-gpgme.c
1797         (op_sign_file_next): New.
1798         (op_sign_file): Call op_sign_file2.
1799         (op_sign_file_ext): New.        
1800
1801 2005-07-05  Timo Schulz  <ts@g10code.de>
1802
1803         * MapiGPGME.cpp (readOptions, writeOptions):
1804         Support for the new 'auto sign attachment' flag.
1805         (signAttachment): New.
1806         (setSignAttachments): New.
1807         (getSignAttachments): New.
1808         * engine-gpgme.c (op_sign_file): Enable armor.
1809
1810 2005-07-03  Timo Schulz  <ts@g10code.com>
1811
1812         * MapiGPGME.cpp (processAttachment): Implement
1813         the decryption part and only use it if the 'save
1814         decrypted attachment' flag is set.
1815         (saveDecryptedAttachment): New.
1816         (writeOptions): Save 'decrypt attachment' flag.
1817         (readOptions): Load it here.
1818         (cleanupTempFiles): Check handle.
1819         (encrypt): If the message has no body skip the
1820         procedure.
1821         (op_decrypt_file): Set recipient callback.
1822         (decryptAttachments): We do not alter the attachment
1823         so there is no need to release it again.
1824
1825         Replace all 'free' with 'xfree'.
1826
1827 2005-07-01  Timo Schulz  <ts@g10code.com>
1828
1829         * MapiGPGME.cpp (processAttachment): Check that
1830         the file has a valid PGP extension before we try
1831         to decrypt the attachment.
1832         (checkAttachmentExtension): Check if the file
1833         extension is a vliad PGP extension.
1834
1835
1836 2005-06-30  Timo Schulz  <ts@g10code.com>
1837
1838         * MapiGPGME.cpp (processAttachment): Use a unique
1839         temp name to make a cleanup at the end easier.
1840         (cleanupTempFiles): Delete possible left over
1841         temp files.
1842         (~MapiGPGME): Use it here.
1843
1844 2005-06-22  Timo Schulz  <ts@g10code.com>
1845
1846         * MapiGPGME.cpp (processAttachment): Close attachment
1847         before we delete it.
1848         (streamOnFile): Directly use the attachment.
1849         (streamFromFile): Likewise.
1850         (closeAttachment): Renamed to..
1851         (releaseAttachment): ..this.
1852
1853 2005-06-21  Timo Schulz  <ts@g10code.com>
1854
1855         * MapiGPGME.cpp (getMessageType): Support all types.
1856         (streamOnFile): More straight forward now.
1857         (encryptAttachments): Get the attachment table first.
1858         (getAttachPathname): New.
1859         (processAttachment): Add new parameter for the position
1860         of the attachment.
1861         (streamFromFile): New.
1862         (generateTempname): New.
1863         * engine-gpgme.c (op_sign_encrypt_file): New.
1864
1865 2005-06-17  Timo Schulz  <ts@g10code.com>
1866
1867         * MapiGPGME.cpp (MapiGPGME): Initialize all attachment
1868         components to zero. Thanks to Sebstian for pointing this out.
1869
1870 2005-06-16  Timo Schulz  <ts@g10code.com>
1871
1872         * engine-gpgme.c (check_encrypt_result): New. Check if
1873         the encrypt procedure returned some invalid recipients.
1874         (op_encrypt): Use it here.
1875         (op_encrypt_file): Likewise.
1876         (op_sign_encrypt): Likewise.
1877         * missing.h: Removed unused constants.
1878         * verify-dialog.c (load_sigbox): Handle v3 RSA keys.
1879         * passphrase-dialog.c (load_secbox): Make sure the index 
1880         from the first loop matche the second. Which means skip
1881         all invalid keys also.
1882
1883 2005-06-13  Timo Schulz  <ts@g10code.com>
1884
1885         * MapiGPGME.cpp (writeOptions): New Option 'defaultKey'.
1886         (readOptions): Likewise. Force overwrite 'addDefaultKey'.       
1887
1888 2005-06-07  Timo Schulz  <ts@g10code.com>
1889
1890         * passphrase-dialog.c (decrypt_key_dlg_proc): Add a
1891         reference to the key object so it will be still valid
1892         after the dialog is destroyed.
1893         * MapiGPGME.cpp (freeUnknownKeys): Do not try to free
1894         the context if no keys are available. Fixed a segv.
1895         (signEncrypt): The new code now gets a persistent pointer
1896         to the key.
1897         * engine-gpgme.c (op_sign_encrypt): Load the right
1898         dialog to request the passphrase.
1899
1900 2005-06-05  Timo Schulz  <ts@g10code.com>
1901
1902         * passphrase-dialog.c (load_recipbox): Check ctx if null.
1903         (passphrase_callback_box): Different dialogs for sign
1904         and decrypt.
1905         (signer_dialog_box): Do not zero the context too early.
1906         * keycache.c (enum_gpg_seckeys): Also reload if ctx
1907         is NULL.
1908         * MapiGPGME.cpp (signEncrypt): Return if the user
1909         cancelled the signer selection dialog.   
1910         * recipient-dialog.c (recipient_dlg_proc): Check 'Text Mode'
1911         button.
1912         * keycache.c (enum_gpg_keys, enum_gpg_seckeys): Fully
1913         reset the keycache initializing it again. Thanks to Ralf.
1914
1915 2005-06-04  Timo Schulz  <ts@g10code.com>
1916
1917         * verify-dialog.c (load_sigbox): Only issue a warning
1918         if the key exists but is not valid.
1919         Get pkalgo from the signature.
1920         Fixed format string problem s/%d/%s.    
1921         * config-dialog.c (load_config_value): Close reg handle.
1922         (config_dlg_proc): Show error if the values could not
1923         be written to the registry.
1924
1925 2005-06-03  Timo Schulz  <ts@g10code.com>
1926
1927         * mapuser.c (new_usermap): New.
1928         (free_usermap): New.
1929         * engine-gpgme.c (op_decrypt): Return 'No_Seckey' if
1930         appropriate and not just 'Decrypt_Failed'.
1931         Set the gpgme_ctx_t object in the callback to allow
1932         to list the 'encrypt_to' entries.
1933         * passphrase-dialog.c (decrypt_key_dlg_proc): Make sure
1934         we only warn when there is a valid callback context.
1935         (load_secbox): New parameter 'ctlid'. Changed all callers.
1936         (load_recipbox): New. Use usermap to lookup user-id's.
1937         (decrypt_key_ext_dlg_proc): New dialog procedure for
1938         the callback mode.
1939         * HashTable.cpp (HashTable_new): New. C-interface.
1940         (HashTable_free): Likewise.
1941         (HashTable_get): Likewise.
1942         (HashTable_put): Likewise.
1943         (HashTable_get_i): Likewise.
1944         (HashTable_size): Likewise.
1945
1946 2005-05-29  Timo Schulz  <ts@g10code.com>
1947
1948         * passphrase-dialog.c (decrypt_key_dlg_proc): Warning
1949         if the user cancels the signing process.
1950         Make the passphrase field invisible if the key is used
1951         in selection mode.
1952         (recipient_dlg_proc): Likewise.
1953         (signer_dialog_box): Return -1 if the user cancelled the
1954         dialog.
1955         * engine-gpgme.c (op_sign): Set flags to '1' to indicate
1956         signing process.
1957         * config-dialog.c (does_file_exist): Use appropriate
1958         length for xmalloc. Noted by Sebastian.
1959
1960 2005-05-24  Timo Schulz  <ts@g10code.com>
1961
1962         * MapiGPGME.cpp (setXHeader): New.
1963         (getXHeader): New.
1964         * engine-gpgme.c (op_sign_file): Implemented.
1965
1966 2005-05-22  Timo Schulz  <ts@g10code.com>
1967
1968         * MapiGPGME.cpp (createAttachment): New.
1969         (deleteAttachment): New.
1970         (encryptAttachments): New.
1971         (encrypt): Also encrypt the attachments if possible.
1972         (signEncrypt): Likewise.
1973         (setEncodingFormat): New.
1974         (getEncodingFormat): New.
1975         (readOptions, writeOptions): Store encoding format.
1976         (MapiGPGME): The default encoding is 'CLASSIC'.
1977
1978 2005-05-21  Timo Schulz  <ts@g10code.com>
1979
1980         * HashTable.h: Export functions.
1981         * MapiGPGME.cpp (freeAttachments): New.
1982         (getAttachments): New.
1983         (openAttachment): New.
1984         (closeAttachment): New.
1985         (processAttachment): New.
1986         (hasAttachments): New.
1987         (countAttachments): New.
1988         (doCmdFile): New. Can handle files.
1989         (doCmdAttach): New. Can handle attachment action types.
1990         (signEncrypt): Release locusr key.
1991         * engine-gpgme.c (op_sign_file): New. Dummy.
1992         (op_sign_encrypt_file): New. Dummy.
1993
1994 2005-05-11  Timo Schulz  <ts@g10code.com>
1995
1996         * common.c (cache_item_new): New.
1997         (cache_item_free): New.
1998         * engine-gpgme.c (op_decrypt_start_ext): Return an cache item and
1999         not just the passphrase. Changed all caller.
2000         * MapiGPGME.cpp (passphraseCallback): Support caching.
2001         (decrypt): Likewise.
2002         (storePassphrase): Likewise.
2003         (getPassphrase): Likewise.
2004         * HashTable.cpp: New.
2005
2006 2005-05-10  Timo Schulz  <ts@g10code.com>
2007
2008         * passphrase-dialog.c (decrypt_key_dlg_proc): Reset 'hide state'.
2009         Show some text when the user entered a wrong passphrase.
2010         * MapiGPGME.cpp (findMessageWindow): New.
2011         (setRTFBody): New.
2012         (decrypt): Just change the window text, not the MAPI object.
2013         Call verify() if this is a clearsigned message.
2014         (getMessageType): New.
2015         (getAttachmentExtension): New.
2016         (verify): Extract text and set it.
2017         * engine-gpgme.c (op_decrypt): Spawn verify dialog if the text
2018         was also signed.
2019         (op_decrypt_file): New.
2020         * verify-dialog.c (load_sigbox): Avoid key cache and give more
2021         information.    
2022         * passphrase-dialog.c (decrypt_key_dlg_proc): Handle 'x' clicks.
2023         * logging.c (log_debug): Disable it for release versions.
2024
2025 2005-05-08  Timo Schulz  <ts@g10code.com>
2026
2027         * MapiGPGME.cpp (readOptions): Handle logfile.
2028         (writeOptions): Likewise.
2029         (storePassphrase): New.
2030         (clearPassphrase): New.
2031         (passphraseCallback): New. Needs to be static...
2032         (decrypt): Store passphrase if requested.
2033         (~MapiGPGME): Free memory.
2034         (streamOnFile): New.
2035         (getAttachMethod): New.
2036         (getAttachFilename): New.
2037         (setAttachMethod): New.
2038         (getAttachFilename): New.
2039         (getMessageHasAttachments): New.
2040         (getMessageFlags): New.
2041
2042         * engine-gpgme.c (op_decrypt): New. Factoured out
2043         code from...
2044         (op_decrypt_start): ..here. Now call op_decrypt
2045         with standard parameters.
2046         (op_decrypt_next): Allow to use a pre-defined 
2047         passphrase callback. Needed for caching.
2048
2049 2005-05-02  Timo Schulz  <ts@g10code.com>
2050
2051         * MapiGPGME.cpp (fail_if_null, delete_buf): New
2052         (doCmd): New.
2053         (setBody): If the body to set is empty, do nothing.
2054         (freeKeyArray): New.
2055         (readOptions): New.
2056         (writeOptions): New.
2057         Implement all getters and setters for the config code.
2058
2059         * keycache.c: Now that we use a DLL, we create a
2060         shared data segment for static data.
2061         (load_keycache_objects): New.
2062
2063 2005-05-01  Timo Schulz  <ts@g10code.com>
2064
2065         * MapiGPGME.cpp (rtfSync): New.
2066         * logging.c (log_debug): New.
2067         * common.c (xfree): New.
2068         * engine-gpgme.c (op_lookup_keys): Corrected offsets.
2069
2070 2005-04-29  Timo Schulz  <ts@g10code.com>
2071
2072         * engine-gpgme.c (op_encrypt_file): New.
2073
2074 2005-04-27  Timo Schulz  <ts@g10code.com>
2075
2076         * config-dialog.c (config_dialog_box): Add dialog
2077         item to select a GUI key manager.
2078         Check that the entered files really exist.
2079         (config_dlg_proc): Likewise.
2080         (does_file_exist): New.
2081
2082 2005-04-24  Timo Schulz  <ts@g10code.com>
2083
2084         * main.c (DllMain): New. With a static library it was not
2085         possible to have a separate resource file. Thus we use a
2086         DLL now which contains all needed dialogs.
2087         * common.c (set_global_hinstance): New.
2088         * libgpgmedlgs.def: New.
2089
2090 2005-04-18  Timo Schulz  <ts@g10code.com>
2091
2092         * recipient-dialog.c (recipient_dialog_box2): New
2093         way to show pre-selected keys.
2094         (copy_item): New paramenter for the pos.
2095         (find_item): Do not select the item.
2096
2097         * gpgmedlgs.rc (IDD_ENC): New label to describe
2098         the listbox.
2099
2100 2005-04-15  Timo Schulz  <ts@g10code.com>
2101
2102         * common.c (xmalloc, xcalloc, xstrdup): New.
2103         (out_of_core): New.
2104         * recipient-dialog.c (initialize_keybox): New.
2105         (find_item): New.
2106         * MapiGPGME.cpp (freeUnknownKeys): New.
2107         (signEncrypt): Show dialog to select a key if no
2108         default key was set.
2109
2110         * Replace all std-c alloc functions with x equivalents.
2111
2112 2005-04-13  Timo Schulz  <ts@g10code.com>
2113
2114         * engine-gpgme.c (do_init): Alloc keycache objects.
2115         (do_deinit): Cleanup the mess.
2116         (op_lookup_keys): New. Allow to find keys via the email.
2117
2118         * GPGME.cpp (MapiGPGME): New. MAPI interface.
2119
2120 2005-04-07  Timo Schulz  <ts@g10code.com>
2121
2122         * verify-dialog.c (load_akalist): New.
2123         (load_sigbox): Handle bad signatures.
2124         * keycache.c (enum_gpg_keys): Allow to reset the
2125         enum context.
2126         * config-dialog.c (get_open_file_name): Use MAX_PATH.
2127         (get_folder): Likewise.
2128         * recipient-dialog.c (load_rsetbox): Modify code to
2129         add the last keycache item.
2130         * passphrase-dialog.c (load_secbox): Likewise.