36e218863360dea876edc9034e695176ec5bf0ae
[gpgme.git] / TODO
1 Hey Emacs, this is -*- outline -*- mode!
2
3 * ABI's to break:
4 ** Compatibility interfaces that can be removed in future versions:
5 *** gpgme_data_new_from_filepart
6 *** gpgme_data_new_from_file
7 *** gpgme_data_new_with_read_cb
8 *** gpgme_data_rewind
9 *** GPGME_Busy, GPGME_No_Request
10 *** GPGME_No_Passphrase
11 *** GPGME_Invalid_Recipient, GPGME_No_Recipients
12 *** GPGME_No_Passphrase
13 *** gpgme_op_import_ext
14 *** gpgme_get_sig_key
15 *** gpgme_get_sig_ulong_attr
16 *** gpgme_get_sig_string_attr
17 *** GPGME_SIG_STAT_*
18 *** gpgme_get_sig_status
19 *** gpgme_trust_item_release
20 *** gpgme_trust_item_get_string_attr
21 *** gpgme_trust_item_get_ulong_attr
22 *** GpgmeAttr
23 *** GPGME_Invalid_Type, GPGME_Invalid_Mode
24
25 * Thread support:
26 ** Build thread modules for static linking (which just suck in the
27    desired symbols the hard way). !!
28
29 * New features:
30 ** notification system
31    We need a simple notification system, probably a simple callback
32    with a string and some optional arguments.  This is for example
33    required to notify an application of a changed smartcard,  The
34    application can then do whatever is required.  There are other
35    usages too.  This notfication system should be independent of any
36    contextes of course.
37 ** --learn-code support
38    This might be integrated with import. we still need to work out how
39    to learn a card when gpg and gpgsm have support for smartcards.
40 ** set_locale for thread safe and env independent locale selection.
41 ** How to terminate a pending operation?  Something like gpgme_op_reset,
42    but where are you allowed to call it (think callback handlers).
43    Then gpgme_op_*list_end can go.
44 ** Might need a stat() for data objects and use it for length param to gpg.
45
46 * Documentation
47 ** Document validity and trust issues.
48
49 * Engines
50 ** Do not create/destroy engines, but create engine and then reset it.
51    Internally the reset operation still spawns a new engine process,
52    but this can be replaced with a reset later.  Also, be very sure to
53    release everything properly at a reset and at an error.
54    Think hard about where to guarantee what (ie, what happens if start fails,
55    are the fds unregistered immediately - i think so?)
56 ** Optimize the case where a data object has an underlying fd we can pass
57    directly to the engine.
58 ** Move code common to all engines up from gpg to engine.
59 ** engine operations can return General Error on unknown protocol
60    (it's an internal error, as select_protocol checks already).
61 ** When server mode is implemented properly, more care has to be taken to
62    release all resources on error (for example to free assuan_cmd).
63
64 * Operations
65 ** Passphrase callback should not copy password. !!!
66 *** If no passphrase cb is installed, status handler is not run even if
67     password is required by crypto engine. !!
68 ** Export status handler need much more work. !!!
69 ** Import should return a useful error when one happened.
70 *** Import does not take notice of NODATA status report.
71 *** When GPGSM does issue IMPORT_OK status reports, make sure to check for them
72     in tests/gpgs m/t-import.c.
73 ** Genkey should return something more useful than General_Error.
74 ** Factor out common code in _op_*_start functions.
75 ** Optimize the file descriptor list, so the number of open fds is
76    always known easily.
77
78 * Error Values
79 ** Map ASSUAN/GpgSM ERR error values in a better way than is done now. !!
80 ** Verify (and document) if Read_Error, Write_Error, Pipe_Error set errno.
81
82 * Tests
83 ** Write a fake gpg-agent so that we can supply known passphrases to
84    gpgsm and setup the configuration files to use the agent.  Without
85    this we are testing a currently running gpg-agent which is not a
86    clever idea. !
87 ** t-data
88 *** Test gpgme_data_release_and_get_mem.
89 *** Test gpgme_data_seek for invalid types.
90
91 * Debug
92 ** Handle malloc and vasprintf errors.  But decide first if they should be
93    ignored (and logged with 255?!), or really be assertions. !
94
95 * Build suite
96 ** Make sure everything is cleaned correctly (esp. test area).
97
98 Bugs reported by Stephane Corthesy:
99 > In GpgmeRecipients, would it be possible to provide a function which  
100 > would return the validity assigned to a name contained in the  
101 > GpgmeRecipients instance?
102
103 > passphrase callback. If I use the same GpgmeContext as the one which  
104 > is currently asking for a passphrase, my app crashes: the r_hd in
105 > the  
106 > callback has become invalid; if I use a brand new one, the callback  
107 > is called recursively, when I ask to enumerate keys.