1 /*
2  This file is part of SLRN.
3 
4  Copyright (c) 1994, 1999, 2007-2016 John E. Davis <jed@jedsoft.org>
5  Copyright (c) 2001-2006 Thomas Schultz <tststs@gmx.de>
6 
7  This program is free software; you can redistribute it and/or modify it
8  under the terms of the GNU General Public License as published by the Free
9  Software Foundation; either version 2 of the License, or (at your option)
10  any later version.
11 
12  This program is distributed in the hope that it will be useful, but WITHOUT
13  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
15  more details.
16 
17  You should have received a copy of the GNU General Public License along
18  with this program; if not, write to the Free Software Foundation, Inc.,
19  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 */
21 #ifndef _SLRN_SERVER_H
22 #define _SLRN_SERVER_H
23 #include "nntpcodes.h"
24 #include "ranges.h"
25 
26 typedef struct
27 {
28    int (*po_start)(void);
29    int (*po_end)(void);
30    int (*po_printf)(char *, ...) ATTRIBUTE_PRINTF(1,2);
31    int (*po_vprintf)(const char *, va_list);
32    int (*po_puts)(char *);
33    char * (*po_get_recom_id)(void);
34    int po_can_post;
35 } Slrn_Post_Obj_Type;
36 
37 typedef struct
38 {
39    int (*sv_select_group) (char *, NNTP_Artnum_Type *, NNTP_Artnum_Type *);
40    int (*sv_refresh_groups) (Slrn_Group_Range_Type *, int);
41    char * (*sv_current_group) (void);
42    int (*sv_read_line) (char *, unsigned int);
43    void (*sv_close) (void);
44    /* sv_reset is somewhat like sv_close except that it only puts the
45     * server in a state where the server can be given additional commands.
46     */
47    void (*sv_reset)(void);
48    int (*sv_initialize) (void);
49    int (*sv_select_article) (NNTP_Artnum_Type, char *);
50    int (*sv_get_article_size) (NNTP_Artnum_Type);
51    int (*sv_put_server_cmd) (char *, char *, unsigned int);
52    int (*sv_xpat_cmd) (char *, NNTP_Artnum_Type, NNTP_Artnum_Type, char *);
53 
54    int (*sv_xhdr_command) (char *, NNTP_Artnum_Type, char *, unsigned int);
55 
56    int (*sv_has_cmd) (char *);
57    int (*sv_list) (char *);
58    int (*sv_list_newsgroups) (void);
59    int (*sv_list_active) (char *);
60    int (*sv_send_authinfo) (void);
61 
62    int sv_has_xhdr;
63    int sv_has_xover;
64    int sv_reset_has_xover;
65    /* if non-zero, sv_has_xover is set to 1 when entering a group.
66     * This is because some servers support XOVER but do not have overview
67     * files for all groups.  See xover.c
68     */
69    int (*sv_nntp_xover) (NNTP_Artnum_Type, NNTP_Artnum_Type);
70    int (*sv_nntp_xhdr) (char *, NNTP_Artnum_Type, NNTP_Artnum_Type);
71    int (*sv_nntp_head) (NNTP_Artnum_Type, char *, NNTP_Artnum_Type *);
72    int (*sv_nntp_next) (NNTP_Artnum_Type *);
73 
74    /* Returns number of bytes received.
75     * If the int is non-zero, the counter is reset. */
76    unsigned int (*sv_nntp_bytes) (int);
77 
78    /* Some server software has known bugs that we can work around. */
79 #define SERVER_ID_UNKNOWN	0
80 #define SERVER_ID_INN		1
81    int sv_id;
82    char *sv_name;
83 }
84 Slrn_Server_Obj_Type;
85 
86 extern Slrn_Server_Obj_Type *Slrn_Server_Obj;
87 extern Slrn_Post_Obj_Type *Slrn_Post_Obj;
88 
89 extern NNTP_Artnum_Type Slrn_Server_Min, Slrn_Server_Max;
90 extern char *Slrn_Current_Group_Name;
91 
92 #if SLRN_HAS_NNTP_SUPPORT
93 extern int Slrn_Broken_Xref;
94 extern int Slrn_Query_Reconnect;
95 extern int Slrn_Force_Authentication;
96 extern char *Slrn_NNTP_Server_Name;
97 #endif
98 
99 #if SLRN_HAS_INEWS_SUPPORT
100 extern char *Slrn_Inews_Pgm;
101 #endif
102 
103 extern char *slrn_map_object_id_to_name (int, int);
104 extern int slrn_map_name_to_object_id (int, char *);
105 
106 extern int slrn_init_objects (void);
107 extern int slrn_select_post_object (int);
108 extern int slrn_select_server_object (int);
109 extern int slrn_parse_object_args (char *, char **, int);
110 
111 extern char *slrn_getserverbyfile(char *);
112 
113 #if SLRN_HAS_SPOOL_SUPPORT
114 extern char *Slrn_Inn_Root;
115 extern char *Slrn_Spool_Root;
116 extern char *Slrn_Nov_Root;
117 extern char *Slrn_Nov_File;
118 extern char *Slrn_Active_File;
119 extern char *Slrn_ActiveTimes_File;
120 extern char *Slrn_Newsgroups_File;
121 extern char *Slrn_Overviewfmt_File;
122 extern int Slrn_Spool_Check_Up_On_Nov;
123 
124 extern Slrn_Range_Type *slrn_spool_get_no_body_ranges (char *);
125 extern Slrn_Range_Type *slrn_spool_get_requested_ranges (char *);
126 extern int slrn_spool_set_requested_ranges (char*, Slrn_Range_Type*);
127 #endif
128 
129 #if SLRN_HAS_PULL_SUPPORT
130 extern int Slrn_Use_Pull_Post;
131 #endif
132 
133 extern int Slrn_Server_Id;
134 extern int Slrn_Post_Id;
135 
136 #endif				       /* SLRN_SERVER_H */
137