| @@ -1,192 +1,208 @@ | | | @@ -1,192 +1,208 @@ |
1 | $NetBSD: patch-an,v 1.1 2010/09/01 13:45:25 wiz Exp $ | | 1 | $NetBSD: patch-an,v 1.2 2013/02/27 19:29:33 markd Exp $ |
2 | | | 2 | |
3 | libassuan2 support from | | 3 | libassuan2 support from |
4 | http://websvn.kde.org/?view=revision&revision=1078528 | | 4 | http://websvn.kde.org/?view=revision&revision=1078528 |
5 | | | 5 | |
6 | --- kleopatra/uiserver/assuanserverconnection.cpp.orig 2009-11-21 09:45:01.000000000 +0000 | | 6 | Work around moc inability to parse a boost macro |
| | | 7 | |
| | | 8 | --- kleopatra/uiserver/assuanserverconnection.cpp.orig 2011-04-20 20:03:31.000000000 +0000 |
7 | +++ kleopatra/uiserver/assuanserverconnection.cpp | | 9 | +++ kleopatra/uiserver/assuanserverconnection.cpp |
8 | @@ -116,13 +116,18 @@ static const unsigned int INIT_SOCKET_FL | | 10 | @@ -77,11 +77,13 @@ |
| | | 11 | |
| | | 12 | #include <kleo-assuan.h> |
| | | 13 | |
| | | 14 | +#ifndef Q_MOC_RUN |
| | | 15 | #include <boost/type_traits/remove_pointer.hpp> |
| | | 16 | #include <boost/lexical_cast.hpp> |
| | | 17 | #include <boost/bind.hpp> |
| | | 18 | #include <boost/mem_fn.hpp> |
| | | 19 | #include <boost/mpl/if.hpp> |
| | | 20 | +#endif |
| | | 21 | |
| | | 22 | #include <vector> |
| | | 23 | #include <map> |
| | | 24 | @@ -116,13 +118,18 @@ static const unsigned int INIT_SOCKET_FL |
9 | static const int FOR_READING = 0; | | 25 | static const int FOR_READING = 0; |
10 | static const unsigned int MAX_ACTIVE_FDS = 32; | | 26 | static const unsigned int MAX_ACTIVE_FDS = 32; |
11 | | | 27 | |
12 | +static void my_assuan_release( assuan_context_t ctx ) { | | 28 | +static void my_assuan_release( assuan_context_t ctx ) { |
13 | + if ( ctx ) | | 29 | + if ( ctx ) |
14 | + assuan_release( ctx ); | | 30 | + assuan_release( ctx ); |
15 | +} | | 31 | +} |
16 | + | | 32 | + |
17 | // shared_ptr for assuan_context_t w/ deleter enforced to assuan_deinit_server: | | 33 | // shared_ptr for assuan_context_t w/ deleter enforced to assuan_deinit_server: |
18 | typedef shared_ptr< remove_pointer<assuan_context_t>::type > AssuanContextBase; | | 34 | typedef shared_ptr< remove_pointer<assuan_context_t>::type > AssuanContextBase; |
19 | struct AssuanContext : AssuanContextBase { | | 35 | struct AssuanContext : AssuanContextBase { |
20 | AssuanContext() : AssuanContextBase() {} | | 36 | AssuanContext() : AssuanContextBase() {} |
21 | - explicit AssuanContext( assuan_context_t ctx ) : AssuanContextBase( ctx, &assuan_deinit_server ) {} | | 37 | - explicit AssuanContext( assuan_context_t ctx ) : AssuanContextBase( ctx, &assuan_deinit_server ) {} |
22 | + explicit AssuanContext( assuan_context_t ctx ) : AssuanContextBase( ctx, &my_assuan_release ) {} | | 38 | + explicit AssuanContext( assuan_context_t ctx ) : AssuanContextBase( ctx, &my_assuan_release ) {} |
23 | | | 39 | |
24 | - void reset( assuan_context_t ctx=0 ) { AssuanContextBase::reset( ctx, &assuan_deinit_server ); } | | 40 | - void reset( assuan_context_t ctx=0 ) { AssuanContextBase::reset( ctx, &assuan_deinit_server ); } |
25 | + void reset( assuan_context_t ctx=0 ) { AssuanContextBase::reset( ctx, &my_assuan_release ); } | | 41 | + void reset( assuan_context_t ctx=0 ) { AssuanContextBase::reset( ctx, &my_assuan_release ); } |
26 | }; | | 42 | }; |
27 | | | 43 | |
28 | static inline gpg_error_t assuan_process_done_msg( assuan_context_t ctx, gpg_error_t err, const char * err_msg ) { | | 44 | static inline gpg_error_t assuan_process_done_msg( assuan_context_t ctx, gpg_error_t err, const char * err_msg ) { |
29 | @@ -240,7 +245,8 @@ Q_SIGNALS: | | 45 | @@ -240,7 +247,8 @@ Q_SIGNALS: |
30 | public Q_SLOTS: | | 46 | public Q_SLOTS: |
31 | void slotReadActivity( int ) { | | 47 | void slotReadActivity( int ) { |
32 | assert( ctx ); | | 48 | assert( ctx ); |
33 | - if ( const int err = assuan_process_next( ctx.get() ) ) { | | 49 | - if ( const int err = assuan_process_next( ctx.get() ) ) { |
34 | + int done = false; | | 50 | + int done = false; |
35 | + if ( const int err = assuan_process_next( ctx.get(), &done ) || done ) { | | 51 | + if ( const int err = assuan_process_next( ctx.get(), &done ) || done ) { |
36 | //if ( err == -1 || gpg_err_code(err) == GPG_ERR_EOF ) { | | 52 | //if ( err == -1 || gpg_err_code(err) == GPG_ERR_EOF ) { |
37 | topHalfDeletion(); | | 53 | topHalfDeletion(); |
38 | if ( nohupedCommands.empty() ) | | 54 | if ( nohupedCommands.empty() ) |
39 | @@ -296,15 +302,17 @@ private: | | 55 | @@ -296,15 +304,17 @@ private: |
40 | } | | 56 | } |
41 | | | 57 | |
42 | private: | | 58 | private: |
43 | - static void reset_handler( assuan_context_t ctx_ ) { | | 59 | - static void reset_handler( assuan_context_t ctx_ ) { |
44 | + static gpg_error_t reset_handler( assuan_context_t ctx_, char * ) { | | 60 | + static gpg_error_t reset_handler( assuan_context_t ctx_, char * ) { |
45 | assert( assuan_get_pointer( ctx_ ) ); | | 61 | assert( assuan_get_pointer( ctx_ ) ); |
46 | | | 62 | |
47 | AssuanServerConnection::Private & conn = *static_cast<AssuanServerConnection::Private*>( assuan_get_pointer( ctx_ ) ); | | 63 | AssuanServerConnection::Private & conn = *static_cast<AssuanServerConnection::Private*>( assuan_get_pointer( ctx_ ) ); |
48 | | | 64 | |
49 | conn.reset(); | | 65 | conn.reset(); |
50 | + | | 66 | + |
51 | + return 0; | | 67 | + return 0; |
52 | } | | 68 | } |
53 | | | 69 | |
54 | - static int option_handler( assuan_context_t ctx_, const char * key, const char * value ) { | | 70 | - static int option_handler( assuan_context_t ctx_, const char * key, const char * value ) { |
55 | + static gpg_error_t option_handler( assuan_context_t ctx_, const char * key, const char * value ) { | | 71 | + static gpg_error_t option_handler( assuan_context_t ctx_, const char * key, const char * value ) { |
56 | assert( assuan_get_pointer( ctx_ ) ); | | 72 | assert( assuan_get_pointer( ctx_ ) ); |
57 | | | 73 | |
58 | AssuanServerConnection::Private & conn = *static_cast<AssuanServerConnection::Private*>( assuan_get_pointer( ctx_ ) ); | | 74 | AssuanServerConnection::Private & conn = *static_cast<AssuanServerConnection::Private*>( assuan_get_pointer( ctx_ ) ); |
59 | @@ -317,7 +325,7 @@ private: | | 75 | @@ -317,7 +327,7 @@ private: |
60 | //return gpg_error( GPG_ERR_UNKNOWN_OPTION ); | | 76 | //return gpg_error( GPG_ERR_UNKNOWN_OPTION ); |
61 | } | | 77 | } |
62 | | | 78 | |
63 | - static int session_handler( assuan_context_t ctx_, char * line ) { | | 79 | - static int session_handler( assuan_context_t ctx_, char * line ) { |
64 | + static gpg_error_t session_handler( assuan_context_t ctx_, char * line ) { | | 80 | + static gpg_error_t session_handler( assuan_context_t ctx_, char * line ) { |
65 | assert( assuan_get_pointer( ctx_ ) ); | | 81 | assert( assuan_get_pointer( ctx_ ) ); |
66 | AssuanServerConnection::Private & conn = *static_cast<AssuanServerConnection::Private*>( assuan_get_pointer( ctx_ ) ); | | 82 | AssuanServerConnection::Private & conn = *static_cast<AssuanServerConnection::Private*>( assuan_get_pointer( ctx_ ) ); |
67 | | | 83 | |
68 | @@ -344,7 +352,7 @@ private: | | 84 | @@ -344,7 +354,7 @@ private: |
69 | return assuan_process_done( ctx_, 0 ); | | 85 | return assuan_process_done( ctx_, 0 ); |
70 | } | | 86 | } |
71 | | | 87 | |
72 | - static int capabilities_handler( assuan_context_t ctx_, char * line ) { | | 88 | - static int capabilities_handler( assuan_context_t ctx_, char * line ) { |
73 | + static gpg_error_t capabilities_handler( assuan_context_t ctx_, char * line ) { | | 89 | + static gpg_error_t capabilities_handler( assuan_context_t ctx_, char * line ) { |
74 | if ( !QByteArray( line ).trimmed().isEmpty() ) { | | 90 | if ( !QByteArray( line ).trimmed().isEmpty() ) { |
75 | static const QString errorString = i18n("CAPABILITIES does not take arguments"); | | 91 | static const QString errorString = i18n("CAPABILITIES does not take arguments"); |
76 | return assuan_process_done_msg( ctx_, gpg_error( GPG_ERR_ASS_PARAMETER ), errorString ); | | 92 | return assuan_process_done_msg( ctx_, gpg_error( GPG_ERR_ASS_PARAMETER ), errorString ); |
77 | @@ -357,7 +365,7 @@ private: | | 93 | @@ -357,7 +367,7 @@ private: |
78 | return assuan_process_done( ctx_, assuan_send_data( ctx_, capabilities, sizeof capabilities - 1 ) ); | | 94 | return assuan_process_done( ctx_, assuan_send_data( ctx_, capabilities, sizeof capabilities - 1 ) ); |
79 | } | | 95 | } |
80 | | | 96 | |
81 | - static int getinfo_handler( assuan_context_t ctx_, char * line ) { | | 97 | - static int getinfo_handler( assuan_context_t ctx_, char * line ) { |
82 | + static gpg_error_t getinfo_handler( assuan_context_t ctx_, char * line ) { | | 98 | + static gpg_error_t getinfo_handler( assuan_context_t ctx_, char * line ) { |
83 | assert( assuan_get_pointer( ctx_ ) ); | | 99 | assert( assuan_get_pointer( ctx_ ) ); |
84 | AssuanServerConnection::Private & conn = *static_cast<AssuanServerConnection::Private*>( assuan_get_pointer( ctx_ ) ); | | 100 | AssuanServerConnection::Private & conn = *static_cast<AssuanServerConnection::Private*>( assuan_get_pointer( ctx_ ) ); |
85 | | | 101 | |
86 | @@ -386,7 +394,7 @@ private: | | 102 | @@ -386,7 +396,7 @@ private: |
87 | return assuan_process_done( ctx_, assuan_send_data( ctx_, ba.constData(), ba.size() ) ); | | 103 | return assuan_process_done( ctx_, assuan_send_data( ctx_, ba.constData(), ba.size() ) ); |
88 | } | | 104 | } |
89 | | | 105 | |
90 | - static int start_keymanager_handler( assuan_context_t ctx_, char * line ) { | | 106 | - static int start_keymanager_handler( assuan_context_t ctx_, char * line ) { |
91 | + static gpg_error_t start_keymanager_handler( assuan_context_t ctx_, char * line ) { | | 107 | + static gpg_error_t start_keymanager_handler( assuan_context_t ctx_, char * line ) { |
92 | assert( assuan_get_pointer( ctx_ ) ); | | 108 | assert( assuan_get_pointer( ctx_ ) ); |
93 | AssuanServerConnection::Private & conn = *static_cast<AssuanServerConnection::Private*>( assuan_get_pointer( ctx_ ) ); | | 109 | AssuanServerConnection::Private & conn = *static_cast<AssuanServerConnection::Private*>( assuan_get_pointer( ctx_ ) ); |
94 | | | 110 | |
95 | @@ -400,7 +408,7 @@ private: | | 111 | @@ -400,7 +410,7 @@ private: |
96 | return assuan_process_done( ctx_, 0 ); | | 112 | return assuan_process_done( ctx_, 0 ); |
97 | } | | 113 | } |
98 | | | 114 | |
99 | - static int start_confdialog_handler( assuan_context_t ctx_, char * line ) { | | 115 | - static int start_confdialog_handler( assuan_context_t ctx_, char * line ) { |
100 | + static gpg_error_t start_confdialog_handler( assuan_context_t ctx_, char * line ) { | | 116 | + static gpg_error_t start_confdialog_handler( assuan_context_t ctx_, char * line ) { |
101 | assert( assuan_get_pointer( ctx_ ) ); | | 117 | assert( assuan_get_pointer( ctx_ ) ); |
102 | AssuanServerConnection::Private & conn = *static_cast<AssuanServerConnection::Private*>( assuan_get_pointer( ctx_ ) ); | | 118 | AssuanServerConnection::Private & conn = *static_cast<AssuanServerConnection::Private*>( assuan_get_pointer( ctx_ ) ); |
103 | | | 119 | |
104 | @@ -418,7 +426,7 @@ private: | | 120 | @@ -418,7 +428,7 @@ private: |
105 | | | 121 | |
106 | // format: TAG (FD|FD=\d+|FILE=...) | | 122 | // format: TAG (FD|FD=\d+|FILE=...) |
107 | template <bool in, typename T_memptr> | | 123 | template <bool in, typename T_memptr> |
108 | - static int IO_handler( assuan_context_t ctx_, char * line_, T_memptr which ) { | | 124 | - static int IO_handler( assuan_context_t ctx_, char * line_, T_memptr which ) { |
109 | + static gpg_error_t IO_handler( assuan_context_t ctx_, char * line_, T_memptr which ) { | | 125 | + static gpg_error_t IO_handler( assuan_context_t ctx_, char * line_, T_memptr which ) { |
110 | assert( assuan_get_pointer( ctx_ ) ); | | 126 | assert( assuan_get_pointer( ctx_ ) ); |
111 | AssuanServerConnection::Private & conn = *static_cast<AssuanServerConnection::Private*>( assuan_get_pointer( ctx_ ) ); | | 127 | AssuanServerConnection::Private & conn = *static_cast<AssuanServerConnection::Private*>( assuan_get_pointer( ctx_ ) ); |
112 | | | 128 | |
113 | @@ -498,19 +506,19 @@ private: | | 129 | @@ -498,19 +508,19 @@ private: |
114 | | | 130 | |
115 | } | | 131 | } |
116 | | | 132 | |
117 | - static int input_handler( assuan_context_t ctx, char * line ) { | | 133 | - static int input_handler( assuan_context_t ctx, char * line ) { |
118 | + static gpg_error_t input_handler( assuan_context_t ctx, char * line ) { | | 134 | + static gpg_error_t input_handler( assuan_context_t ctx, char * line ) { |
119 | return IO_handler<true>( ctx, line, &Private::inputs ); | | 135 | return IO_handler<true>( ctx, line, &Private::inputs ); |
120 | } | | 136 | } |
121 | | | 137 | |
122 | - static int output_handler( assuan_context_t ctx, char * line ) { | | 138 | - static int output_handler( assuan_context_t ctx, char * line ) { |
123 | + static gpg_error_t output_handler( assuan_context_t ctx, char * line ) { | | 139 | + static gpg_error_t output_handler( assuan_context_t ctx, char * line ) { |
124 | return IO_handler<false>( ctx, line, &Private::outputs ); | | 140 | return IO_handler<false>( ctx, line, &Private::outputs ); |
125 | } | | 141 | } |
126 | | | 142 | |
127 | - static int message_handler( assuan_context_t ctx, char * line ) { | | 143 | - static int message_handler( assuan_context_t ctx, char * line ) { |
128 | + static gpg_error_t message_handler( assuan_context_t ctx, char * line ) { | | 144 | + static gpg_error_t message_handler( assuan_context_t ctx, char * line ) { |
129 | return IO_handler<true>( ctx, line, &Private::messages ); | | 145 | return IO_handler<true>( ctx, line, &Private::messages ); |
130 | } | | 146 | } |
131 | | | 147 | |
132 | - static int file_handler( assuan_context_t ctx_, char * line ) { | | 148 | - static int file_handler( assuan_context_t ctx_, char * line ) { |
133 | + static gpg_error_t file_handler( assuan_context_t ctx_, char * line ) { | | 149 | + static gpg_error_t file_handler( assuan_context_t ctx_, char * line ) { |
134 | assert( assuan_get_pointer( ctx_ ) ); | | 150 | assert( assuan_get_pointer( ctx_ ) ); |
135 | AssuanServerConnection::Private & conn = *static_cast<AssuanServerConnection::Private*>( assuan_get_pointer( ctx_ ) ); | | 151 | AssuanServerConnection::Private & conn = *static_cast<AssuanServerConnection::Private*>( assuan_get_pointer( ctx_ ) ); |
136 | | | 152 | |
137 | @@ -572,7 +580,7 @@ private: | | 153 | @@ -572,7 +582,7 @@ private: |
138 | } | | 154 | } |
139 | | | 155 | |
140 | template <typename T_memptr, typename T_memptr2> | | 156 | template <typename T_memptr, typename T_memptr2> |
141 | - static int recipient_sender_handler( T_memptr mp, T_memptr2 info, assuan_context_t ctx, char * line, bool sender=false ) { | | 157 | - static int recipient_sender_handler( T_memptr mp, T_memptr2 info, assuan_context_t ctx, char * line, bool sender=false ) { |
142 | + static gpg_error_t recipient_sender_handler( T_memptr mp, T_memptr2 info, assuan_context_t ctx, char * line, bool sender=false ) { | | 158 | + static gpg_error_t recipient_sender_handler( T_memptr mp, T_memptr2 info, assuan_context_t ctx, char * line, bool sender=false ) { |
143 | assert( assuan_get_pointer( ctx ) ); | | 159 | assert( assuan_get_pointer( ctx ) ); |
144 | AssuanServerConnection::Private & conn = *static_cast<AssuanServerConnection::Private*>( assuan_get_pointer( ctx ) ); | | 160 | AssuanServerConnection::Private & conn = *static_cast<AssuanServerConnection::Private*>( assuan_get_pointer( ctx ) ); |
145 | | | 161 | |
146 | @@ -656,11 +664,11 @@ private: | | 162 | @@ -656,11 +666,11 @@ private: |
147 | return assuan_process_done( ctx, 0 ); | | 163 | return assuan_process_done( ctx, 0 ); |
148 | } | | 164 | } |
149 | | | 165 | |
150 | - static int recipient_handler( assuan_context_t ctx, char * line ) { | | 166 | - static int recipient_handler( assuan_context_t ctx, char * line ) { |
151 | + static gpg_error_t recipient_handler( assuan_context_t ctx, char * line ) { | | 167 | + static gpg_error_t recipient_handler( assuan_context_t ctx, char * line ) { |
152 | return recipient_sender_handler( &Private::recipients, &Private::informativeRecipients, ctx, line ); | | 168 | return recipient_sender_handler( &Private::recipients, &Private::informativeRecipients, ctx, line ); |
153 | } | | 169 | } |
154 | | | 170 | |
155 | - static int sender_handler( assuan_context_t ctx, char * line ) { | | 171 | - static int sender_handler( assuan_context_t ctx, char * line ) { |
156 | + static gpg_error_t sender_handler( assuan_context_t ctx, char * line ) { | | 172 | + static gpg_error_t sender_handler( assuan_context_t ctx, char * line ) { |
157 | return recipient_sender_handler( &Private::senders, &Private::informativeSenders, ctx, line, true ); | | 173 | return recipient_sender_handler( &Private::senders, &Private::informativeSenders, ctx, line, true ); |
158 | } | | 174 | } |
159 | | | 175 | |
160 | @@ -792,11 +800,15 @@ AssuanServerConnection::Private::Private | | 176 | @@ -792,11 +802,15 @@ AssuanServerConnection::Private::Private |
161 | if ( fd == ASSUAN_INVALID_FD ) | | 177 | if ( fd == ASSUAN_INVALID_FD ) |
162 | throw Exception( gpg_error( GPG_ERR_INV_ARG ), "pre-assuan_init_socket_server_ext" ); | | 178 | throw Exception( gpg_error( GPG_ERR_INV_ARG ), "pre-assuan_init_socket_server_ext" ); |
163 | | | 179 | |
164 | - assuan_context_t naked_ctx = 0; | | 180 | - assuan_context_t naked_ctx = 0; |
165 | - if ( const gpg_error_t err = assuan_init_socket_server_ext( &naked_ctx, fd, INIT_SOCKET_FLAGS ) ) | | 181 | - if ( const gpg_error_t err = assuan_init_socket_server_ext( &naked_ctx, fd, INIT_SOCKET_FLAGS ) ) |
166 | + { | | 182 | + { |
167 | + assuan_context_t naked_ctx = 0; | | 183 | + assuan_context_t naked_ctx = 0; |
168 | + if ( const gpg_error_t err = assuan_new( &naked_ctx ) ) | | 184 | + if ( const gpg_error_t err = assuan_new( &naked_ctx ) ) |
169 | + throw Exception( err, "assuan_new" ); | | 185 | + throw Exception( err, "assuan_new" ); |
170 | + ctx.reset( naked_ctx ); | | 186 | + ctx.reset( naked_ctx ); |
171 | + } | | 187 | + } |
172 | + if ( const gpg_error_t err = assuan_init_socket_server( ctx.get(), fd, INIT_SOCKET_FLAGS ) ) | | 188 | + if ( const gpg_error_t err = assuan_init_socket_server( ctx.get(), fd, INIT_SOCKET_FLAGS ) ) |
173 | throw Exception( err, "assuan_init_socket_server_ext" ); | | 189 | throw Exception( err, "assuan_init_socket_server_ext" ); |
174 | | | 190 | |
175 | - ctx.reset( naked_ctx ); naked_ctx = 0; | | 191 | - ctx.reset( naked_ctx ); naked_ctx = 0; |
176 | | | 192 | |
177 | // for callbacks, associate the context with this connection: | | 193 | // for callbacks, associate the context with this connection: |
178 | assuan_set_pointer( ctx.get(), this ); | | 194 | assuan_set_pointer( ctx.get(), this ); |
179 | @@ -824,34 +836,34 @@ AssuanServerConnection::Private::Private | | 195 | @@ -824,34 +838,34 @@ AssuanServerConnection::Private::Private |
180 | | | 196 | |
181 | | | 197 | |
182 | // register our INPUT/OUTPUT/MESSGAE/FILE handlers: | | 198 | // register our INPUT/OUTPUT/MESSGAE/FILE handlers: |
183 | - if ( const gpg_error_t err = assuan_register_command( ctx.get(), "INPUT", input_handler ) ) | | 199 | - if ( const gpg_error_t err = assuan_register_command( ctx.get(), "INPUT", input_handler ) ) |
184 | + if ( const gpg_error_t err = assuan_register_command( ctx.get(), "INPUT", input_handler, "" ) ) | | 200 | + if ( const gpg_error_t err = assuan_register_command( ctx.get(), "INPUT", input_handler, "" ) ) |
185 | throw Exception( err, "register \"INPUT\" handler" ); | | 201 | throw Exception( err, "register \"INPUT\" handler" ); |
186 | - if ( const gpg_error_t err = assuan_register_command( ctx.get(), "MESSAGE", message_handler ) ) | | 202 | - if ( const gpg_error_t err = assuan_register_command( ctx.get(), "MESSAGE", message_handler ) ) |
187 | + if ( const gpg_error_t err = assuan_register_command( ctx.get(), "MESSAGE", message_handler, "" ) ) | | 203 | + if ( const gpg_error_t err = assuan_register_command( ctx.get(), "MESSAGE", message_handler, "" ) ) |
188 | throw Exception( err, "register \"MESSAGE\" handler" ); | | 204 | throw Exception( err, "register \"MESSAGE\" handler" ); |
189 | - if ( const gpg_error_t err = assuan_register_command( ctx.get(), "OUTPUT", output_handler ) ) | | 205 | - if ( const gpg_error_t err = assuan_register_command( ctx.get(), "OUTPUT", output_handler ) ) |
190 | + if ( const gpg_error_t err = assuan_register_command( ctx.get(), "OUTPUT", output_handler, "" ) ) | | 206 | + if ( const gpg_error_t err = assuan_register_command( ctx.get(), "OUTPUT", output_handler, "" ) ) |
191 | throw Exception( err, "register \"OUTPUT\" handler" ); | | 207 | throw Exception( err, "register \"OUTPUT\" handler" ); |
192 | - if ( const gpg_error_t err = assuan_register_command( ctx.get(), "FILE", file_handler ) ) | | 208 | - if ( const gpg_error_t err = assuan_register_command( ctx.get(), "FILE", file_handler ) ) |
| @@ -213,92 +229,92 @@ http://websvn.kde.org/?view=revision&rev | | | @@ -213,92 +229,92 @@ http://websvn.kde.org/?view=revision&rev |
213 | + if ( const gpg_error_t err = assuan_register_command( ctx.get(), "RECIPIENT", recipient_handler, "" ) ) | | 229 | + if ( const gpg_error_t err = assuan_register_command( ctx.get(), "RECIPIENT", recipient_handler, "" ) ) |
214 | throw Exception( err, "register \"RECIPIENT\" handler" ); | | 230 | throw Exception( err, "register \"RECIPIENT\" handler" ); |
215 | - if ( const gpg_error_t err = assuan_register_command( ctx.get(), "SENDER", sender_handler ) ) | | 231 | - if ( const gpg_error_t err = assuan_register_command( ctx.get(), "SENDER", sender_handler ) ) |
216 | + if ( const gpg_error_t err = assuan_register_command( ctx.get(), "SENDER", sender_handler, "" ) ) | | 232 | + if ( const gpg_error_t err = assuan_register_command( ctx.get(), "SENDER", sender_handler, "" ) ) |
217 | throw Exception( err, "register \"SENDER\" handler" ); | | 233 | throw Exception( err, "register \"SENDER\" handler" ); |
218 | - if ( const gpg_error_t err = assuan_register_command( ctx.get(), "SESSION", session_handler ) ) | | 234 | - if ( const gpg_error_t err = assuan_register_command( ctx.get(), "SESSION", session_handler ) ) |
219 | + if ( const gpg_error_t err = assuan_register_command( ctx.get(), "SESSION", session_handler, "" ) ) | | 235 | + if ( const gpg_error_t err = assuan_register_command( ctx.get(), "SESSION", session_handler, "" ) ) |
220 | throw Exception( err, "register \"SESSION\" handler" ); | | 236 | throw Exception( err, "register \"SESSION\" handler" ); |
221 | - if ( const gpg_error_t err = assuan_register_command( ctx.get(), "CAPABILITIES", capabilities_handler ) ) | | 237 | - if ( const gpg_error_t err = assuan_register_command( ctx.get(), "CAPABILITIES", capabilities_handler ) ) |
222 | + if ( const gpg_error_t err = assuan_register_command( ctx.get(), "CAPABILITIES", capabilities_handler, "" ) ) | | 238 | + if ( const gpg_error_t err = assuan_register_command( ctx.get(), "CAPABILITIES", capabilities_handler, "" ) ) |
223 | throw Exception( err, "register \"CAPABILITIES\" handler" ); | | 239 | throw Exception( err, "register \"CAPABILITIES\" handler" ); |
224 | | | 240 | |
225 | assuan_set_hello_line( ctx.get(), "GPG UI server (Kleopatra/" KLEOPATRA_VERSION_STRING ") ready to serve" ); | | 241 | assuan_set_hello_line( ctx.get(), "GPG UI server (Kleopatra/" KLEOPATRA_VERSION_STRING ") ready to serve" ); |
226 | @@ -904,20 +916,14 @@ class InquiryHandler : public QObject { | | 242 | @@ -904,20 +918,14 @@ class InquiryHandler : public QObject { |
227 | Q_OBJECT | | 243 | Q_OBJECT |
228 | public: | | 244 | public: |
229 | | | 245 | |
230 | -#ifdef HAVE_ASSUAN_INQUIRE_EXT | | 246 | -#ifdef HAVE_ASSUAN_INQUIRE_EXT |
231 | explicit InquiryHandler( const char * keyword_, QObject * p=0 ) | | 247 | explicit InquiryHandler( const char * keyword_, QObject * p=0 ) |
232 | : QObject( p ), | | 248 | : QObject( p ), |
233 | -# ifndef HAVE_NEW_STYLE_ASSUAN_INQUIRE_EXT | | 249 | -# ifndef HAVE_NEW_STYLE_ASSUAN_INQUIRE_EXT |
234 | - buffer( 0 ), | | 250 | - buffer( 0 ), |
235 | - buflen( 0 ), | | 251 | - buflen( 0 ), |
236 | -# endif | | 252 | -# endif |
237 | keyword( keyword_ ) | | 253 | keyword( keyword_ ) |
238 | { | | 254 | { |
239 | | | 255 | |
240 | } | | 256 | } |
241 | | | 257 | |
242 | -# ifdef HAVE_NEW_STYLE_ASSUAN_INQUIRE_EXT | | 258 | -# ifdef HAVE_NEW_STYLE_ASSUAN_INQUIRE_EXT |
243 | - static int handler( void * cb_data, int rc, unsigned char * buffer, size_t buflen ) | | 259 | - static int handler( void * cb_data, int rc, unsigned char * buffer, size_t buflen ) |
244 | + static gpg_error_t handler( void * cb_data, gpg_error_t rc, unsigned char * buffer, size_t buflen ) | | 260 | + static gpg_error_t handler( void * cb_data, gpg_error_t rc, unsigned char * buffer, size_t buflen ) |
245 | { | | 261 | { |
246 | assert( cb_data ); | | 262 | assert( cb_data ); |
247 | InquiryHandler * this_ = static_cast<InquiryHandler*>(cb_data); | | 263 | InquiryHandler * this_ = static_cast<InquiryHandler*>(cb_data); |
248 | @@ -926,26 +932,9 @@ public: | | 264 | @@ -926,26 +934,9 @@ public: |
249 | delete this_; | | 265 | delete this_; |
250 | return 0; | | 266 | return 0; |
251 | } | | 267 | } |
252 | -# else | | 268 | -# else |
253 | - static int handler( void * cb_data, int rc ) | | 269 | - static int handler( void * cb_data, int rc ) |
254 | - { | | 270 | - { |
255 | - assert( cb_data ); | | 271 | - assert( cb_data ); |
256 | - InquiryHandler * this_ = static_cast<InquiryHandler*>(cb_data); | | 272 | - InquiryHandler * this_ = static_cast<InquiryHandler*>(cb_data); |
257 | - emit this_->signal( rc, QByteArray::fromRawData( reinterpret_cast<const char*>(this_->buffer), this_->buflen ), this_->keyword ); | | 273 | - emit this_->signal( rc, QByteArray::fromRawData( reinterpret_cast<const char*>(this_->buffer), this_->buflen ), this_->keyword ); |
258 | - std::free( this_->buffer ); | | 274 | - std::free( this_->buffer ); |
259 | - delete this_; | | 275 | - delete this_; |
260 | - return 0; | | 276 | - return 0; |
261 | - } | | 277 | - } |
262 | -# endif | | 278 | -# endif |
263 | | | 279 | |
264 | private: | | 280 | private: |
265 | -# ifndef HAVE_NEW_STYLE_ASSUAN_INQUIRE_EXT | | 281 | -# ifndef HAVE_NEW_STYLE_ASSUAN_INQUIRE_EXT |
266 | - friend class ::Kleo::AssuanCommand; | | 282 | - friend class ::Kleo::AssuanCommand; |
267 | - unsigned char * buffer; | | 283 | - unsigned char * buffer; |
268 | - size_t buflen; | | 284 | - size_t buflen; |
269 | -# endif | | 285 | -# endif |
270 | const char * keyword; | | 286 | const char * keyword; |
271 | -#endif // HAVE_ASSUAN_INQUIRE_EXT | | 287 | -#endif // HAVE_ASSUAN_INQUIRE_EXT |
272 | | | 288 | |
273 | Q_SIGNALS: | | 289 | Q_SIGNALS: |
274 | void signal( int rc, const QByteArray & data, const QByteArray & keyword ); | | 290 | void signal( int rc, const QByteArray & data, const QByteArray & keyword ); |
275 | @@ -1157,20 +1146,13 @@ int AssuanCommand::inquire( const char * | | 291 | @@ -1157,20 +1148,13 @@ int AssuanCommand::inquire( const char * |
276 | if ( d->nohup ) | | 292 | if ( d->nohup ) |
277 | return makeError( GPG_ERR_INV_OP ); | | 293 | return makeError( GPG_ERR_INV_OP ); |
278 | | | 294 | |
279 | -#ifdef HAVE_ASSUAN_INQUIRE_EXT | | 295 | -#ifdef HAVE_ASSUAN_INQUIRE_EXT |
280 | std::auto_ptr<InquiryHandler> ih( new InquiryHandler( keyword, receiver ) ); | | 296 | std::auto_ptr<InquiryHandler> ih( new InquiryHandler( keyword, receiver ) ); |
281 | receiver->connect( ih.get(), SIGNAL(signal(int,QByteArray,QByteArray)), slot ); | | 297 | receiver->connect( ih.get(), SIGNAL(signal(int,QByteArray,QByteArray)), slot ); |
282 | if ( const gpg_error_t err = assuan_inquire_ext( d->ctx.get(), keyword, | | 298 | if ( const gpg_error_t err = assuan_inquire_ext( d->ctx.get(), keyword, |
283 | -# ifndef HAVE_NEW_STYLE_ASSUAN_INQUIRE_EXT | | 299 | -# ifndef HAVE_NEW_STYLE_ASSUAN_INQUIRE_EXT |
284 | - &ih->buffer, &ih->buflen, | | 300 | - &ih->buffer, &ih->buflen, |
285 | -# endif | | 301 | -# endif |
286 | maxSize, InquiryHandler::handler, ih.get() ) ) | | 302 | maxSize, InquiryHandler::handler, ih.get() ) ) |
287 | return err; | | 303 | return err; |
288 | ih.release(); | | 304 | ih.release(); |
289 | return 0; | | 305 | return 0; |
290 | -#else | | 306 | -#else |
291 | - return makeError( GPG_ERR_NOT_SUPPORTED ); // libassuan too old | | 307 | - return makeError( GPG_ERR_NOT_SUPPORTED ); // libassuan too old |
292 | -#endif // HAVE_ASSUAN_INQUIRE_EXT | | 308 | -#endif // HAVE_ASSUAN_INQUIRE_EXT |
293 | } | | 309 | } |
294 | | | 310 | |
295 | void AssuanCommand::done( const GpgME::Error& err, const QString & details ) { | | 311 | void AssuanCommand::done( const GpgME::Error& err, const QString & details ) { |
296 | @@ -1262,7 +1244,7 @@ const std::vector<KMime::Types::Mailbox> | | 312 | @@ -1262,7 +1246,7 @@ const std::vector<KMime::Types::Mailbox> |
297 | return d->senders; | | 313 | return d->senders; |
298 | } | | 314 | } |
299 | | | 315 | |
300 | -int AssuanCommandFactory::_handle( assuan_context_t ctx, char * line, const char * commandName ) { | | 316 | -int AssuanCommandFactory::_handle( assuan_context_t ctx, char * line, const char * commandName ) { |
301 | +gpg_error_t AssuanCommandFactory::_handle( assuan_context_t ctx, char * line, const char * commandName ) { | | 317 | +gpg_error_t AssuanCommandFactory::_handle( assuan_context_t ctx, char * line, const char * commandName ) { |
302 | assert( assuan_get_pointer( ctx ) ); | | 318 | assert( assuan_get_pointer( ctx ) ); |
303 | AssuanServerConnection::Private & conn = *static_cast<AssuanServerConnection::Private*>( assuan_get_pointer( ctx ) ); | | 319 | AssuanServerConnection::Private & conn = *static_cast<AssuanServerConnection::Private*>( assuan_get_pointer( ctx ) ); |
304 | | | 320 | |