int mailimap_fetch_xgmmsgid(mailimap * session, struct mailimap_set * set, clist ** results) { struct mailimap_response * response; int r; int error_code; if (session->imap_state != MAILIMAP_STATE_SELECTED) return MAILIMAP_ERROR_BAD_STATE; r = mailimap_send_current_tag(session); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_token_send(session->imap_stream, "FETCH"); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_space_send(session->imap_stream); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_set_send(session->imap_stream, set); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_space_send(session->imap_stream); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_token_send(session->imap_stream, "(X-GM-MSGID)"); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_crlf_send(session->imap_stream); if (r != MAILIMAP_NO_ERROR) return r; if (mailstream_flush(session->imap_stream) == -1) return MAILIMAP_ERROR_STREAM; if (mailimap_read_line(session) == NULL) return MAILIMAP_ERROR_STREAM; r = mailimap_parse_response(session, &response); if (r != MAILIMAP_NO_ERROR) return r; error_code = response->rsp_resp_done->rsp_data.rsp_tagged->rsp_cond_state->rsp_type; *results = response->rsp_cont_req_or_resp_data_list; mailimap_response_free(response); switch (error_code) { case MAILIMAP_RESP_COND_STATE_OK: return MAILIMAP_NO_ERROR; default: return MAILIMAP_ERROR_FETCH; } }
static int mailimap_store_xgmlabels_send(mailstream * fd, struct mailimap_set * set, int fl_sign, int fl_silent, struct mailimap_msg_att_xgmlabels * labels) { int r; r = mailimap_token_send(fd, "STORE"); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_space_send(fd); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_set_send(fd, set); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_space_send(fd); if (r != MAILIMAP_NO_ERROR) return r; switch (fl_sign) { case 1: r = mailimap_char_send(fd, '+'); if (r != MAILIMAP_NO_ERROR) return r; break; case -1: r = mailimap_char_send(fd, '-'); if (r != MAILIMAP_NO_ERROR) return r; break; } r = mailimap_token_send(fd, "X-GM-LABELS"); if (r != MAILIMAP_NO_ERROR) return r; if (fl_silent) { r = mailimap_token_send(fd, ".SILENT"); if (r != MAILIMAP_NO_ERROR) return r; } r = mailimap_space_send(fd); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_msg_att_xgmlabels_send(fd, labels); if (r != MAILIMAP_NO_ERROR) return r; return MAILIMAP_NO_ERROR; }
int mailimap_select_qresync_send(mailstream * fd, const char * mb, uint32_t uidvalidity, uint64_t modseq_value, struct mailimap_set * known_uids, struct mailimap_set * seq_match_data_sequences, struct mailimap_set * seq_match_data_uids) { int r; /* select-param = "QRESYNC" SP "(" uidvalidity SP mod-sequence-value [SP known-uids] [SP seq-match-data] ")" */ r = mailimap_token_send(fd, "SELECT"); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_space_send(fd); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_mailbox_send(fd, mb); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_space_send(fd); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_token_send(fd, "QRESYNC"); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_space_send(fd); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_oparenth_send(fd); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_number_send(fd, uidvalidity); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_space_send(fd); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_mod_sequence_value_send(fd, modseq_value); if (r != MAILIMAP_NO_ERROR) return r; if (known_uids != NULL) { r = mailimap_space_send(fd); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_set_send(fd, known_uids); if (r != MAILIMAP_NO_ERROR) return r; } if ((seq_match_data_sequences != NULL) && (seq_match_data_uids != NULL)) { r = mailimap_space_send(fd); if (r != MAILIMAP_NO_ERROR) return r; /* seq-match-data = "(" known-sequence-set SP known-uid-set ")" */ r = mailimap_oparenth_send(fd); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_set_send(fd, seq_match_data_sequences); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_space_send(fd); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_set_send(fd, seq_match_data_uids); if (r != MAILIMAP_NO_ERROR) return r; r = mailimap_cparenth_send(fd); if (r != MAILIMAP_NO_ERROR) return r; } r = mailimap_cparenth_send(fd); if (r != MAILIMAP_NO_ERROR) return r; return MAILIMAP_NO_ERROR; }