nntp.h
9.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
/* GNU Mailutils -- a suite of utilities for electronic mail
Copyright (C) 2004-2005, 2007, 2010-2012 Free Software Foundation,
Inc.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 3 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library. If not, see
<http://www.gnu.org/licenses/>. */
#ifndef _MAILUTILS_NNTP_H
#define _MAILUTILS_NNTP_H
#include <mailutils/debug.h>
#include <mailutils/stream.h>
#ifdef __cplusplus
extern "C" {
#endif
struct _mu_nntp;
typedef struct _mu_nntp* mu_nntp_t;
#define MU_NNTP_DEFAULT_PORT 119
#define MU_NNTP_URL_SCHEME "nntp"
extern int mu_nntp_create (mu_nntp_t *nntp);
extern void mu_nntp_destroy (mu_nntp_t *nntp);
extern int mu_nntp_set_carrier (mu_nntp_t nntp, mu_stream_t carrier);
extern int mu_nntp_get_carrier (mu_nntp_t nntp, mu_stream_t *pcarrier);
extern int mu_nntp_connect (mu_nntp_t nntp);
extern int mu_nntp_disconnect (mu_nntp_t nntp);
extern int mu_nntp_set_timeout (mu_nntp_t nntp, int timeout);
extern int mu_nntp_get_timeout (mu_nntp_t nntp, int *timeout);
extern int mu_nntp_stls (mu_nntp_t nntp);
extern int mu_nntp_mode_reader (mu_nntp_t nntp);
/* An iterator is return with the multi-line answer. It is the responsibility
of the caller to call mu_iterator_destroy() to dispose of the iterator. */
extern int mu_nntp_list_extensions (mu_nntp_t nntp, mu_iterator_t *iterator);
extern int mu_nntp_quit (mu_nntp_t nntp);
/* The argument name is allocated with malloc(3). The caller is responsible
to call free(3) */
extern int mu_nntp_group (mu_nntp_t nntp,
const char *group,
unsigned long *total,
unsigned long *first,
unsigned long *last, char **name);
/* The argument mid is allocated with malloc(3). The caller is responsible
to call free(3) */
extern int mu_nntp_last (mu_nntp_t nntp,
unsigned long *number, char **mid);
extern int mu_nntp_next (mu_nntp_t nntp,
unsigned long *number, char **mid);
/* The argument mid is allocated with malloc(3). The caller is responsible
to call free(3). The caller must call stream_destoy() when done, no
other commands are permitted until the stream is destroyed. */
extern int mu_nntp_article (mu_nntp_t nntp, unsigned long number,
unsigned long *pnum, char **mid,
mu_stream_t *stream);
extern int mu_nntp_article_id (mu_nntp_t nntp, const char *id,
unsigned long *pnum, char **mid,
mu_stream_t *stream);
extern int mu_nntp_head (mu_nntp_t nntp, unsigned long number,
unsigned long *pnum, char **mid,
mu_stream_t *stream);
extern int mu_nntp_head_id (mu_nntp_t nntp, const char *name,
unsigned long *pnum, char **mid,
mu_stream_t *stream);
extern int mu_nntp_body (mu_nntp_t nntp, unsigned long number,
unsigned long *pnum, char **mid,
mu_stream_t *stream);
extern int mu_nntp_body_id (mu_nntp_t nntp, const char *id,
unsigned long *pnum, char **mid,
mu_stream_t *stream);
/* The argument mid is allocated with malloc(3). The caller is responsible
to call free(3) */
extern int mu_nntp_stat (mu_nntp_t nntp, unsigned long number,
unsigned long *pnum, char **mid);
extern int mu_nntp_stat_id (mu_nntp_t nntp, const char *id,
unsigned long *pnum, char **mid);
extern int mu_nntp_date (mu_nntp_t nntp, unsigned int *year,
unsigned int *month, unsigned int *day,
unsigned int *hour, unsigned int *minute,
unsigned int *second);
/* The caller must call stream_destoy() when done, no other commands are
permitted until the stream is destroyed. */
extern int mu_nntp_help (mu_nntp_t nntp, mu_stream_t *stream);
/* An iterator is return with the multi-line answer. It is the responsibility
of the caller to call mu_iterator_destroy() to dispose of the iterator. */
extern int mu_nntp_newgroups (mu_nntp_t nntp, unsigned int year,
unsigned int month, unsigned int day,
unsigned int hour, unsigned int minute,
unsigned int second, int is_gmt,
mu_iterator_t *iterator);
/* A iterator is return with the multi-line answer. It is the responsibility
of the caller to call mu_iterator_destroy() to dispose of the iterator. */
extern int mu_nntp_newnews (mu_nntp_t nntp, const char *wildmat,
unsigned int year, unsigned int month,
unsigned int day, unsigned int hour,
unsigned int minute, unsigned int second,
int is_gmt, mu_iterator_t *iterator);
extern int mu_nntp_post (mu_nntp_t nntp, mu_stream_t stream);
extern int mu_nntp_ihave (mu_nntp_t nntp, const char *mid,
mu_stream_t stream);
/* A iterator is return with the multi-line answer. It is the responsibility
of the caller to call mu_iterator_destroy() to dispose of the iterator. */
extern int mu_nntp_list_active (mu_nntp_t nntp, const char *wildmat,
mu_iterator_t *iterator);
extern int mu_nntp_list_active_times (mu_nntp_t nntp,
const char *wildmat,
mu_iterator_t *iterator);
extern int mu_nntp_list_distributions (mu_nntp_t nntp,
const char *wildmat,
mu_iterator_t *iterator);
extern int mu_nntp_list_distrib_pats (mu_nntp_t nntp, mu_iterator_t *iterator);
extern int mu_nntp_list_newsgroups (mu_nntp_t nntp,
const char *wildmat,
mu_iterator_t *iterator);
/* Parse the list active response.
"group high low status"
group: is the name of the group
high: high wather mark
low: low water mark
status: current status
'y': posting is permitted
'm': posting is not permitted
'm': postings will be moderated
The argument group is allocated with malloc(3). The caller is responsible
to call free(3).
*/
extern int mu_nntp_parse_list_active (const char *buffer, char **group,
unsigned long *high, unsigned long *low,
char *status);
extern int mu_nntp_parse_newgroups (const char *buffer, char **group,
unsigned long *high, unsigned long *low,
char *status);
/* Parse the list active.times response.
"group time creator"
group: is the name of the group
time: measure in seconds since Jan 1 1970
creator: entity taht created the newsgroup
The argument group/creator is allocated with malloc(3). The caller is
responsible to call free(3).
*/
extern int mu_nntp_parse_list_active_times (const char *buffer, char **group,
unsigned long *time,
char **creator);
/* Parse the list distributions response.
"key value"
key: field key.
value: short explaination of key
The argument key/value is allocated with malloc(3). The caller is responsible
to call free(3).
*/
extern int mu_nntp_parse_list_distributions (const char *buffer,
char **key, char **value);
/* Parse the list distributions response.
"weight:wildmat:distrib"
weight:
wildmat:
distrib:
The argument wildmat/distrib is allocated with malloc(3). The caller is
responsible to call free(3).
*/
extern int mu_nntp_parse_list_distrib_pats (const char *buffer,
unsigned long *weight,
char **wildmat, char **distrib);
/* Parse the list distributions response.
"group description"
The argument group/description is allocated with malloc(3). The caller is
responsible to call free(3).
*/
extern int mu_nntp_parse_list_newsgroups (const char *buffer, char **group,
char **description);
/* Reads the multi-line response of the server, nread will be 0 when the
termination octets are detected. Clients should not use this function
unless they are sending a direct command. */
extern int mu_nntp_readline (mu_nntp_t nntp, char *buffer,
size_t buflen, size_t *nread);
/* Returns the last command acknowledge. If the server supports RESP-CODE,
the message could be retrieved, but it is up the caller to do the parsing.
*/
extern int mu_nntp_response (mu_nntp_t nntp, char *buffer,
size_t buflen, size_t *nread);
/* pop3_writeline copies the line in the internal buffer, a mu_pop3_send() is
needed to do the actual transmission. */
extern int mu_nntp_writeline (mu_nntp_t nntp, const char *format, ...)
MU_PRINTFLIKE(2,3);
/* mu_pop3_sendline() is equivalent to:
mu_pop3_writeline (pop3, line);
mu_pop3_send (pop3);
*/
extern int mu_nntp_sendline (mu_nntp_t nntp, const char *line);
/* Transmit via the carrier the internal buffer data. */
extern int mu_nntp_send (mu_nntp_t nntp);
extern int mu_nntp_response_code (mu_nntp_t nntp);
#ifdef __cplusplus
}
#endif
#endif /* _MAILUTILS_POP3_H */