NeoMutt  2022-04-29-249-gaae397
Teaching an old dog new tricks
DOXYGEN
Envelope Function API

Prototype for a Envelope Function. More...

+ Collaboration diagram for Envelope Function API:

Functions

static int op_envelope_edit_bcc (struct EnvelopeWindowData *wdata, int op)
 Edit the BCC list - Implements envelope_function_t -. More...
 
static int op_envelope_edit_cc (struct EnvelopeWindowData *wdata, int op)
 Edit the CC list - Implements envelope_function_t -. More...
 
static int op_envelope_edit_fcc (struct EnvelopeWindowData *wdata, int op)
 Enter a file to save a copy of this message in - Implements envelope_function_t -. More...
 
static int op_envelope_edit_from (struct EnvelopeWindowData *wdata, int op)
 Edit the from field - Implements envelope_function_t -. More...
 
static int op_envelope_edit_reply_to (struct EnvelopeWindowData *wdata, int op)
 Edit the Reply-To field - Implements envelope_function_t -. More...
 
static int op_envelope_edit_subject (struct EnvelopeWindowData *wdata, int op)
 Edit the subject of this message - Implements envelope_function_t -. More...
 
static int op_envelope_edit_to (struct EnvelopeWindowData *wdata, int op)
 Edit the TO list - Implements envelope_function_t -. More...
 
static int op_compose_pgp_menu (struct EnvelopeWindowData *wdata, int op)
 Show PGP options - Implements envelope_function_t -. More...
 
static int op_compose_smime_menu (struct EnvelopeWindowData *wdata, int op)
 Show S/MIME options - Implements envelope_function_t -. More...
 
static int op_compose_autocrypt_menu (struct EnvelopeWindowData *wdata, int op)
 Show autocrypt compose menu options - Implements envelope_function_t -. More...
 
static int op_envelope_edit_followup_to (struct EnvelopeWindowData *wdata, int op)
 Edit the Followup-To field - Implements envelope_function_t -. More...
 
static int op_envelope_edit_newsgroups (struct EnvelopeWindowData *wdata, int op)
 Edit the newsgroups list - Implements envelope_function_t -. More...
 
static int op_envelope_edit_x_comment_to (struct EnvelopeWindowData *wdata, int op)
 Edit the X-Comment-To field - Implements envelope_function_t -. More...
 
static int op_compose_mix (struct EnvelopeWindowData *wdata, int op)
 Send the message through a mixmaster remailer chain - Implements envelope_function_t -. More...
 

Detailed Description

Prototype for a Envelope Function.

Parameters
wdataEnvelope Window data
opOperation to perform, e.g. OP_ENVELOPE_EDIT_FROM
Return values
enumFunctionRetval

Function Documentation

◆ op_envelope_edit_bcc()

static int op_envelope_edit_bcc ( struct EnvelopeWindowData wdata,
int  op 
)
static

Edit the BCC list - Implements envelope_function_t -.

Definition at line 189 of file functions.c.

190{
191#ifdef USE_NNTP
192 if (wdata->is_news)
193 return FR_NO_ACTION;
194#endif
195 if (!edit_address_list(HDR_BCC, &wdata->email->env->bcc))
196 return FR_NO_ACTION;
197
198 update_crypt_info(wdata);
200 return FR_SUCCESS;
201}
@ FR_SUCCESS
Valid function - successfully performed.
Definition: dispatcher.h:39
@ FR_NO_ACTION
Valid function - no action performed.
Definition: dispatcher.h:37
static bool edit_address_list(enum HeaderField field, struct AddressList *al)
Let the user edit the address list.
Definition: functions.c:107
void update_crypt_info(struct EnvelopeWindowData *wdata)
Update the crypto info.
Definition: functions.c:146
@ HDR_BCC
"Bcc:" field
Definition: private.h:38
bool mutt_env_notify_send(struct Email *e, enum NotifyEnvelope type)
Send an Envelope change notification.
Definition: envelope.c:152
@ NT_ENVELOPE_BCC
"Bcc:" header has changed
Definition: envelope.h:105
struct Envelope * env
Envelope information.
Definition: email.h:66
bool is_news
Email is a news article.
Definition: wdata.h:54
struct Email * email
Email being composed.
Definition: wdata.h:41
struct AddressList bcc
Email's 'Bcc' list.
Definition: envelope.h:62
+ Here is the call graph for this function:

◆ op_envelope_edit_cc()

static int op_envelope_edit_cc ( struct EnvelopeWindowData wdata,
int  op 
)
static

Edit the CC list - Implements envelope_function_t -.

Definition at line 206 of file functions.c.

207{
208#ifdef USE_NNTP
209 if (wdata->is_news)
210 return FR_NO_ACTION;
211#endif
212 if (!edit_address_list(HDR_CC, &wdata->email->env->cc))
213 return FR_NO_ACTION;
214
215 update_crypt_info(wdata);
217 return FR_SUCCESS;
218}
@ HDR_CC
"Cc:" field
Definition: private.h:37
@ NT_ENVELOPE_CC
"Cc:" header has changed
Definition: envelope.h:106
struct AddressList cc
Email's 'Cc' list.
Definition: envelope.h:61
+ Here is the call graph for this function:

◆ op_envelope_edit_fcc()

static int op_envelope_edit_fcc ( struct EnvelopeWindowData wdata,
int  op 
)
static

Enter a file to save a copy of this message in - Implements envelope_function_t -.

Definition at line 223 of file functions.c.

224{
225 int rc = FR_NO_ACTION;
226 struct Buffer *fname = mutt_buffer_pool_get();
227 mutt_buffer_copy(fname, wdata->fcc);
228
230 false, NULL, NULL, NULL) != 0)
231 {
232 goto done; // aborted
233 }
234
235 if (mutt_str_equal(wdata->fcc->data, fname->data))
236 goto done; // no change
237
238 mutt_buffer_copy(wdata->fcc, fname);
241 rc = FR_SUCCESS;
242
243done:
245 return rc;
246}
size_t mutt_buffer_copy(struct Buffer *dst, const struct Buffer *src)
Copy a Buffer's contents to another Buffer.
Definition: buffer.c:462
int mutt_buffer_get_field(const char *field, struct Buffer *buf, CompletionFlags complete, bool multiple, struct Mailbox *m, char ***files, int *numfiles)
Ask the user for a string.
Definition: window.c:180
const char *const Prompts[]
Definition: window.c:89
@ HDR_FCC
"Fcc:" (save folder) field
Definition: private.h:41
@ NT_ENVELOPE_FCC
"Fcc:" header has changed
Definition: envelope.h:107
bool mutt_str_equal(const char *a, const char *b)
Compare two strings.
Definition: string.c:807
#define MUTT_COMP_FILE
File completion (in browser)
Definition: mutt.h:55
#define MUTT_COMP_CLEAR
Clear input if printable character is pressed.
Definition: mutt.h:62
void mutt_buffer_pretty_mailbox(struct Buffer *buf)
Shorten a mailbox path using '~' or '='.
Definition: muttlib.c:599
void mutt_buffer_pool_release(struct Buffer **pbuf)
Free a Buffer from the pool.
Definition: pool.c:112
struct Buffer * mutt_buffer_pool_get(void)
Get a Buffer from the pool.
Definition: pool.c:101
String manipulation buffer.
Definition: buffer.h:34
char * data
Pointer to data.
Definition: buffer.h:35
struct Buffer * fcc
Where the outgoing Email will be saved.
Definition: wdata.h:42
+ Here is the call graph for this function:

◆ op_envelope_edit_from()

static int op_envelope_edit_from ( struct EnvelopeWindowData wdata,
int  op 
)
static

Edit the from field - Implements envelope_function_t -.

Definition at line 251 of file functions.c.

252{
253 if (!edit_address_list(HDR_FROM, &wdata->email->env->from))
254 return FR_NO_ACTION;
255
256 update_crypt_info(wdata);
258 return FR_SUCCESS;
259}
@ HDR_FROM
"From:" field
Definition: private.h:35
@ NT_ENVELOPE_FROM
"From:" header has changed
Definition: envelope.h:109
struct AddressList from
Email's 'From' list.
Definition: envelope.h:59
+ Here is the call graph for this function:

◆ op_envelope_edit_reply_to()

static int op_envelope_edit_reply_to ( struct EnvelopeWindowData wdata,
int  op 
)
static

Edit the Reply-To field - Implements envelope_function_t -.

Definition at line 264 of file functions.c.

265{
267 return FR_NO_ACTION;
268
270 return FR_SUCCESS;
271}
@ HDR_REPLYTO
"Reply-To:" field
Definition: private.h:40
@ NT_ENVELOPE_REPLY_TO
"Reply-To:" header has changed
Definition: envelope.h:112
struct AddressList reply_to
Email's 'reply-to'.
Definition: envelope.h:64
+ Here is the call graph for this function:

◆ op_envelope_edit_subject()

static int op_envelope_edit_subject ( struct EnvelopeWindowData wdata,
int  op 
)
static

Edit the subject of this message - Implements envelope_function_t -.

Definition at line 276 of file functions.c.

277{
278 int rc = FR_NO_ACTION;
279 struct Buffer *buf = mutt_buffer_pool_get();
280
281 mutt_buffer_strcpy(buf, wdata->email->env->subject);
283 false, NULL, NULL, NULL) != 0)
284 {
285 goto done; // aborted
286 }
287
289 goto done; // no change
290
293 rc = FR_SUCCESS;
294
295done:
297 return rc;
298}
size_t mutt_buffer_strcpy(struct Buffer *buf, const char *s)
Copy a string into a Buffer.
Definition: buffer.c:327
static const char * mutt_buffer_string(const struct Buffer *buf)
Convert a buffer to a const char * "string".
Definition: buffer.h:77
@ HDR_SUBJECT
"Subject:" field
Definition: private.h:39
@ NT_ENVELOPE_SUBJECT
"Subject:" header has changed
Definition: envelope.h:113
char * mutt_str_replace(char **p, const char *s)
Replace one string with another.
Definition: string.c:326
#define MUTT_COMP_NO_FLAGS
No flags are set.
Definition: mutt.h:52
char * subject
Email's subject.
Definition: envelope.h:70
+ Here is the call graph for this function:

◆ op_envelope_edit_to()

static int op_envelope_edit_to ( struct EnvelopeWindowData wdata,
int  op 
)
static

Edit the TO list - Implements envelope_function_t -.

Definition at line 303 of file functions.c.

304{
305#ifdef USE_NNTP
306 if (wdata->is_news)
307 return FR_NO_ACTION;
308#endif
309 if (!edit_address_list(HDR_TO, &wdata->email->env->to))
310 return FR_NO_ACTION;
311
312 update_crypt_info(wdata);
314 return FR_SUCCESS;
315}
@ HDR_TO
"To:" field
Definition: private.h:36
@ NT_ENVELOPE_TO
"To:" header has changed
Definition: envelope.h:114
struct AddressList to
Email's 'To' list.
Definition: envelope.h:60
+ Here is the call graph for this function:

◆ op_compose_pgp_menu()

static int op_compose_pgp_menu ( struct EnvelopeWindowData wdata,
int  op 
)
static

Show PGP options - Implements envelope_function_t -.

Definition at line 320 of file functions.c.

321{
322 const SecurityFlags old_flags = wdata->email->security;
324 return FR_NOT_IMPL;
326 {
327 mutt_error(_("No PGP backend configured"));
328 return FR_ERROR;
329 }
330 if (((WithCrypto & APPLICATION_SMIME) != 0) && (wdata->email->security & APPLICATION_SMIME))
331 {
332 if (wdata->email->security & (SEC_ENCRYPT | SEC_SIGN))
333 {
334 if (mutt_yesorno(_("S/MIME already selected. Clear and continue?"), MUTT_YES) != MUTT_YES)
335 {
337 return FR_NO_ACTION;
338 }
339 wdata->email->security &= ~(SEC_ENCRYPT | SEC_SIGN);
340 }
341 wdata->email->security &= ~APPLICATION_SMIME;
342 wdata->email->security |= APPLICATION_PGP;
343 update_crypt_info(wdata);
344 }
345 wdata->email->security = crypt_pgp_send_menu(wdata->email);
346 update_crypt_info(wdata);
347 if (wdata->email->security == old_flags)
348 return FR_NO_ACTION;
349
352 return FR_SUCCESS;
353}
bool crypt_has_module_backend(SecurityFlags type)
Is there a crypto backend for a given type?
Definition: cryptglue.c:171
SecurityFlags crypt_pgp_send_menu(struct Email *e)
Wrapper for CryptModuleSpecs::send_menu()
Definition: cryptglue.c:384
@ FR_ERROR
Valid function - error occurred.
Definition: dispatcher.h:38
@ FR_NOT_IMPL
Invalid function - feature not enabled.
Definition: dispatcher.h:36
@ NT_EMAIL_CHANGE
Email has changed.
Definition: email.h:151
#define mutt_error(...)
Definition: logging.h:87
void mutt_message_hook(struct Mailbox *m, struct Email *e, HookFlags type)
Perform a message hook.
Definition: hook.c:658
#define MUTT_SEND2_HOOK
send2-hook: when changing fields in the compose menu
Definition: hook.h:49
#define _(a)
Definition: message.h:28
bool notify_send(struct Notify *notify, enum NotifyType event_type, int event_subtype, void *event_data)
Send out a notification message.
Definition: notify.c:171
void mutt_clear_error(void)
Clear the message line (bottom line of screen)
Definition: mutt_logging.c:74
uint16_t SecurityFlags
Flags, e.g. SEC_ENCRYPT.
Definition: lib.h:76
#define APPLICATION_PGP
Use PGP to encrypt/sign.
Definition: lib.h:90
#define APPLICATION_SMIME
Use SMIME to encrypt/sign.
Definition: lib.h:91
#define SEC_ENCRYPT
Email is encrypted.
Definition: lib.h:78
#define WithCrypto
Definition: lib.h:116
#define SEC_SIGN
Email is signed.
Definition: lib.h:79
@ NT_EMAIL
Email has changed, NotifyEmail, EventEmail.
Definition: notify_type.h:44
@ MUTT_YES
User answered 'Yes', or assume 'Yes'.
Definition: quad.h:39
enum QuadOption mutt_yesorno(const char *msg, enum QuadOption def)
Ask the user a Yes/No question.
Definition: question.c:194
SecurityFlags security
bit 0-10: flags, bit 11,12: application, bit 13: traditional pgp See: ncrypt/lib.h pgplib....
Definition: email.h:41
struct Notify * notify
Notifications: NotifyEmail, EventEmail.
Definition: email.h:71
+ Here is the call graph for this function:

◆ op_compose_smime_menu()

static int op_compose_smime_menu ( struct EnvelopeWindowData wdata,
int  op 
)
static

Show S/MIME options - Implements envelope_function_t -.

Definition at line 358 of file functions.c.

359{
360 const SecurityFlags old_flags = wdata->email->security;
362 return FR_NOT_IMPL;
364 {
365 mutt_error(_("No S/MIME backend configured"));
366 return FR_ERROR;
367 }
368
369 if (((WithCrypto & APPLICATION_PGP) != 0) && (wdata->email->security & APPLICATION_PGP))
370 {
371 if (wdata->email->security & (SEC_ENCRYPT | SEC_SIGN))
372 {
373 if (mutt_yesorno(_("PGP already selected. Clear and continue?"), MUTT_YES) != MUTT_YES)
374 {
376 return FR_NO_ACTION;
377 }
378 wdata->email->security &= ~(SEC_ENCRYPT | SEC_SIGN);
379 }
380 wdata->email->security &= ~APPLICATION_PGP;
382 update_crypt_info(wdata);
383 }
384 wdata->email->security = crypt_smime_send_menu(wdata->email);
385 update_crypt_info(wdata);
386 if (wdata->email->security == old_flags)
387 return FR_NO_ACTION;
388
391 return FR_SUCCESS;
392}
SecurityFlags crypt_smime_send_menu(struct Email *e)
Wrapper for CryptModuleSpecs::send_menu()
Definition: cryptglue.c:528
+ Here is the call graph for this function:

◆ op_compose_autocrypt_menu()

static int op_compose_autocrypt_menu ( struct EnvelopeWindowData wdata,
int  op 
)
static

Show autocrypt compose menu options - Implements envelope_function_t -.

Definition at line 398 of file functions.c.

399{
400 const SecurityFlags old_flags = wdata->email->security;
401 const bool c_autocrypt = cs_subset_bool(wdata->sub, "autocrypt");
402 if (!c_autocrypt)
403 return FR_NO_ACTION;
404
406 {
407 if (wdata->email->security & (SEC_ENCRYPT | SEC_SIGN))
408 {
409 if (mutt_yesorno(_("S/MIME already selected. Clear and continue?"), MUTT_YES) != MUTT_YES)
410 {
412 return FR_NO_ACTION;
413 }
414 wdata->email->security &= ~(SEC_ENCRYPT | SEC_SIGN);
415 }
416 wdata->email->security &= ~APPLICATION_SMIME;
417 wdata->email->security |= APPLICATION_PGP;
418 update_crypt_info(wdata);
419 }
420 autocrypt_compose_menu(wdata->email, wdata->sub);
421 update_crypt_info(wdata);
422 if (wdata->email->security == old_flags)
423 return FR_NO_ACTION;
424
427 return FR_SUCCESS;
428}
bool cs_subset_bool(const struct ConfigSubset *sub, const char *name)
Get a boolean config item by name.
Definition: helpers.c:73
static void autocrypt_compose_menu(struct Email *e, const struct ConfigSubset *sub)
Autocrypt compose settings.
Definition: functions.c:64
struct ConfigSubset * sub
Inherited config items.
Definition: wdata.h:40
+ Here is the call graph for this function:

◆ op_envelope_edit_followup_to()

static int op_envelope_edit_followup_to ( struct EnvelopeWindowData wdata,
int  op 
)
static

Edit the Followup-To field - Implements envelope_function_t -.

Definition at line 437 of file functions.c.

438{
439 if (!wdata->is_news)
440 return FR_NO_ACTION;
441
442 int rc = FR_NO_ACTION;
443 struct Buffer *buf = mutt_buffer_pool_get();
444
447 false, NULL, NULL, NULL) == 0)
448 {
451 rc = FR_SUCCESS;
452 }
453
455 return rc;
456}
@ HDR_FOLLOWUPTO
"Followup-To:" field
Definition: private.h:52
@ NT_ENVELOPE_FOLLOWUP_TO
"Followup-To:" header has changed
Definition: envelope.h:108
char * followup_to
List of 'followup-to' fields.
Definition: envelope.h:81
+ Here is the call graph for this function:

◆ op_envelope_edit_newsgroups()

static int op_envelope_edit_newsgroups ( struct EnvelopeWindowData wdata,
int  op 
)
static

Edit the newsgroups list - Implements envelope_function_t -.

Definition at line 461 of file functions.c.

462{
463 if (!wdata->is_news)
464 return FR_NO_ACTION;
465
466 int rc = FR_NO_ACTION;
467 struct Buffer *buf = mutt_buffer_pool_get();
468
469 mutt_buffer_strcpy(buf, wdata->email->env->newsgroups);
471 false, NULL, NULL, NULL) == 0)
472 {
475 rc = FR_SUCCESS;
476 }
477
479 return rc;
480}
@ HDR_NEWSGROUPS
"Newsgroups:" field
Definition: private.h:51
@ NT_ENVELOPE_NEWSGROUPS
"Newsgroups:" header has changed
Definition: envelope.h:111
char * newsgroups
List of newsgroups.
Definition: envelope.h:79
+ Here is the call graph for this function:

◆ op_envelope_edit_x_comment_to()

static int op_envelope_edit_x_comment_to ( struct EnvelopeWindowData wdata,
int  op 
)
static

Edit the X-Comment-To field - Implements envelope_function_t -.

Definition at line 485 of file functions.c.

486{
487 const bool c_x_comment_to = cs_subset_bool(wdata->sub, "x_comment_to");
488 if (!(wdata->is_news && c_x_comment_to))
489 return FR_NO_ACTION;
490
491 int rc = FR_NO_ACTION;
492 struct Buffer *buf = mutt_buffer_pool_get();
493
496 false, NULL, NULL, NULL) == 0)
497 {
500 rc = FR_SUCCESS;
501 }
502
504 return rc;
505}
@ HDR_XCOMMENTTO
"X-Comment-To:" field
Definition: private.h:53
@ NT_ENVELOPE_X_COMMENT_TO
"X-Comment-To:" header has changed
Definition: envelope.h:115
char * x_comment_to
List of 'X-comment-to' fields.
Definition: envelope.h:82
+ Here is the call graph for this function:

◆ op_compose_mix()

static int op_compose_mix ( struct EnvelopeWindowData wdata,
int  op 
)
static

Send the message through a mixmaster remailer chain - Implements envelope_function_t -.

Definition at line 512 of file functions.c.

513{
514 dlg_mixmaster(&wdata->email->chain);
517 return FR_SUCCESS;
518}
void dlg_mixmaster(struct ListHead *chainhead)
Create a Mixmaster chain.
@ NT_ENVELOPE_MIXMASTER
MixMaster chain has changed.
Definition: envelope.h:110
struct ListHead chain
Mixmaster chain.
Definition: email.h:90
+ Here is the call graph for this function: