Beispiel #1
0
static int fetch_registered_part(struct mailprivacy * privacy,
    int (* fetch_section)(mailmessage *, struct mailmime *,
        char **, size_t *),
    struct mailmime * mime,
    char ** result, size_t * result_len)
{
  mailmessage * dummy_msg;
  int res;
  char * content;
  size_t content_len;
  int r;
  
  dummy_msg = mime_message_init(NULL);
  if (dummy_msg == NULL) {
    res = MAIL_ERROR_MEMORY;
    goto err;
  }
  
  r = mime_message_set_tmpdir(dummy_msg, privacy->tmp_dir);
  if (r != MAIL_NO_ERROR) {
    res = MAIL_ERROR_MEMORY;
    goto free_msg;
  }
  
  r = fetch_section(dummy_msg, mime, &content, &content_len);
  if (r != MAIL_NO_ERROR) {
    res = r;
    goto free_msg;
  }
  
  r = register_result_mmapstr(privacy, content);
  if (r != MAIL_NO_ERROR) {
    res = r;
    goto free_fetch;
  }
  
  mailmessage_free(dummy_msg);
  
  * result = content;
  * result_len = content_len;
  
  return MAIL_NO_ERROR;
  
 free_fetch:
  mailmessage_fetch_result_free(dummy_msg, content);
 free_msg:
  mailmessage_free(dummy_msg);
 err:
  return res;
}
Beispiel #2
0
int mailmessage_generic_fetch_envelope(mailmessage * msg_info,
				       struct mailimf_fields ** result)
{
  int r;
  int res;
  size_t cur_token;
  char * header;
  size_t length;
  struct mailimf_fields * fields;

  r = mailmessage_fetch_header(msg_info, &header, &length);
  if (r != MAIL_NO_ERROR) {
    res = r;
    goto err;
  }
  
  cur_token = 0;
  
  r = mailimf_envelope_fields_parse(header, length, &cur_token,
				    &fields);
  if (r != MAILIMF_NO_ERROR) {
    res = maildriver_imf_error_to_mail_error(r);
    goto free;
    /* do nothing */
  }

  mailmessage_fetch_result_free(msg_info, header);
  
  * result = fields;

  return MAIL_NO_ERROR;

 free:
  mailmessage_fetch_result_free(msg_info, header);
 err:
  return res;
}
Beispiel #3
0
void mailprivacy_msg_fetch_result_free(struct mailprivacy * privacy,
    mailmessage * msg_info,
    char * msg)
{
  if (msg == NULL)
    return;
  
  if (msg_is_modified(privacy, msg_info)) {
    if (result_is_mmapstr(privacy, msg)) {
      unregister_result_mmapstr(privacy, msg);
      return;
    }
  }
  
  mailmessage_fetch_result_free(msg_info, msg);
}
static void imap_fetch_result_free(mailmessage * msg_info,
				   char * msg)
{
  mailmessage_fetch_result_free(get_ancestor(msg_info), msg);
}