Mercurial > noffle
comparison src/server.c @ 188:f1bacee93ca6 noffle
[svn] * src/client.c,src/client.h,src/fetch.c,src/noffle.c,src/server.c:
robustness - instead of retruning simple Passed/Failed statuses from
connection functions, return an integer status instead. This allows
Noffle to distinguish between a connection failure, an unrecoverable
protocol error and a recoverable problem. As a concrete instance, Noffle
will no longer abort the connection if a group is removed from the
upstream server. Also beef up error detection a bit.
* src/content.c: instead of overwriting the existing content file(s) when
updating - which leaves a window where Noffle is vulnerable to failure
which will leave the content file corrupted (yes, it happened to me),
write a new content file and rename it over the old file only when it
has been written and closed with no errors reported.
| author | bears |
|---|---|
| date | Wed, 12 Sep 2001 21:33:44 +0100 |
| parents | fed1334d766b |
| children | 28488e0e3630 |
comparison
equal
deleted
inserted
replaced
| 187:166008a80f03 | 188:f1bacee93ca6 |
|---|---|
| 1 /* | 1 /* |
| 2 server.c | 2 server.c |
| 3 | 3 |
| 4 $Id: server.c 300 2001-08-05 08:24:22Z bears $ | 4 $Id: server.c 307 2001-09-12 20:33:44Z bears $ |
| 5 */ | 5 */ |
| 6 | 6 |
| 7 #if HAVE_CONFIG_H | 7 #if HAVE_CONFIG_H |
| 8 #include <config.h> | 8 #include <config.h> |
| 9 #endif | 9 #endif |
| 392 | 392 |
| 393 static Bool | 393 static Bool |
| 394 retrieveArt( const char *msgId ) | 394 retrieveArt( const char *msgId ) |
| 395 { | 395 { |
| 396 Str s; | 396 Str s; |
| 397 int stat; | |
| 397 | 398 |
| 398 findServer( msgId, s ); | 399 findServer( msgId, s ); |
| 399 if ( strcmp( s, "(unknown)" ) == 0 | 400 if ( strcmp( s, "(unknown)" ) == 0 |
| 400 || strcmp( s, GRP_LOCAL_SERVER_NAME ) == 0 ) | 401 || strcmp( s, GRP_LOCAL_SERVER_NAME ) == 0 ) |
| 401 return FALSE; | 402 return FALSE; |
| 403 { | 404 { |
| 404 Log_inf( "Connection to server failed. Leaving online mode." ); | 405 Log_inf( "Connection to server failed. Leaving online mode." ); |
| 405 Online_set( FALSE ); | 406 Online_set( FALSE ); |
| 406 return FALSE; | 407 return FALSE; |
| 407 } | 408 } |
| 408 Client_retrieveArt( msgId ); | 409 stat = Client_retrieveArt( msgId ); |
| 409 Client_disconnect(); | 410 Client_disconnect(); |
| 411 if ( IS_FATAL( stat ) ) | |
| 412 { | |
| 413 Log_inf( "Server connection failed or newsbase problem. " | |
| 414 "Leaving online mode." ); | |
| 415 Online_set( FALSE ); | |
| 416 return FALSE; | |
| 417 } | |
| 410 return TRUE; | 418 return TRUE; |
| 411 } | 419 } |
| 412 | 420 |
| 413 static Bool | 421 static Bool |
| 414 checkNumb( int numb ) | 422 checkNumb( int numb ) |
