diff options
Diffstat (limited to 'include/mailutils/sys/nntp.h')
-rw-r--r-- | include/mailutils/sys/nntp.h | 115 |
1 files changed, 78 insertions, 37 deletions
diff --git a/include/mailutils/sys/nntp.h b/include/mailutils/sys/nntp.h index 74c451dd3..ba3da718f 100644 --- a/include/mailutils/sys/nntp.h +++ b/include/mailutils/sys/nntp.h @@ -32,45 +32,72 @@ extern "C" { /* Response codes. */ -#define MU_NNTP_RESP_CODE_SERVER_DATE 111 - -#define MU_NNTP_RESP_CODE_POSTING_ALLOWED 200 -#define MU_NNTP_RESP_CODE_POSTING_PROHIBITED 201 -#define MU_NNTP_RESP_CODE_LIST_FOLLOW 202 - -#define MU_NNTP_RESP_CODE_CLOSING 205 -#define MU_NNTP_RESP_CODE_GROUP_SELECTED 211 - -#define MU_NNTP_RESP_CODE_ARTICLE_FOLLOW 220 -#define MU_NNTP_RESP_CODE_HEAD_FOLLOW 221 -#define MU_NNTP_RESP_CODE_BODY_FOLLOW 222 -#define MU_NNTP_RESP_CODE_ARTICLE_FOUND 223 - -#define MU_NNTP_RESP_CODE_TEMP_UNAVAILABLE 400 -#define MU_NNTP_RESP_CODE_NO_EXTENSION 402 -#define MU_NNTP_RESP_CODE_NO_ARTICLE_WITH_MID 430 -#define MU_NNTP_RESP_CODE_NO_GROUP_SELECTED 412 -#define MU_NNTP_RESP_CODE_NUMBER_INVALID 420 -#define MU_NNTP_RESP_CODE_NO_ARTICLE 422 -#define MU_NNTP_RESP_CODE_NO_ARTICLE_IN_RANGE 423 -#define MU_NNTP_RESP_CODE_PERM_UNAVAILABLE 502 +#define MU_NNTP_RESP_CODE_HELP_FOLLOW 100 +#define MU_NNTP_RESP_CODE_SERVER_DATE 111 + +#define MU_NNTP_RESP_CODE_POSTING_ALLOWED 200 +#define MU_NNTP_RESP_CODE_POSTING_PROHIBITED 201 +#define MU_NNTP_RESP_CODE_EXTENSIONS_FOLLOW 202 + +#define MU_NNTP_RESP_CODE_CLOSING 205 +#define MU_NNTP_RESP_CODE_GROUP_SELECTED 211 + +#define MU_NNTP_RESP_CODE_LIST_FOLLOW 215 + +#define MU_NNTP_RESP_CODE_ARTICLE_FOLLOW 220 +#define MU_NNTP_RESP_CODE_HEAD_FOLLOW 221 +#define MU_NNTP_RESP_CODE_BODY_FOLLOW 222 +#define MU_NNTP_RESP_CODE_ARTICLE_FOUND 223 + +#define MU_NNTP_RESP_CODE_NEWNEWS_FOLLOW 230 +#define MU_NNTP_RESP_CODE_NEWGROUPS_FOLLOW 231 +#define MU_NNTP_RESP_CODE_TRANSFER_OK 235 + +#define MU_NNTP_RESP_CODE_ARTICLE_RECEIVED 240 + +#define MU_NNTP_RESP_CODE_TRANSFER_ARTICLE 335 +#define MU_NNTP_RESP_CODE_SEND_ARTICLE 340 + +#define MU_NNTP_RESP_CODE_TEMP_UNAVAILABLE 400 +#define MU_NNTP_RESP_CODE_NO_EXTENSION 402 +#define MU_NNTP_RESP_CODE_NO_ARTICLE_WITH_MID 430 +#define MU_NNTP_RESP_CODE_NO_GROUP_SELECTED 412 +#define MU_NNTP_RESP_CODE_NUMBER_INVALID 420 +#define MU_NNTP_RESP_CODE_NO_ARTICLE 422 +#define MU_NNTP_RESP_CODE_NO_ARTICLE_IN_RANGE 423 +#define MU_NNTP_RESP_CODE_ARTICLE_NOT_WANTED 435 +#define MU_NNTP_RESP_CODE_TRANSFER_NOT_POSSIBLE 436 +#define MU_NNTP_RESP_CODE_TRANSFER_REJECTED 437 +#define MU_NNTP_RESP_CODE_POSTING_NOT_PERMITTED 440 +#define MU_NNTP_RESP_CODE_POSTING_FAILED 441 +#define MU_NNTP_RESP_CODE_PERM_UNAVAILABLE 502 enum mu_nntp_state { MU_NNTP_NO_STATE, - MU_NNTP_CONNECT, MU_NNTP_GREETINGS, - MU_NNTP_MODE_READER, MU_NNTP_MODE_READER_ACK, - MU_NNTP_LIST_EXTENSIONS, MU_NNTP_LIST_EXTENSIONS_ACK, MU_NNTP_LIST_EXTENSIONS_RX, - MU_NNTP_QUIT, MU_NNTP_QUIT_ACK, - MU_NNTP_GROUP, MU_NNTP_GROUP_ACK, - MU_NNTP_LAST, MU_NNTP_LAST_ACK, - MU_NNTP_NEXT, MU_NNTP_NEXT_ACK, - MU_NNTP_ARTICLE, MU_NNTP_ARTICLE_ACK, MU_NNTP_ARTICLE_RX, - MU_NNTP_HEAD, MU_NNTP_HEAD_ACK, MU_NNTP_HEAD_RX, - MU_NNTP_BODY, MU_NNTP_BODY_ACK, MU_NNTP_BODY_RX, - MU_NNTP_STAT, MU_NNTP_STAT_ACK, - MU_NNTP_DATE, MU_NNTP_DATE_ACK, - MU_NNTP_DONE, MU_NNTP_UNKNOWN, MU_NNTP_ERROR + MU_NNTP_CONNECT, MU_NNTP_GREETINGS, + MU_NNTP_MODE_READER, MU_NNTP_MODE_READER_ACK, + MU_NNTP_LIST_EXTENSIONS, MU_NNTP_LIST_EXTENSIONS_ACK, MU_NNTP_LIST_EXTENSIONS_RX, + MU_NNTP_LIST_ACTIVE, MU_NNTP_LIST_ACTIVE_ACK, MU_NNTP_LIST_ACTIVE_RX, + MU_NNTP_LIST_ACTIVE_TIMES, MU_NNTP_LIST_ACTIVE_TIMES_ACK, MU_NNTP_LIST_ACTIVE_TIMES_RX, + MU_NNTP_LIST_DISTRIBUTIONS, MU_NNTP_LIST_DISTRIBUTIONS_ACK, MU_NNTP_LIST_DISTRIBUTIONS_RX, + MU_NNTP_LIST_DISTRIB_PATS, MU_NNTP_LIST_DISTRIB_PATS_ACK, MU_NNTP_LIST_DISTRIB_PATS_RX, + MU_NNTP_LIST_NEWSGROUPS, MU_NNTP_LIST_NEWSGROUPS_ACK, MU_NNTP_LIST_NEWSGROUPS_RX, + MU_NNTP_QUIT, MU_NNTP_QUIT_ACK, + MU_NNTP_GROUP, MU_NNTP_GROUP_ACK, + MU_NNTP_LAST, MU_NNTP_LAST_ACK, + MU_NNTP_NEXT, MU_NNTP_NEXT_ACK, + MU_NNTP_ARTICLE, MU_NNTP_ARTICLE_ACK, MU_NNTP_ARTICLE_RX, + MU_NNTP_HEAD, MU_NNTP_HEAD_ACK, MU_NNTP_HEAD_RX, + MU_NNTP_BODY, MU_NNTP_BODY_ACK, MU_NNTP_BODY_RX, + MU_NNTP_STAT, MU_NNTP_STAT_ACK, + MU_NNTP_DATE, MU_NNTP_DATE_ACK, + MU_NNTP_HELP, MU_NNTP_HELP_ACK, MU_NNTP_HELP_RX, + MU_NNTP_NEWGROUPS, MU_NNTP_NEWGROUPS_ACK, MU_NNTP_NEWGROUPS_RX, + MU_NNTP_NEWNEWS, MU_NNTP_NEWNEWS_ACK, MU_NNTP_NEWNEWS_RX, + MU_NNTP_POST, MU_NNTP_POST_ACK, MU_NNTP_POST_0, MU_NNTP_POST_1, MU_NNTP_POST_2, MU_NNTP_POST_3, + MU_NNTP_IHAVE, MU_NNTP_IHAVE_ACK, MU_NNTP_IHAVE_0, MU_NNTP_IHAVE_1, MU_NNTP_IHAVE_2, MU_NNTP_IHAVE_3, + MU_NNTP_DONE, MU_NNTP_UNKNOWN, MU_NNTP_ERROR }; /* Structure holding the data necessary to do proper buffering. */ @@ -82,6 +109,16 @@ struct mu_nntp_work_buf size_t len; }; +/* Structure holding the data for post. */ +struct mu_nntp_post_buf + { + char *buf; + int sent_crlf; + size_t nread; + long offset; + size_t len; + }; + /* Structure to hold things general to nntp connection, like its state, etc ... */ struct _mu_nntp { @@ -99,6 +136,9 @@ struct _mu_nntp struct mu_nntp_work_buf ack; int acknowledge; + /* Holds the buffer/offset etc ... for the article to post. */ + struct mu_nntp_post_buf post; + unsigned timeout; /* Default is 10 minutes. */ mu_debug_t debug; /* debugging trace. */ @@ -114,6 +154,7 @@ extern int mu_nntp_stream_create (mu_nntp_t nntp, stream_t *pstream); extern int mu_nntp_carrier_is_ready (stream_t carrier, int flag, int timeout); extern int mu_nntp_parse_article (mu_nntp_t nntp, int code, unsigned long *pnum, char **mid); + /* Check for non recoverable error. The error is consider not recoverable if not part of the signal set: EAGAIN, EINPROGRESS, EINTR. @@ -155,7 +196,7 @@ while (0) #define MU_NNTP_CHECK_CODE(nntp, code) \ do \ { \ - if (mu_nntp_response_code (nntp) == code) \ + if (mu_nntp_response_code (nntp) != code) \ { \ nntp->state = MU_NNTP_NO_STATE; \ return EACCES; \ @@ -166,7 +207,7 @@ while (0) #define MU_NNTP_CHECK_CODE2(nntp, code1, code2) \ do \ { \ - if (mu_nntp_response_code (nntp) == code1 || mu_nntp_response_code (nntp) == code2) \ + if (mu_nntp_response_code (nntp) != code1 && mu_nntp_response_code (nntp) != code2) \ { \ nntp->state = MU_NNTP_NO_STATE; \ return EACCES; \ |