Diffstat (limited to 'kmicromail/libetpan/generic/nntpdriver.c') (more/less context) (ignore whitespace changes)
-rw-r--r-- | kmicromail/libetpan/generic/nntpdriver.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/kmicromail/libetpan/generic/nntpdriver.c b/kmicromail/libetpan/generic/nntpdriver.c index fde5f1a..1b65838 100644 --- a/kmicromail/libetpan/generic/nntpdriver.c +++ b/kmicromail/libetpan/generic/nntpdriver.c | |||
@@ -48,48 +48,51 @@ static int nntpdriver_initialize(mailsession * session); | |||
48 | 48 | ||
49 | static void nntpdriver_uninitialize(mailsession * session); | 49 | static void nntpdriver_uninitialize(mailsession * session); |
50 | 50 | ||
51 | static int nntpdriver_parameters(mailsession * session, | 51 | static int nntpdriver_parameters(mailsession * session, |
52 | int id, void * value); | 52 | int id, void * value); |
53 | 53 | ||
54 | static int nntpdriver_connect_stream(mailsession * session, mailstream * s); | 54 | static int nntpdriver_connect_stream(mailsession * session, mailstream * s); |
55 | 55 | ||
56 | static int nntpdriver_login(mailsession * session, | 56 | static int nntpdriver_login(mailsession * session, |
57 | char * userid, char * password); | 57 | char * userid, char * password); |
58 | 58 | ||
59 | static int nntpdriver_logout(mailsession * session); | 59 | static int nntpdriver_logout(mailsession * session); |
60 | 60 | ||
61 | static int nntpdriver_status_folder(mailsession * session, char * mb, | 61 | static int nntpdriver_status_folder(mailsession * session, char * mb, |
62 | uint32_t * result_messages, | 62 | uint32_t * result_messages, |
63 | uint32_t * result_recent, | 63 | uint32_t * result_recent, |
64 | uint32_t * result_unseen); | 64 | uint32_t * result_unseen); |
65 | 65 | ||
66 | static int nntpdriver_messages_number(mailsession * session, char * mb, | 66 | static int nntpdriver_messages_number(mailsession * session, char * mb, |
67 | uint32_t * result); | 67 | uint32_t * result); |
68 | 68 | ||
69 | static int nntpdriver_append_message(mailsession * session, | 69 | static int nntpdriver_append_message(mailsession * session, |
70 | char * message, size_t size); | 70 | char * message, size_t size); |
71 | 71 | ||
72 | static int nntpdriver_append_message_flags(mailsession * session, | ||
73 | char * message, size_t size, struct mail_flags * flags); | ||
74 | |||
72 | static int | 75 | static int |
73 | nntpdriver_get_envelopes_list(mailsession * session, | 76 | nntpdriver_get_envelopes_list(mailsession * session, |
74 | struct mailmessage_list * env_list); | 77 | struct mailmessage_list * env_list); |
75 | 78 | ||
76 | 79 | ||
77 | static int nntpdriver_get_messages_list(mailsession * session, | 80 | static int nntpdriver_get_messages_list(mailsession * session, |
78 | struct mailmessage_list ** result); | 81 | struct mailmessage_list ** result); |
79 | 82 | ||
80 | static int nntpdriver_list_folders(mailsession * session, char * mb, | 83 | static int nntpdriver_list_folders(mailsession * session, char * mb, |
81 | struct mail_list ** result); | 84 | struct mail_list ** result); |
82 | 85 | ||
83 | static int nntpdriver_lsub_folders(mailsession * session, char * mb, | 86 | static int nntpdriver_lsub_folders(mailsession * session, char * mb, |
84 | struct mail_list ** result); | 87 | struct mail_list ** result); |
85 | 88 | ||
86 | static int nntpdriver_subscribe_folder(mailsession * session, char * mb); | 89 | static int nntpdriver_subscribe_folder(mailsession * session, char * mb); |
87 | 90 | ||
88 | static int nntpdriver_unsubscribe_folder(mailsession * session, char * mb); | 91 | static int nntpdriver_unsubscribe_folder(mailsession * session, char * mb); |
89 | 92 | ||
90 | static int nntpdriver_get_message(mailsession * session, | 93 | static int nntpdriver_get_message(mailsession * session, |
91 | uint32_t num, mailmessage ** result); | 94 | uint32_t num, mailmessage ** result); |
92 | 95 | ||
93 | static int nntpdriver_get_message_by_uid(mailsession * session, | 96 | static int nntpdriver_get_message_by_uid(mailsession * session, |
94 | const char * uid, | 97 | const char * uid, |
95 | mailmessage ** result); | 98 | mailmessage ** result); |
@@ -108,48 +111,49 @@ static mailsession_driver local_nntp_session_driver = { | |||
108 | .sess_connect_path = NULL, | 111 | .sess_connect_path = NULL, |
109 | .sess_starttls = NULL, | 112 | .sess_starttls = NULL, |
110 | .sess_login = nntpdriver_login, | 113 | .sess_login = nntpdriver_login, |
111 | .sess_logout = nntpdriver_logout, | 114 | .sess_logout = nntpdriver_logout, |
112 | .sess_noop = nntpdriver_noop, | 115 | .sess_noop = nntpdriver_noop, |
113 | 116 | ||
114 | .sess_build_folder_name = NULL, | 117 | .sess_build_folder_name = NULL, |
115 | .sess_create_folder = NULL, | 118 | .sess_create_folder = NULL, |
116 | .sess_delete_folder = NULL, | 119 | .sess_delete_folder = NULL, |
117 | .sess_rename_folder = NULL, | 120 | .sess_rename_folder = NULL, |
118 | .sess_check_folder = NULL, | 121 | .sess_check_folder = NULL, |
119 | .sess_examine_folder = NULL, | 122 | .sess_examine_folder = NULL, |
120 | .sess_select_folder = nntpdriver_select_folder, | 123 | .sess_select_folder = nntpdriver_select_folder, |
121 | .sess_expunge_folder = NULL, | 124 | .sess_expunge_folder = NULL, |
122 | .sess_status_folder = nntpdriver_status_folder, | 125 | .sess_status_folder = nntpdriver_status_folder, |
123 | .sess_messages_number = nntpdriver_messages_number, | 126 | .sess_messages_number = nntpdriver_messages_number, |
124 | .sess_recent_number = nntpdriver_messages_number, | 127 | .sess_recent_number = nntpdriver_messages_number, |
125 | .sess_unseen_number = nntpdriver_messages_number, | 128 | .sess_unseen_number = nntpdriver_messages_number, |
126 | .sess_list_folders = nntpdriver_list_folders, | 129 | .sess_list_folders = nntpdriver_list_folders, |
127 | .sess_lsub_folders = nntpdriver_lsub_folders, | 130 | .sess_lsub_folders = nntpdriver_lsub_folders, |
128 | .sess_subscribe_folder = nntpdriver_subscribe_folder, | 131 | .sess_subscribe_folder = nntpdriver_subscribe_folder, |
129 | .sess_unsubscribe_folder = nntpdriver_unsubscribe_folder, | 132 | .sess_unsubscribe_folder = nntpdriver_unsubscribe_folder, |
130 | 133 | ||
131 | .sess_append_message = nntpdriver_append_message, | 134 | .sess_append_message = nntpdriver_append_message, |
135 | .sess_append_message_flags = nntpdriver_append_message_flags, | ||
132 | .sess_copy_message = NULL, | 136 | .sess_copy_message = NULL, |
133 | .sess_move_message = NULL, | 137 | .sess_move_message = NULL, |
134 | 138 | ||
135 | .sess_get_messages_list = nntpdriver_get_messages_list, | 139 | .sess_get_messages_list = nntpdriver_get_messages_list, |
136 | .sess_get_envelopes_list = nntpdriver_get_envelopes_list, | 140 | .sess_get_envelopes_list = nntpdriver_get_envelopes_list, |
137 | .sess_remove_message = NULL, | 141 | .sess_remove_message = NULL, |
138 | #if 0 | 142 | #if 0 |
139 | .sess_search_messages = maildriver_generic_search_messages, | 143 | .sess_search_messages = maildriver_generic_search_messages, |
140 | #endif | 144 | #endif |
141 | 145 | ||
142 | .sess_get_message = nntpdriver_get_message, | 146 | .sess_get_message = nntpdriver_get_message, |
143 | .sess_get_message_by_uid = nntpdriver_get_message_by_uid, | 147 | .sess_get_message_by_uid = nntpdriver_get_message_by_uid, |
144 | }; | 148 | }; |
145 | 149 | ||
146 | 150 | ||
147 | mailsession_driver * nntp_session_driver = &local_nntp_session_driver; | 151 | mailsession_driver * nntp_session_driver = &local_nntp_session_driver; |
148 | 152 | ||
149 | static inline struct nntp_session_state_data * | 153 | static inline struct nntp_session_state_data * |
150 | get_data(mailsession * session) | 154 | get_data(mailsession * session) |
151 | { | 155 | { |
152 | return session->sess_data; | 156 | return session->sess_data; |
153 | } | 157 | } |
154 | 158 | ||
155 | static inline newsnntp * get_nntp_session(mailsession * session) | 159 | static inline newsnntp * get_nntp_session(mailsession * session) |
@@ -609,48 +613,54 @@ static int nntpdriver_append_message(mailsession * session, | |||
609 | data = get_data(session); | 613 | data = get_data(session); |
610 | 614 | ||
611 | do { | 615 | do { |
612 | r = newsnntp_post(get_nntp_session(session), message, size); | 616 | r = newsnntp_post(get_nntp_session(session), message, size); |
613 | switch (r) { | 617 | switch (r) { |
614 | case NEWSNNTP_WARNING_REQUEST_AUTHORIZATION_USERNAME: | 618 | case NEWSNNTP_WARNING_REQUEST_AUTHORIZATION_USERNAME: |
615 | r = nntpdriver_authenticate_user(session); | 619 | r = nntpdriver_authenticate_user(session); |
616 | if (r != MAIL_NO_ERROR) | 620 | if (r != MAIL_NO_ERROR) |
617 | return r; | 621 | return r; |
618 | break; | 622 | break; |
619 | 623 | ||
620 | case NEWSNNTP_WARNING_REQUEST_AUTHORIZATION_PASSWORD: | 624 | case NEWSNNTP_WARNING_REQUEST_AUTHORIZATION_PASSWORD: |
621 | r = nntpdriver_authenticate_password(session); | 625 | r = nntpdriver_authenticate_password(session); |
622 | if (r != MAIL_NO_ERROR) | 626 | if (r != MAIL_NO_ERROR) |
623 | return r; | 627 | return r; |
624 | break; | 628 | break; |
625 | 629 | ||
626 | default: | 630 | default: |
627 | return nntpdriver_nntp_error_to_mail_error(r); | 631 | return nntpdriver_nntp_error_to_mail_error(r); |
628 | } | 632 | } |
629 | } | 633 | } |
630 | while (1); | 634 | while (1); |
631 | } | 635 | } |
632 | 636 | ||
637 | static int nntpdriver_append_message_flags(mailsession * session, | ||
638 | char * message, size_t size, struct mail_flags * flags) | ||
639 | { | ||
640 | return nntpdriver_append_message(session, message, size); | ||
641 | } | ||
642 | |||
633 | 643 | ||
634 | static int xover_resp_to_fields(struct newsnntp_xover_resp_item * item, | 644 | static int xover_resp_to_fields(struct newsnntp_xover_resp_item * item, |
635 | struct mailimf_fields ** result); | 645 | struct mailimf_fields ** result); |
636 | 646 | ||
637 | 647 | ||
638 | static int | 648 | static int |
639 | nntpdriver_get_envelopes_list(mailsession * session, | 649 | nntpdriver_get_envelopes_list(mailsession * session, |
640 | struct mailmessage_list * env_list) | 650 | struct mailmessage_list * env_list) |
641 | { | 651 | { |
642 | newsnntp * nntp; | 652 | newsnntp * nntp; |
643 | int r; | 653 | int r; |
644 | struct nntp_session_state_data * data; | 654 | struct nntp_session_state_data * data; |
645 | clist * list; | 655 | clist * list; |
646 | int done; | 656 | int done; |
647 | clistiter * cur; | 657 | clistiter * cur; |
648 | uint32_t first_seq; | 658 | uint32_t first_seq; |
649 | unsigned int i; | 659 | unsigned int i; |
650 | 660 | ||
651 | nntp = get_nntp_session(session); | 661 | nntp = get_nntp_session(session); |
652 | 662 | ||
653 | data = get_data(session); | 663 | data = get_data(session); |
654 | 664 | ||
655 | if (data->nntp_group_info == NULL) | 665 | if (data->nntp_group_info == NULL) |
656 | return MAIL_ERROR_BAD_STATE; | 666 | return MAIL_ERROR_BAD_STATE; |