annotate src/client.c @ 183:c912e8288164 noffle

[svn] * src/client.c: Only bail out of fetching multiple articles if the connection fails. If we do get a status from the upstream server note it and see what is reported for the next article. Otherwise failure to retrieve one article will cause all successive article fetches to fail even through they would succeed if tried. * src/lock.c: Fix assert in lazy locking. If another noffle signalled us to release the lock at the next close, and then repeats the signal so that it arrives during LOCK_closeDatabases, the signal handler was trying to close the databases again.
author bears
date Tue, 15 May 2001 13:07:53 +0100
parents a43a528cfbe7
children fed1334d766b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1 /*
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
2 client.c
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
3
183
c912e8288164 [svn] * src/client.c: Only bail out of fetching multiple articles if the
bears
parents: 182
diff changeset
4 $Id: client.c 292 2001-05-15 12:07:53Z bears $
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
5 */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
6
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
7 #if HAVE_CONFIG_H
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
8 #include <config.h>
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
9 #endif
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
10
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
11 #include "client.h"
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
12
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
13 #include <stdio.h>
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
14 #include <arpa/inet.h>
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
15 #include <ctype.h>
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
16 #include <netdb.h>
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
17 #include <netinet/in.h>
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
18 #include <signal.h>
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
19 #include <stdarg.h>
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
20 #include <sys/socket.h>
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
21 #include <unistd.h>
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
22 #include "configfile.h"
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
23 #include "content.h"
95
c3312022e657 [svn] Observe Supersedes: header
bears
parents: 88
diff changeset
24 #include "control.h"
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
25 #include "dynamicstring.h"
130
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
26 #include "filter.h"
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
27 #include "group.h"
67
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
28 #include "itemlist.h"
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
29 #include "lock.h"
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
30 #include "log.h"
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
31 #include "over.h"
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
32 #include "protocol.h"
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
33 #include "pseudo.h"
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
34 #include "request.h"
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
35 #include "util.h"
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
36 #include "wildmat.h"
54
125d79c9e586 [svn] * src/client.c, src/configfile.c, src/content.c, src/control.c,
uh1763
parents: 48
diff changeset
37 #include "portable.h"
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
38
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
39 /*
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
40 Some newsgroups names are reserved for server-specific or server
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
41 pseudo groups. We don't want to fetch them. For example, INN
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
42 keeps all its control messages in a 'control' hierarchy, and
103
f782184db8bc [svn] 1.0pre6 merge plus variable rename
bears
parents: 102
diff changeset
43 used the "to." hierarchy for dark and mysterious purposes I think
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
44 are to do with newsfeeds. The recommended restrictions are documented
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
45 in C.Lindsay, "News Article Format", <draft-ietf-usefor-article-03.txt>.
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
46 */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
47
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
48 struct ForbiddenGroupName
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
49 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
50 const char *pattern;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
51 Bool match;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
52 } forbiddenGroupNames[] =
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
53 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
54 { "*.*", FALSE }, /* Single component */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
55 { "control.*", TRUE }, /* control.* groups */
103
f782184db8bc [svn] 1.0pre6 merge plus variable rename
bears
parents: 102
diff changeset
56 { "to.*", TRUE }, /* to.* groups */
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
57 { "*.all", TRUE }, /* 'all' as a component */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
58 { "*.all.*", TRUE },
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
59 { "all.*", TRUE },
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
60 { "*.ctl", TRUE }, /* 'ctl' as a component */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
61 { "*.ctl.*", TRUE },
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
62 { "ctl.*", TRUE }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
63 };
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
64
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
65 struct
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
66 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
67 FILE* in; /* Receiving socket from server */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
68 FILE* out; /* Sending socket to server */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
69 Str lastCmd; /* Last command line */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
70 Str lastStat; /* Response from server to last command */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
71 Str grp; /* Selected group */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
72 int rmtFirst; /* First article of current group at server */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
73 int rmtLast; /* Last article of current group at server */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
74 Bool auth; /* Authetication already done? */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
75 Str serv; /* Remote server name */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
76 } client = { NULL, NULL, "", "", "", 1, 0, FALSE, "" };
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
77
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
78 static void
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
79 logBreakDown( void )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
80 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
81 Log_err( "Connection to remote server lost "
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
82 "(article numbers could be inconsistent)" );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
83 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
84
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
85 static Bool
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
86 getLn( Str line )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
87 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
88 Bool r;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
89
144
8b9366fc1361 [svn] Added timeout to Prt_getLn to avoid Noffle hanging if the
enz
parents: 130
diff changeset
90 r = Prt_getLn( line, client.in, Cfg_connectTimeout() );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
91 if ( ! r )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
92 logBreakDown();
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
93 return r;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
94 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
95
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
96 static Bool
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
97 getTxtLn( Str line, Bool *err )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
98 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
99 Bool r;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
100
144
8b9366fc1361 [svn] Added timeout to Prt_getLn to avoid Noffle hanging if the
enz
parents: 130
diff changeset
101 r = Prt_getTxtLn( line, err, client.in, Cfg_connectTimeout() );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
102 if ( *err )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
103 logBreakDown();
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
104 return r;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
105 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
106
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
107 static void
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
108 putTxtBuf( const char *buf )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
109 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
110 Prt_putTxtBuf( buf, client.out );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
111 fflush( client.out );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
112 Log_dbg( "[S FLUSH]" );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
113 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
114
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
115 static void
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
116 putEndOfTxt( void )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
117 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
118 Prt_putEndOfTxt( client.out );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
119 fflush( client.out );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
120 Log_dbg( "[S FLUSH]" );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
121 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
122
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
123 static Bool
157
976ff791c7ec [svn] Extract common code from putCmd and putCmdNoFlush,
enz
parents: 144
diff changeset
124 putCmdLn( const char *line )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
125 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
126 Bool err;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
127 unsigned int n;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
128
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
129 strcpy( client.lastCmd, line );
157
976ff791c7ec [svn] Extract common code from putCmd and putCmdNoFlush,
enz
parents: 144
diff changeset
130 strcpy( client.lastStat, "[no status available]" );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
131 Log_dbg( "[S] %s", line );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
132 n = fprintf( client.out, "%s\r\n", line );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
133 err = ( n != strlen( line ) + 2 );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
134 if ( err )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
135 logBreakDown();;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
136 return ! err;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
137 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
138
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
139 static Bool
157
976ff791c7ec [svn] Extract common code from putCmd and putCmdNoFlush,
enz
parents: 144
diff changeset
140 putCmd( const char *fmt, ... )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
141 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
142 Str line;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
143 va_list ap;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
144
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
145 va_start( ap, fmt );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
146 vsnprintf( line, MAXCHAR, fmt, ap );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
147 va_end( ap );
157
976ff791c7ec [svn] Extract common code from putCmd and putCmdNoFlush,
enz
parents: 144
diff changeset
148 if ( ! putCmdLn( line ) )
976ff791c7ec [svn] Extract common code from putCmd and putCmdNoFlush,
enz
parents: 144
diff changeset
149 return FALSE;
976ff791c7ec [svn] Extract common code from putCmd and putCmdNoFlush,
enz
parents: 144
diff changeset
150 fflush( client.out );
976ff791c7ec [svn] Extract common code from putCmd and putCmdNoFlush,
enz
parents: 144
diff changeset
151 Log_dbg( "[S FLUSH]" );
976ff791c7ec [svn] Extract common code from putCmd and putCmdNoFlush,
enz
parents: 144
diff changeset
152 return TRUE;
976ff791c7ec [svn] Extract common code from putCmd and putCmdNoFlush,
enz
parents: 144
diff changeset
153 }
976ff791c7ec [svn] Extract common code from putCmd and putCmdNoFlush,
enz
parents: 144
diff changeset
154
976ff791c7ec [svn] Extract common code from putCmd and putCmdNoFlush,
enz
parents: 144
diff changeset
155 static Bool
976ff791c7ec [svn] Extract common code from putCmd and putCmdNoFlush,
enz
parents: 144
diff changeset
156 putCmdNoFlush( const char *fmt, ... )
976ff791c7ec [svn] Extract common code from putCmd and putCmdNoFlush,
enz
parents: 144
diff changeset
157 {
976ff791c7ec [svn] Extract common code from putCmd and putCmdNoFlush,
enz
parents: 144
diff changeset
158 Str line;
976ff791c7ec [svn] Extract common code from putCmd and putCmdNoFlush,
enz
parents: 144
diff changeset
159 va_list ap;
976ff791c7ec [svn] Extract common code from putCmd and putCmdNoFlush,
enz
parents: 144
diff changeset
160
976ff791c7ec [svn] Extract common code from putCmd and putCmdNoFlush,
enz
parents: 144
diff changeset
161 va_start( ap, fmt );
976ff791c7ec [svn] Extract common code from putCmd and putCmdNoFlush,
enz
parents: 144
diff changeset
162 vsnprintf( line, MAXCHAR, fmt, ap );
976ff791c7ec [svn] Extract common code from putCmd and putCmdNoFlush,
enz
parents: 144
diff changeset
163 va_end( ap );
976ff791c7ec [svn] Extract common code from putCmd and putCmdNoFlush,
enz
parents: 144
diff changeset
164 return putCmdLn( line );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
165 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
166
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
167 static int getStat( void );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
168
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
169 static int
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
170 performAuth( void )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
171 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
172 int stat;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
173 Str user, pass;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
174
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
175 Cfg_authInfo( client.serv, user, pass );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
176 if ( strcmp( user, "" ) == 0 )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
177 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
178 Log_err( "No username for authentication set" );
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
179 return STAT_AUTH_REQUIRED;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
180 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
181 putCmd( "AUTHINFO USER %s", user );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
182 stat = getStat();
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
183 if ( stat == STAT_AUTH_ACCEPTED )
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
184 return stat;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
185 else if ( stat != STAT_MORE_AUTH_REQUIRED )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
186 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
187 Log_err( "Username rejected. Server stat: %s", client.lastStat );
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
188 return stat;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
189 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
190 if ( strcmp( pass, "" ) == 0 )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
191 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
192 Log_err( "No password for authentication set" );
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
193 return STAT_AUTH_REQUIRED;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
194 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
195 putCmd( "AUTHINFO PASS %s", pass );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
196 stat = getStat();
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
197 if ( stat != STAT_AUTH_ACCEPTED )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
198 Log_err( "Password rejected. Server status: %s", client.lastStat );
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
199 return stat;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
200 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
201
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
202 static int
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
203 getStat( void )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
204 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
205 int result;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
206 Str lastCmd;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
207
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
208 if ( ! getLn( client.lastStat ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
209 result = STAT_PROGRAM_FAULT;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
210 else if ( sscanf( client.lastStat, "%d", &result ) != 1 )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
211 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
212 Log_err( "Invalid server status: %s", client.lastStat );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
213 result = STAT_PROGRAM_FAULT;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
214 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
215 if ( result == STAT_AUTH_REQUIRED && ! client.auth )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
216 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
217 client.auth = TRUE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
218 strcpy( lastCmd, client.lastCmd );
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
219 result = performAuth();
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
220 if ( result == STAT_AUTH_ACCEPTED )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
221 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
222 putCmd( lastCmd );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
223 return getStat();
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
224 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
225 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
226 return result;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
227 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
228
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
229 static void
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
230 connectAlarm( int sig )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
231 {
74
c7df2cc65cc1 [svn] Introduce UNUSED(x) macro
bears
parents: 71
diff changeset
232 UNUSED( sig );
c7df2cc65cc1 [svn] Introduce UNUSED(x) macro
bears
parents: 71
diff changeset
233
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
234 return;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
235 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
236
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
237 static Bool
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
238 connectWithTimeout( int sock, const struct sockaddr *servAddr,
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
239 socklen_t addrLen )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
240 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
241 sig_t oldHandler;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
242 int r, to;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
243
164
94f2e5607772 [svn] * src/client.c,src/protocol.c,src/util.h,src/util.c: Common up
bears
parents: 157
diff changeset
244 oldHandler = Utl_installSignalHandler( SIGALRM, connectAlarm );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
245 if ( oldHandler == SIG_ERR )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
246 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
247 Log_err( "client.c:connectWithTimeout: signal failed." );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
248 return FALSE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
249 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
250 to = Cfg_connectTimeout();
74
c7df2cc65cc1 [svn] Introduce UNUSED(x) macro
bears
parents: 71
diff changeset
251 if ( alarm( ( unsigned int ) to ) != 0 )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
252 Log_err( "client.c:connectWithTimeout: Alarm was already set." );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
253 r = connect( sock, servAddr, addrLen );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
254 alarm( 0 );
164
94f2e5607772 [svn] * src/client.c,src/protocol.c,src/util.h,src/util.c: Common up
bears
parents: 157
diff changeset
255 Utl_installSignalHandler( SIGALRM, oldHandler );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
256 return ( r >= 0 );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
257 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
258
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
259 static DynStr *
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
260 collectTxt( void )
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
261 {
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
262 DynStr *res;
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
263 Str line;
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
264 Bool err;
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
265
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
266 res = new_DynStr(2048);
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
267 if ( res == NULL )
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
268 return NULL;
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
269
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
270 while ( getTxtLn( line, &err ) && ! err )
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
271 DynStr_appLn( res, line );
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
272
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
273 if ( err )
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
274 {
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
275 del_DynStr( res );
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
276 return NULL;
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
277 }
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
278 else
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
279 return res;
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
280 }
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
281
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
282 Bool
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
283 Client_connect( const char *serv )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
284 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
285 unsigned short int port;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
286 int sock, i;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
287 unsigned int stat;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
288 struct hostent *hp;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
289 char *pStart, *pColon;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
290 Str host, s;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
291 struct sockaddr_in sIn;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
292
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
293 ASSERT( client.in == NULL && client.out == NULL );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
294 client.auth = FALSE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
295 Utl_cpyStr( s, serv );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
296 pStart = Utl_stripWhiteSpace( s );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
297 pColon = strstr( pStart, ":" );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
298 if ( pColon == NULL )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
299 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
300 strcpy( host, pStart );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
301 port = 119;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
302 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
303 else
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
304 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
305 *pColon = '\0';
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
306 strcpy( host, pStart );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
307 if ( sscanf( pColon + 1, "%hi", &port ) != 1 )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
308 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
309 Log_err( "Syntax error in server name: '%s'", serv );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
310 return FALSE;;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
311 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
312 if ( port <= 0 || port > 65535 )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
313 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
314 Log_err( "Invalid port number %hi. Must be in [1, 65535]", port );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
315 return FALSE;;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
316 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
317 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
318 memset( (void *)&sIn, 0, sizeof( sIn ) );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
319 hp = gethostbyname( host );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
320 if ( hp )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
321 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
322 for ( i = 0; (hp->h_addr_list)[ i ]; ++i )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
323 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
324 sIn.sin_family = hp->h_addrtype;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
325 sIn.sin_port = htons( port );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
326 sIn.sin_addr = *( (struct in_addr *)hp->h_addr_list[ i ] );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
327 sock = socket( AF_INET, SOCK_STREAM, 0 );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
328 if ( sock < 0 )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
329 break;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
330 if ( ! connectWithTimeout( sock, (struct sockaddr *)&sIn,
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
331 sizeof( sIn ) ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
332 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
333 close( sock );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
334 break;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
335 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
336 if ( ! ( client.out = fdopen( sock, "w" ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
337 || ! ( client.in = fdopen( dup( sock ), "r" ) ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
338 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
339 if ( client.out != NULL )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
340 fclose( client.out );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
341 close( sock );
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
342 client.in = client.out = NULL;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
343 break;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
344 }
172
0ce333d046b9 [svn] Fix bug. Server name was not yet initialized
enz
parents: 164
diff changeset
345 Utl_cpyStr( client.serv, serv );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
346 stat = getStat();
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
347 if ( stat == STAT_READY_POST_ALLOW ||
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
348 stat == STAT_READY_NO_POST_ALLOW )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
349 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
350 /* INN needs a MODE READER before it will permit POST. */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
351 putCmd( "MODE READER" );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
352 stat = getStat();
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
353 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
354 switch( stat ) {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
355 case STAT_READY_POST_ALLOW:
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
356 case STAT_READY_NO_POST_ALLOW:
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
357 Log_inf( "Connected to %s:%d",
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
358 inet_ntoa( sIn.sin_addr ), port );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
359 return TRUE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
360 default:
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
361 Log_err( "Bad server stat %d", stat );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
362 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
363 shutdown( fileno( client.out ), 0 );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
364 fclose( client.in );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
365 fclose( client.out );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
366 close( sock );
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
367 client.in = client.out = NULL;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
368 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
369 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
370 return FALSE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
371 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
372
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
373 static Bool
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
374 isGetGroup( const char *name )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
375 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
376 GroupEnum *ge;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
377 Bool emptyList;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
378 const char *pattern;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
379
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
380 emptyList = TRUE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
381 ge = new_GetGrEn( client.serv );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
382 while ( ( pattern = GrEn_next( ge ) ) != NULL )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
383 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
384 emptyList = FALSE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
385 if ( Wld_match( name, pattern ) )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
386 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
387 del_GrEn( ge );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
388 return TRUE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
389 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
390 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
391
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
392 del_GrEn( ge );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
393 return emptyList;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
394 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
395
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
396 static Bool
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
397 isOmitGroup( const char *name )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
398 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
399 GroupEnum *ge;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
400 const char *pattern;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
401
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
402 ge = new_OmitGrEn( client.serv );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
403 while ( ( pattern = GrEn_next( ge ) ) != NULL )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
404 if ( Wld_match( name, pattern ) )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
405 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
406 del_GrEn( ge );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
407 return TRUE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
408 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
409
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
410 del_GrEn( ge );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
411 return FALSE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
412 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
413
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
414 static Bool
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
415 isForbiddenGroupName( const char *name )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
416 {
58
b4e6f7f96135 [svn] Add some intermediate variables for easier debugging in needsMark().
enz
parents: 57
diff changeset
417 size_t i;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
418
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
419 for ( i = 0;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
420 i < sizeof( forbiddenGroupNames ) /
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
421 sizeof( struct ForbiddenGroupName );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
422 i++ )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
423 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
424 /* Negate result of Wld_match to ensure it is 1 or 0. */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
425 if ( forbiddenGroupNames[i].match !=
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
426 ( ! Wld_match( name, forbiddenGroupNames[i].pattern ) ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
427 return TRUE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
428 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
429
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
430 return FALSE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
431 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
432
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
433 static void
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
434 processGrps( const char *lines, Bool noServerPattern )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
435 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
436 char postAllow;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
437 int first, last;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
438 Str grp, line, file;
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
439 Bool groupupdate;
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
440
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
441 ASSERT( ! Lock_gotLock() );
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
442 if ( ! Lock_openDatabases() )
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
443 return;
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
444
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
445 groupupdate = FALSE;
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
446 while ( ( lines = Utl_getLn( line, lines) ) != NULL )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
447 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
448 if ( sscanf( line, "%s %d %d %c",
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
449 grp, &last, &first, &postAllow ) != 4 )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
450 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
451 Log_err( "Unknown reply to LIST or NEWGROUPS: %s", line );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
452 continue;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
453 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
454 if ( isForbiddenGroupName( grp ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
455 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
456 Log_inf( "Group %s forbidden", grp );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
457 continue;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
458 }
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
459 if ( noServerPattern && ! isGetGroup( grp ) )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
460 continue;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
461 if ( isOmitGroup( grp ) )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
462 continue;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
463 if ( ! Grp_exists( grp ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
464 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
465 Log_inf( "Registering new group '%s'", grp );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
466 Grp_create( grp );
48
21d3102dbc37 [svn] Revert setting of initial article number
bears
parents: 43
diff changeset
467 /* Start local numbering with remote first number to avoid
21d3102dbc37 [svn] Revert setting of initial article number
bears
parents: 43
diff changeset
468 new numbering at the readers if noffle is re-installed */
21d3102dbc37 [svn] Revert setting of initial article number
bears
parents: 43
diff changeset
469 if ( first != 0 )
21d3102dbc37 [svn] Revert setting of initial article number
bears
parents: 43
diff changeset
470 Grp_setFirstLast( grp, first, first - 1 );
21d3102dbc37 [svn] Revert setting of initial article number
bears
parents: 43
diff changeset
471 else
21d3102dbc37 [svn] Revert setting of initial article number
bears
parents: 43
diff changeset
472 Grp_setFirstLast( grp, 1, 0 );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
473 Grp_setServ( grp, client.serv );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
474 Grp_setPostAllow( grp, postAllow );
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
475 groupupdate = TRUE;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
476 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
477 else
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
478 {
61
adf0af5152f7 [svn] Renamed some variables and function names, because they caused compiler
enz
parents: 58
diff changeset
479 if ( Cfg_servIsPreferential( client.serv, Grp_server( grp ) ) )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
480 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
481 Log_inf( "Changing server for '%s': '%s'->'%s'",
61
adf0af5152f7 [svn] Renamed some variables and function names, because they caused compiler
enz
parents: 58
diff changeset
482 grp, Grp_server( grp ), client.serv );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
483 Grp_setServ( grp, client.serv );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
484 Grp_setRmtNext( grp, first );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
485 Grp_setPostAllow( grp, postAllow );
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
486 groupupdate = TRUE;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
487 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
488 else
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
489 Log_dbg( "Group %s is already fetched from %s",
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
490 grp, Grp_server( grp ) );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
491 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
492 }
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
493
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
494 snprintf( file, MAXCHAR, "%s/lastupdate.%s",
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
495 Cfg_spoolDir(), client.serv );
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
496 Utl_stamp( file );
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
497 if ( groupupdate )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
498 {
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
499 snprintf( file, MAXCHAR, "%s/groupinfo.lastupdate",
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
500 Cfg_spoolDir() );
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
501 Utl_stamp( file );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
502 }
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
503 Lock_closeDatabases();
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
504 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
505
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
506 void
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
507 Client_disconnect( void )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
508 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
509 if ( putCmd( "QUIT" ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
510 getStat();
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
511 fclose( client.in );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
512 fclose( client.out );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
513 client.in = client.out = NULL;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
514 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
515
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
516 static Bool
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
517 doGetGrps( const char *pattern, Bool *noServerPattern )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
518 {
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
519 Str cmd;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
520 int stat;
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
521 DynStr *response;
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
522
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
523 Utl_cpyStr( cmd, "LIST ACTIVE" );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
524 if ( pattern[ 0 ] != '\0' )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
525 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
526 Utl_catStr( cmd, " " );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
527 Utl_catStr( cmd, pattern );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
528 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
529
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
530 *noServerPattern = FALSE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
531 if ( ! putCmd( cmd ) )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
532 return FALSE;
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
533 stat = getStat();
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
534 if ( stat == STAT_PROGRAM_FAULT )
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
535 return FALSE;
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
536
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
537 /*
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
538 * Try LIST instead of LIST ACTIVE in case server doesn't
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
539 * support LIST ACTIVE.
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
540 */
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
541 if ( pattern[ 0 ] != '\0' && stat != STAT_GRPS_FOLLOW )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
542 {
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
543 *noServerPattern = TRUE;
130
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
544 if ( ! putCmd( "LIST" ) )
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
545 return FALSE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
546 stat = getStat();
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
547 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
548 if ( stat != STAT_GRPS_FOLLOW )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
549 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
550 Log_err( "%s failed: %s", cmd, client.lastStat );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
551 return FALSE;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
552 }
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
553
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
554 response = collectTxt();
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
555 if ( response == NULL )
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
556 return FALSE;
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
557
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
558 processGrps( DynStr_str( response ), *noServerPattern );
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
559 del_DynStr( response );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
560 return TRUE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
561 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
562
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
563 Bool
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
564 Client_getGrps( void )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
565 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
566 GroupEnum *ge;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
567 const char *pattern;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
568 Bool doneOne, noServerPattern, res;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
569
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
570 Log_inf( "Getting groups" );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
571
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
572 doneOne = FALSE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
573 res = TRUE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
574 ge = new_GetGrEn( client.serv );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
575 while ( res && ( pattern = GrEn_next( ge ) ) != NULL )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
576 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
577 res = doGetGrps( pattern, &noServerPattern );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
578 doneOne = TRUE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
579 if ( noServerPattern )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
580 break;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
581 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
582
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
583 if ( ! doneOne )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
584 res = doGetGrps( "", &noServerPattern );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
585
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
586 del_GrEn( ge );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
587 return res;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
588 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
589
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
590 static Bool
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
591 doGetDsc( const char *pattern, Bool *noServerPattern )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
592 {
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
593 Str name, line, dsc, cmd;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
594 int stat;
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
595 DynStr *response;
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
596 const char *lines;
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
597 Bool result;
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
598
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
599 ASSERT( ! Lock_gotLock() );
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
600 Utl_cpyStr( cmd, "LIST NEWSGROUPS" );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
601 if ( pattern[ 0 ] != '\0' )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
602 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
603 Utl_catStr( cmd, " " );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
604 Utl_catStr( cmd, pattern );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
605 }
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
606
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
607 *noServerPattern = FALSE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
608 if ( ! putCmd( cmd ) )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
609 return FALSE;
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
610 stat = getStat();
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
611 if ( stat == STAT_PROGRAM_FAULT )
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
612 return FALSE;
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
613
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
614 /* Try without pattern in case server doesn't support patterns. */
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
615 if ( pattern[ 0 ] != '\0' && stat != STAT_GRPS_FOLLOW )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
616 {
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
617 *noServerPattern = TRUE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
618 if ( !putCmd( "LIST NEWSGROUPS" ) )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
619 return FALSE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
620 stat = getStat();
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
621 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
622 if ( stat != STAT_GRPS_FOLLOW )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
623 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
624 Log_err( "%s failed: %s", cmd, client.lastStat );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
625 return FALSE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
626 }
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
627
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
628 response = collectTxt();
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
629 if ( response == NULL )
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
630 return FALSE;
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
631
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
632 if ( ! Lock_openDatabases() )
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
633 return FALSE;
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
634
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
635 lines = DynStr_str( response );
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
636 result = TRUE;
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
637 while ( ( lines = Utl_getLn( line, lines) ) != NULL )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
638 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
639 if ( sscanf( line, "%s", name ) != 1 )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
640 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
641 Log_err( "Unknown reply to LIST NEWSGROUPS: %s", line );
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
642 result = FALSE;
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
643 break;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
644 }
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
645 if ( *noServerPattern && ! isGetGroup( name ) )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
646 continue;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
647 strcpy( dsc, Utl_restOfLn( line, 1 ) );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
648 if ( Grp_exists( name ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
649 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
650 Log_dbg( "Description of %s: %s", name, dsc );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
651 Grp_setDsc( name, dsc );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
652 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
653 }
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
654 Lock_closeDatabases();
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
655 del_DynStr( response );
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
656 return result;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
657 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
658
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
659 Bool
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
660 Client_getDsc( void )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
661 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
662 GroupEnum *ge;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
663 const char *pattern;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
664 Bool doneOne, noServerPattern, res;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
665
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
666 Log_inf( "Querying group descriptions" );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
667
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
668 doneOne = FALSE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
669 res = TRUE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
670 ge = new_GetGrEn( client.serv );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
671 while ( res && ( pattern = GrEn_next( ge ) ) != NULL )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
672 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
673 res = doGetDsc( pattern, &noServerPattern );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
674 doneOne = TRUE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
675 if ( noServerPattern )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
676 break;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
677 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
678
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
679 if ( res && ! doneOne )
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
680 res = doGetDsc( "", &noServerPattern );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
681
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
682 del_GrEn( ge );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
683 return res;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
684 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
685
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
686 Bool
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
687 Client_getNewgrps( const time_t *lastTime )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
688 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
689 Str s;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
690 const char *p;
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
691 DynStr *response;
182
a43a528cfbe7 [svn] * src/client.c: Only return failure getting NEWGROUPS if the connection
bears
parents: 180
diff changeset
692 int stat;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
693
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
694 ASSERT( *lastTime > 0 );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
695 strftime( s, MAXCHAR, "%Y%m%d %H%M00", gmtime( lastTime ) );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
696 /*
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
697 Do not use century for working with old server software until 2000.
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
698 According to newest IETF draft, this is still valid after 2000.
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
699 (directly using %y in fmt string causes a Y2K compiler warning)
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
700 */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
701 p = s + 2;
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
702 if ( ! putCmd( "NEWGROUPS %s GMT", p ) )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
703 return FALSE;
182
a43a528cfbe7 [svn] * src/client.c: Only return failure getting NEWGROUPS if the connection
bears
parents: 180
diff changeset
704 stat = getStat();
a43a528cfbe7 [svn] * src/client.c: Only return failure getting NEWGROUPS if the connection
bears
parents: 180
diff changeset
705 if ( stat != STAT_NEW_GRP_FOLLOW )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
706 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
707 Log_err( "NEWGROUPS command failed: %s", client.lastStat );
182
a43a528cfbe7 [svn] * src/client.c: Only return failure getting NEWGROUPS if the connection
bears
parents: 180
diff changeset
708
a43a528cfbe7 [svn] * src/client.c: Only return failure getting NEWGROUPS if the connection
bears
parents: 180
diff changeset
709 /*
a43a528cfbe7 [svn] * src/client.c: Only return failure getting NEWGROUPS if the connection
bears
parents: 180
diff changeset
710 * If NEWGROUPS fails, it isn't necessarily fatal. You can do
a43a528cfbe7 [svn] * src/client.c: Only return failure getting NEWGROUPS if the connection
bears
parents: 180
diff changeset
711 * a periodic noffle --query groups to refresh your group list.
a43a528cfbe7 [svn] * src/client.c: Only return failure getting NEWGROUPS if the connection
bears
parents: 180
diff changeset
712 * So only return failure here if the status indicates the link
a43a528cfbe7 [svn] * src/client.c: Only return failure getting NEWGROUPS if the connection
bears
parents: 180
diff changeset
713 * itself failed.
a43a528cfbe7 [svn] * src/client.c: Only return failure getting NEWGROUPS if the connection
bears
parents: 180
diff changeset
714 *
a43a528cfbe7 [svn] * src/client.c: Only return failure getting NEWGROUPS if the connection
bears
parents: 180
diff changeset
715 * In particular, older versions of NNTPcache have a Y2K bug that
a43a528cfbe7 [svn] * src/client.c: Only return failure getting NEWGROUPS if the connection
bears
parents: 180
diff changeset
716 * stops NEWGROUPS working.
a43a528cfbe7 [svn] * src/client.c: Only return failure getting NEWGROUPS if the connection
bears
parents: 180
diff changeset
717 */
a43a528cfbe7 [svn] * src/client.c: Only return failure getting NEWGROUPS if the connection
bears
parents: 180
diff changeset
718 return ( stat != STAT_PROGRAM_FAULT );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
719 }
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
720
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
721 response = collectTxt();
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
722 if ( response == NULL )
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
723 return FALSE;
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
724
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
725 processGrps( DynStr_str( response ), TRUE );
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
726 del_DynStr( response );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
727 return TRUE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
728 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
729
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
730 static const char *
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
731 readField( Str result, const char *p )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
732 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
733 size_t len;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
734 char *r;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
735
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
736 if ( ! p )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
737 return NULL;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
738 r = result;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
739 *r = '\0';
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
740 len = 0;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
741 while ( *p != '\t' && *p != '\n' )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
742 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
743 if ( ! *p )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
744 return p;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
745 *(r++) = *(p++);
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
746 ++len;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
747 if ( len >= MAXCHAR - 1 )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
748 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
749 *r = '\0';
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
750 Log_err( "Field in overview too long: %s", r );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
751 return ++p;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
752 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
753 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
754 *r = '\0';
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
755 return ++p;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
756 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
757
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
758 static Bool
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
759 parseOvLn( Str line, int *numb, Str subj, Str from,
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
760 Str date, Str msgId, Str ref, size_t *bytes, size_t *lines )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
761 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
762 const char *p;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
763 Str t;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
764
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
765 p = readField( t, line );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
766 if ( sscanf( t, "%d", numb ) != 1 )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
767 return FALSE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
768 p = readField( subj, p );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
769 p = readField( from, p );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
770 p = readField( date, p );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
771 p = readField( msgId, p );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
772 p = readField( ref, p );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
773 p = readField( t, p );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
774 *bytes = 0;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
775 *lines = 0;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
776 if ( sscanf( t, "%d", bytes ) != 1 )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
777 return TRUE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
778 p = readField( t, p );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
779 if ( sscanf( t, "%d", lines ) != 1 )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
780 return TRUE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
781 return TRUE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
782 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
783
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
784 static const char*
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
785 nextXref( const char *pXref, Str grp, int *numb )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
786 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
787 Str s;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
788 const char *pColon, *src;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
789 char *dst;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
790
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
791 src = pXref;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
792 while ( *src && isspace( *src ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
793 ++src;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
794 dst = s;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
795 while ( *src && ! isspace( *src ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
796 *(dst++) = *(src++);
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
797 *dst = '\0';
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
798 if ( strlen( s ) == 0 )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
799 return NULL;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
800 pColon = strstr( s, ":" );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
801 if ( ! pColon || sscanf( pColon + 1, "%d", numb ) != 1 )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
802 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
803 Log_err( "Corrupt Xref at position '%s'", pXref );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
804 return NULL;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
805 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
806 Utl_cpyStrN( grp, s, pColon - s );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
807 Log_dbg( "client.c: nextXref: grp '%s' numb %lu", grp, numb );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
808 return src;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
809 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
810
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
811 static Bool
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
812 needsMark( const char *ref )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
813 {
67
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
814 Bool interesting, result;
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
815 const char *msgId;
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
816 int status;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
817 time_t lastAccess, nowTime;
67
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
818 double threadFollowTime, secPerDay, maxTime, timeSinceLastAccess;
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
819 ItemList *itl;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
820
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
821 ASSERT( Lock_gotLock() );
67
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
822 Log_dbg( "Checking references '%s' for thread mode", ref );
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
823 result = FALSE;
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
824 itl = new_Itl( ref, " \t" );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
825 nowTime = time( NULL );
57
84e32c84666b [svn] add some intermediate variables for easier debugging
enz
parents: 54
diff changeset
826 threadFollowTime = (double)Cfg_threadFollowTime();
67
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
827 secPerDay = 24.0 * 3600.0;
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
828 maxTime = threadFollowTime * secPerDay;
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
829 Log_dbg( "Max time = %.0f", maxTime );
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
830 for ( msgId = Itl_first( itl ); msgId != NULL; msgId = Itl_next( itl ) )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
831 {
67
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
832 /*
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
833 References does not have to contain only Message IDs,
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
834 but often it does, so we look up every item in the database.
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
835 */
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
836 if ( Db_contains( msgId ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
837 {
61
adf0af5152f7 [svn] Renamed some variables and function names, because they caused compiler
enz
parents: 58
diff changeset
838 status = Db_status( msgId );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
839 lastAccess = Db_lastAccess( msgId );
61
adf0af5152f7 [svn] Renamed some variables and function names, because they caused compiler
enz
parents: 58
diff changeset
840 interesting = ( status & DB_INTERESTING );
67
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
841 timeSinceLastAccess = difftime( nowTime, lastAccess );
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
842 Log_dbg( "Msg ID '%s': since last access = %.0f, interesting = %s",
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
843 msgId, timeSinceLastAccess, ( interesting ? "y" : "n" ) );
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
844 if ( interesting && timeSinceLastAccess <= maxTime )
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
845 {
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
846 result = TRUE;
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
847 break;
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
848 }
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
849 }
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
850 else
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
851 {
71
6aa3a8eff5a9 [svn] Fixed bug introduced by last changes.
enz
parents: 67
diff changeset
852 Log_dbg( "MsgID '%s': not in database.", msgId );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
853 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
854 }
67
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
855 del_Itl( itl );
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
856 Log_dbg( "Article %s marking for download.",
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
857 ( result ? "needs" : "doesn't need" ) );
2e47992d7f5c [svn] Rewrote needsMark(): use itemlist.h, more debugging output.
enz
parents: 61
diff changeset
858 return result;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
859 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
860
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
861 static void
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
862 prepareEntry( Over *ov )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
863 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
864 Str g, t;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
865 const char *msgId, *p, *xref;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
866 int n;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
867
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
868 ASSERT( Lock_gotLock() );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
869 msgId = Ov_msgId( ov );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
870 if ( Pseudo_isGeneralInfo( msgId ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
871 Log_dbg( "Skipping general info '%s'", msgId );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
872 else if ( Db_contains( msgId ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
873 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
874 xref = Db_xref( msgId );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
875 Log_dbg( "Entry '%s' already in db with Xref '%s'", msgId, xref );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
876 p = nextXref( xref, g, &n );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
877 if ( p == NULL )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
878 Log_err( "Overview with no group in Xref '%s'", msgId );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
879 else
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
880 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
881 /* TODO: This code block seems unnessesary. Can we remove it? */
61
adf0af5152f7 [svn] Renamed some variables and function names, because they caused compiler
enz
parents: 58
diff changeset
882 if ( Cfg_servIsPreferential( client.serv, Grp_server( g ) ) )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
883 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
884 Log_dbg( "Changing first server for '%s' from '%s' to '%s'",
61
adf0af5152f7 [svn] Renamed some variables and function names, because they caused compiler
enz
parents: 58
diff changeset
885 msgId, Grp_server( g ), client.serv );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
886 snprintf( t, MAXCHAR, "%s:%d %s",
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
887 client.grp, Ov_numb( ov ), xref );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
888 Db_setXref( msgId, t );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
889 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
890 else
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
891 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
892 Log_dbg( "Adding '%s' to Xref of '%s'", g, msgId );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
893 snprintf( t, MAXCHAR, "%s %s:%d",
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
894 xref, client.grp, Ov_numb( ov ) );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
895 Db_setXref( msgId, t );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
896 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
897 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
898 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
899 else
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
900 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
901 Log_dbg( "Preparing '%s' in database", msgId );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
902 Db_prepareEntry( ov, client.grp, Ov_numb( ov ) );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
903 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
904 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
905
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
906 Bool
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
907 Client_getOver( const char *grp, int rmtFirst, int rmtLast, FetchMode mode )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
908 {
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
909 size_t nbytes, nlines;
130
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
910 int rmtNumb, groupsNumb, oldLast, cntMarked;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
911 Over *ov;
130
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
912 Str line, subj, from, date, msgId, ref, groups;
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
913 DynStr *response, *newsgroups;
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
914 const char *lines, *groupLines;
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
915 char *p;
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
916 FilterAction action;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
917
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
918 ASSERT( ! Lock_gotLock() );
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
919 ASSERT( strcmp( grp, "" ) != 0 );
130
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
920
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
921 /* Do we need the article Newsgroups: for filtering? */
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
922 if ( Flt_getNewsgroups() )
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
923 {
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
924 if ( ! putCmd( "XHDR Newsgroups %lu-%lu", rmtFirst, rmtLast ) )
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
925 return FALSE;
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
926 if ( getStat() != STAT_HEAD_FOLLOWS )
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
927 {
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
928 Log_err( "XHDR command failed: %s", client.lastStat );
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
929 return FALSE;
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
930 }
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
931
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
932 Log_dbg( "Requesting Newsgroups headers for remote %lu-%lu",
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
933 rmtFirst, rmtLast );
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
934
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
935 newsgroups = collectTxt();
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
936 if ( newsgroups == NULL )
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
937 return FALSE;
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
938
130
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
939 groupLines = DynStr_str( newsgroups );
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
940 }
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
941 else
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
942 {
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
943 groupLines = NULL;
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
944 newsgroups = NULL;
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
945 }
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
946
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
947 if ( ! putCmd( "XOVER %lu-%lu", rmtFirst, rmtLast ) )
130
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
948 {
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
949 del_DynStr( newsgroups );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
950 return FALSE;
130
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
951 }
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
952
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
953 if ( getStat() != STAT_OVERS_FOLLOW )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
954 {
130
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
955 del_DynStr( newsgroups );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
956 Log_err( "XOVER command failed: %s", client.lastStat );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
957 return FALSE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
958 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
959 Log_dbg( "Requesting overview for remote %lu-%lu", rmtFirst, rmtLast );
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
960
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
961 response = collectTxt();
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
962 if ( response == NULL )
130
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
963 {
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
964 del_DynStr( newsgroups );
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
965 return FALSE;
130
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
966 }
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
967
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
968 if ( ! Lock_openDatabases() )
130
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
969 {
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
970 del_DynStr( newsgroups );
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
971 del_DynStr( response );
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
972 return FALSE;
130
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
973 }
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
974
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
975 Cont_read( grp );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
976 oldLast = Cont_last();
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
977 cntMarked = 0;
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
978 lines = DynStr_str( response );
130
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
979 while ( ( lines = Utl_getLn( line, lines ) ) != NULL )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
980 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
981 if ( ! parseOvLn( line, &rmtNumb, subj, from, date, msgId, ref,
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
982 &nbytes, &nlines ) )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
983 Log_err( "Bad overview line: %s", line );
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
984 else if ( Cont_find( msgId ) >= 0 )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 74
diff changeset
985 Log_inf( "Already have '%s'", msgId );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
986 else
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
987 {
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
988 ov = new_Over( subj, from, date, msgId, ref, nbytes, nlines );
130
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
989 groupsNumb = 0;
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
990 p = NULL;
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
991 if ( groupLines != NULL )
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
992 {
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
993 do
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
994 {
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
995 groupLines = Utl_getLn( groups, groupLines );
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
996 groupsNumb = strtoul( groups, &p, 10 );
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
997 } while ( groupLines != NULL
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
998 && p > groups
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
999 && groupsNumb < rmtNumb );
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
1000 if ( groupsNumb != rmtNumb )
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
1001 p = NULL;
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
1002 }
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
1003
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
1004 action = Flt_checkFilters( grp, p, ov, mode );
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
1005 if ( action == FILTER_DISCARD )
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
1006 continue;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1007 Cont_app( ov );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1008 prepareEntry( ov );
130
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
1009 if ( action == FILTER_FULL
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
1010 || ( action == FILTER_THREAD && needsMark( ref ) ) )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1011 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1012 Req_add( client.serv, msgId );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1013 ++cntMarked;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1014 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1015 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1016 Grp_setRmtNext( client.grp, rmtNumb + 1 );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1017 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1018 if ( oldLast != Cont_last() )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1019 Log_inf( "Added %s %lu-%lu", client.grp, oldLast + 1, Cont_last() );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1020 Log_inf( "%u articles marked for download in %s", cntMarked, client.grp );
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1021 Cont_write();
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1022 Grp_setFirstLast( grp, Cont_first(), Cont_last() );
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1023 Lock_closeDatabases();
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1024 del_DynStr( response );
130
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
1025 del_DynStr( newsgroups );
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1026 return TRUE;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1027 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1028
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1029 static void
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1030 retrievingFailed( const char* msgId, const char *reason )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1031 {
61
adf0af5152f7 [svn] Renamed some variables and function names, because they caused compiler
enz
parents: 58
diff changeset
1032 int status;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1033
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1034 ASSERT( ! Lock_gotLock() );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1035 Log_err( "Retrieving of %s failed: %s", msgId, reason );
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1036 if ( ! Lock_openDatabases() )
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1037 return;
61
adf0af5152f7 [svn] Renamed some variables and function names, because they caused compiler
enz
parents: 58
diff changeset
1038 status = Db_status( msgId );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1039 Pseudo_retrievingFailed( msgId, reason );
61
adf0af5152f7 [svn] Renamed some variables and function names, because they caused compiler
enz
parents: 58
diff changeset
1040 Db_setStatus( msgId, status | DB_RETRIEVING_FAILED );
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1041 Lock_closeDatabases();
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1042 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1043
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1044 static Bool
120
05f50c1761d9 [svn] Applied patch from Matija Nalis:
enz
parents: 112
diff changeset
1045 retrieveAndStoreArt( const char *msgId, int artcnt, int artmax )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1046 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1047 Bool err;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1048 DynStr *s = NULL;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1049
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1050 ASSERT( ! Lock_gotLock() );
120
05f50c1761d9 [svn] Applied patch from Matija Nalis:
enz
parents: 112
diff changeset
1051 Log_inf( "[%d/%d] Retrieving %s", artcnt, artmax, msgId );
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1052 err = TRUE;
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1053
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1054 s = collectTxt();
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1055 if ( s != NULL )
95
c3312022e657 [svn] Observe Supersedes: header
bears
parents: 88
diff changeset
1056 {
c3312022e657 [svn] Observe Supersedes: header
bears
parents: 88
diff changeset
1057 const char *txt;
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1058
95
c3312022e657 [svn] Observe Supersedes: header
bears
parents: 88
diff changeset
1059 txt = DynStr_str( s );
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1060 if ( ! Lock_openDatabases() )
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1061 {
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1062 del_DynStr( s );
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1063 retrievingFailed( msgId, "Can't open message base" );
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1064 return FALSE;
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1065 }
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1066
95
c3312022e657 [svn] Observe Supersedes: header
bears
parents: 88
diff changeset
1067 err = ! Db_storeArt( msgId, txt );
c3312022e657 [svn] Observe Supersedes: header
bears
parents: 88
diff changeset
1068 if ( ! err )
c3312022e657 [svn] Observe Supersedes: header
bears
parents: 88
diff changeset
1069 {
102
38b0a1532a37 [svn] Only track remote message no when subscribed
bears
parents: 95
diff changeset
1070 Str supersedeIds;
38b0a1532a37 [svn] Only track remote message no when subscribed
bears
parents: 95
diff changeset
1071
38b0a1532a37 [svn] Only track remote message no when subscribed
bears
parents: 95
diff changeset
1072 if ( Prt_searchHeader( txt, "Supersedes", supersedeIds ) )
38b0a1532a37 [svn] Only track remote message no when subscribed
bears
parents: 95
diff changeset
1073 {
38b0a1532a37 [svn] Only track remote message no when subscribed
bears
parents: 95
diff changeset
1074 ItemList *ids;
103
f782184db8bc [svn] 1.0pre6 merge plus variable rename
bears
parents: 102
diff changeset
1075 const char *supersededMsgId;
95
c3312022e657 [svn] Observe Supersedes: header
bears
parents: 88
diff changeset
1076
102
38b0a1532a37 [svn] Only track remote message no when subscribed
bears
parents: 95
diff changeset
1077 ids = new_Itl( supersedeIds, " \n\t" );
103
f782184db8bc [svn] 1.0pre6 merge plus variable rename
bears
parents: 102
diff changeset
1078 for ( supersededMsgId = Itl_first( ids );
f782184db8bc [svn] 1.0pre6 merge plus variable rename
bears
parents: 102
diff changeset
1079 supersededMsgId != NULL;
f782184db8bc [svn] 1.0pre6 merge plus variable rename
bears
parents: 102
diff changeset
1080 supersededMsgId = Itl_next( ids ) )
f782184db8bc [svn] 1.0pre6 merge plus variable rename
bears
parents: 102
diff changeset
1081 Ctrl_cancel( supersededMsgId );
102
38b0a1532a37 [svn] Only track remote message no when subscribed
bears
parents: 95
diff changeset
1082 del_Itl( ids );
38b0a1532a37 [svn] Only track remote message no when subscribed
bears
parents: 95
diff changeset
1083 }
95
c3312022e657 [svn] Observe Supersedes: header
bears
parents: 88
diff changeset
1084 }
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1085 Lock_closeDatabases();
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1086 del_DynStr( s );
95
c3312022e657 [svn] Observe Supersedes: header
bears
parents: 88
diff changeset
1087 }
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1088 else
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1089 retrievingFailed( msgId, "Connection broke down" );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1090 return ! err;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1091 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1092
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1093 Bool
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1094 Client_retrieveArt( const char *msgId )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1095 {
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1096 Bool res = FALSE;
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1097
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1098 ASSERT( Lock_gotLock() );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1099 if ( ! Db_contains( msgId ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1100 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1101 Log_err( "Article '%s' not prepared in database. Skipping.", msgId );
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1102 return TRUE;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1103 }
61
adf0af5152f7 [svn] Renamed some variables and function names, because they caused compiler
enz
parents: 58
diff changeset
1104 if ( ! ( Db_status( msgId ) & DB_NOT_DOWNLOADED ) )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1105 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1106 Log_inf( "Article '%s' already retrieved. Skipping.", msgId );
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1107 return TRUE;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1108 }
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1109
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1110 Lock_closeDatabases();
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1111 if ( ! putCmd( "ARTICLE %s", msgId ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1112 retrievingFailed( msgId, "Connection broke down" );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1113 else if ( getStat() != STAT_ART_FOLLOWS )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1114 retrievingFailed( msgId, client.lastStat );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1115 else
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1116 res = retrieveAndStoreArt( msgId, 0, 0 );
164
94f2e5607772 [svn] * src/client.c,src/protocol.c,src/util.h,src/util.c: Common up
bears
parents: 157
diff changeset
1117 Lock_openDatabases();
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1118 return res;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1119 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1120
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1121 Bool
120
05f50c1761d9 [svn] Applied patch from Matija Nalis:
enz
parents: 112
diff changeset
1122 Client_retrieveArtList( const char *list, int *artcnt, int artmax )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1123 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1124 Str msgId;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1125 DynStr *s;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1126 const char *p;
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1127 Bool res;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1128
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1129 ASSERT( Lock_gotLock() );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1130 Log_inf( "Retrieving article list" );
58
b4e6f7f96135 [svn] Add some intermediate variables for easier debugging in needsMark().
enz
parents: 57
diff changeset
1131 s = new_DynStr( (int)strlen( list ) );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1132 p = list;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1133 while ( ( p = Utl_getLn( msgId, p ) ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1134 if ( ! Db_contains( msgId ) )
123
ec190bad201b [svn] Applied patch from M.Nalis for fixing a small problem with
enz
parents: 120
diff changeset
1135 Log_err( "[%d/%d] Skipping retrieving of %s (not prepared in database)",
ec190bad201b [svn] Applied patch from M.Nalis for fixing a small problem with
enz
parents: 120
diff changeset
1136 ++(*artcnt), artmax, msgId );
61
adf0af5152f7 [svn] Renamed some variables and function names, because they caused compiler
enz
parents: 58
diff changeset
1137 else if ( ! ( Db_status( msgId ) & DB_NOT_DOWNLOADED ) )
123
ec190bad201b [svn] Applied patch from M.Nalis for fixing a small problem with
enz
parents: 120
diff changeset
1138 Log_inf( "[%d/%d] Skipping %s (already retrieved)", ++(*artcnt), artmax, msgId );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1139 else if ( ! putCmdNoFlush( "ARTICLE %s", msgId ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1140 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1141 retrievingFailed( msgId, "Connection broke down" );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1142 del_DynStr( s );
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1143 return FALSE;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1144 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1145 else
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1146 DynStr_appLn( s, msgId );
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1147
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1148 Lock_closeDatabases();
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1149 fflush( client.out );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1150 Log_dbg( "[S FLUSH]" );
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1151
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1152 p = DynStr_str( s );
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1153 res = TRUE;
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1154 while ( res && ( p = Utl_getLn( msgId, p ) ) )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1155 {
183
c912e8288164 [svn] * src/client.c: Only bail out of fetching multiple articles if the
bears
parents: 182
diff changeset
1156 switch( getStat() )
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1157 {
183
c912e8288164 [svn] * src/client.c: Only bail out of fetching multiple articles if the
bears
parents: 182
diff changeset
1158 case STAT_ART_FOLLOWS:
c912e8288164 [svn] * src/client.c: Only bail out of fetching multiple articles if the
bears
parents: 182
diff changeset
1159 res = retrieveAndStoreArt( msgId, ++(*artcnt), artmax );
c912e8288164 [svn] * src/client.c: Only bail out of fetching multiple articles if the
bears
parents: 182
diff changeset
1160 break;
c912e8288164 [svn] * src/client.c: Only bail out of fetching multiple articles if the
bears
parents: 182
diff changeset
1161
c912e8288164 [svn] * src/client.c: Only bail out of fetching multiple articles if the
bears
parents: 182
diff changeset
1162 case STAT_PROGRAM_FAULT:
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1163 res = FALSE;
183
c912e8288164 [svn] * src/client.c: Only bail out of fetching multiple articles if the
bears
parents: 182
diff changeset
1164 /* Fall through */
c912e8288164 [svn] * src/client.c: Only bail out of fetching multiple articles if the
bears
parents: 182
diff changeset
1165
c912e8288164 [svn] * src/client.c: Only bail out of fetching multiple articles if the
bears
parents: 182
diff changeset
1166 default:
c912e8288164 [svn] * src/client.c: Only bail out of fetching multiple articles if the
bears
parents: 182
diff changeset
1167 retrievingFailed( msgId, client.lastStat );
c912e8288164 [svn] * src/client.c: Only bail out of fetching multiple articles if the
bears
parents: 182
diff changeset
1168 break;
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1169 }
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1170 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1171 del_DynStr( s );
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1172 Lock_openDatabases();
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1173 return res;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1174 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1175
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1176 Bool
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1177 Client_changeToGrp( const char* name )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1178 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1179 unsigned int stat;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1180 int estimatedNumb, first, last;
130
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
1181 Bool res;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1182
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1183 ASSERT( Lock_gotLock() );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1184 if ( ! Grp_exists( name ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1185 return FALSE;
130
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
1186 Lock_closeDatabases();
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
1187 res = putCmd( "GROUP %s", name );
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
1188 res = res && ( getStat() == STAT_GRP_SELECTED );
d6c006a27ffe [svn] Add article fetching and fix potential lock bug
bears
parents: 127
diff changeset
1189 if ( ! Lock_openDatabases() || ! res )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1190 return FALSE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1191 if ( sscanf( client.lastStat, "%u %d %d %d",
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1192 &stat, &estimatedNumb, &first, &last ) != 4 )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1193 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1194 Log_err( "Bad server response to GROUP: %s", client.lastStat );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1195 return FALSE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1196 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1197 Utl_cpyStr( client.grp, name );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1198 client.rmtFirst = first;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1199 client.rmtLast = last;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1200 return TRUE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1201 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1202
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1203 void
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1204 Client_rmtFirstLast( int *first, int *last )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1205 {
127
3c71e28c8eef [svn] Release-1-0 mergedocs/NOTES
bears
parents: 123
diff changeset
1206 ASSERT( Lock_gotLock() );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1207 *first = client.rmtFirst;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1208 *last = client.rmtLast;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1209 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1210
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1211 Bool
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1212 Client_postArt( const char *msgId, const char *artTxt, Str errStr )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1213 {
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1214 int stat;
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1215
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1216 errStr[0] = '\0';
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1217
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1218 if ( ! putCmd( "POST" ) )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1219 return FALSE;
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1220 stat = getStat();
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1221 if ( stat == STAT_PROGRAM_FAULT )
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1222 return FALSE;
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1223 else if ( stat != STAT_SEND_ART )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1224 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1225 Log_err( "Posting of %s not allowed: %s", msgId, client.lastStat );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1226 strcpy( errStr, client.lastStat );
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1227 return TRUE;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1228 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1229 putTxtBuf( artTxt );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1230 putEndOfTxt();
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1231 stat = getStat();
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1232 if ( stat == STAT_PROGRAM_FAULT )
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1233 return FALSE;
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1234 else if ( stat != STAT_POST_OK )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1235 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1236 Log_err( "Posting of %s failed: %s", msgId, client.lastStat );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1237 strcpy( errStr, client.lastStat );
180
09ca6eb5c7ff [svn] * TODO,src/client.c,src/client.h,src/fetch.c,src/fetch.h,src/noffle.c:
bears
parents: 172
diff changeset
1238 return TRUE;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1239 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1240 Log_inf( "Posted %s (Status: %s)", msgId, client.lastStat );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1241 return TRUE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1242 }