5fa5250ddbac77507a2bcdb038e1625a37522e50
[apps/madmutt.git] / nntp.h
1 /*
2  * Copyright (C) 1998 Brandon Long <blong@fiction.net>
3  * Copyright (C) 1999 Andrej Gritsenko <andrej@lucky.net>
4  * Copyright (C) 2000-2002 Vsevolod Volkov <vvv@mutt.org.ua>
5  * 
6  *     This program is free software; you can redistribute it and/or modify
7  *     it under the terms of the GNU General Public License as published by
8  *     the Free Software Foundation; either version 2 of the License, or
9  *     (at your option) any later version.
10  * 
11  *     This program is distributed in the hope that it will be useful,
12  *     but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *     GNU General Public License for more details.
15  * 
16  *     You should have received a copy of the GNU General Public License
17  *     along with this program; if not, write to the Free Software
18  *     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19  */
20
21 #ifndef _NNTP_H_
22 #define _NNTP_H_ 1
23
24 #include "mutt_socket.h"
25 #include "mailbox.h"
26
27 #include <time.h>
28
29 #define NNTP_PORT 119
30 #define NNTP_SSL_PORT 563
31
32 /* number of entries in the hash table */
33 #define NNTP_CACHE_LEN 10
34
35 enum {
36   NNTP_NONE = 0,
37   NNTP_OK,
38   NNTP_BYE
39 };
40
41 typedef struct {
42   int first;
43   int last;
44 } NEWSRC_ENTRY;
45
46 typedef struct {
47   unsigned int hasXPAT:1;
48   unsigned int hasXGTITLE:1;
49   unsigned int hasXOVER:1;
50   unsigned int hasLISTGROUP:1;
51   unsigned int status:3;
52   char *newsrc;
53   char *cache;
54   int stat;
55   off_t size;
56   time_t mtime;
57   time_t newgroups_time;
58   time_t check_time;
59   HASH *newsgroups;
60   LIST *list;                   /* list of newsgroups */
61   LIST *tail;                   /* last entry of list */
62   CONNECTION *conn;
63 } NNTP_SERVER;
64
65 typedef struct {
66   unsigned int index;
67   char *path;
68 } NNTP_CACHE;
69
70 typedef struct {
71   NEWSRC_ENTRY *entries;
72   unsigned int num;             /* number of used entries */
73   unsigned int max;             /* number of allocated entries */
74   unsigned int unread;
75   unsigned int firstMessage;
76   unsigned int lastMessage;
77   unsigned int lastLoaded;
78   unsigned int lastCached;
79   unsigned int subscribed:1;
80   unsigned int rc:1;
81   unsigned int new:1;
82   unsigned int allowed:1;
83   unsigned int deleted:1;
84   char *group;
85   char *desc;
86   char *cache;
87   NNTP_SERVER *nserv;
88   NNTP_CACHE acache[NNTP_CACHE_LEN];
89 } NNTP_DATA;
90
91 /* internal functions */
92 int nntp_get_active (NNTP_SERVER *);
93 int nntp_get_cache_all (NNTP_SERVER *);
94 int nntp_save_cache_index (NNTP_SERVER *);
95 int nntp_check_newgroups (NNTP_SERVER *, int);
96 int nntp_save_cache_group (CONTEXT *);
97 int nntp_parse_url (const char *, ACCOUNT *, char *, size_t);
98 void newsrc_gen_entries (CONTEXT *);
99 void nntp_get_status (CONTEXT *, HEADER *, char *, int);
100 void mutt_newsgroup_stat (NNTP_DATA *);
101 void nntp_delete_cache (NNTP_DATA *);
102 void nntp_add_to_list (NNTP_SERVER *, NNTP_DATA *);
103 void nntp_cache_expand (char *, const char *);
104 void nntp_delete_data (void *);
105
106 /* exposed interface */
107 NNTP_SERVER *mutt_select_newsserver (char *);
108 NNTP_DATA *mutt_newsgroup_subscribe (NNTP_SERVER *, char *);
109 NNTP_DATA *mutt_newsgroup_unsubscribe (NNTP_SERVER *, char *);
110 NNTP_DATA *mutt_newsgroup_catchup (NNTP_SERVER *, char *);
111 NNTP_DATA *mutt_newsgroup_uncatchup (NNTP_SERVER *, char *);
112 void nntp_clear_cacheindex (NNTP_SERVER *);
113 int mutt_newsrc_update (NNTP_SERVER *);
114 int nntp_open_mailbox (CONTEXT *);
115 int nntp_sync_mailbox (CONTEXT *);
116 int nntp_check_mailbox (CONTEXT *);
117 int nntp_close_mailbox (CONTEXT *);
118 void nntp_fastclose_mailbox (CONTEXT *);
119 int nntp_fetch_message (MESSAGE *, CONTEXT *, int);
120 int nntp_post (const char *);
121 int nntp_check_msgid (CONTEXT *, const char *);
122 int nntp_check_children (CONTEXT *, const char *);
123 void nntp_buffy (char *);
124 void nntp_expand_path (char *, size_t, ACCOUNT *);
125 void nntp_logout_all ();
126 const char *nntp_format_str (char *, size_t, char, const char *, const char *,
127                              const char *, const char *, unsigned long,
128                              format_flag);
129
130 NNTP_SERVER *CurrentNewsSrv INITVAL (NULL);
131
132 #endif /* _NNTP_H_ */