Mercurial > noffle
view docs/INTERNALS @ 143:7400a8e9d5ba noffle
[svn] NEWS,src/client.c,src/protocol.c,src/protocol.h,src/server.c:
Added timeout to Prt_getLn to avoid Noffle hanging if the
connection breaks down during a fetch.
author | enz |
---|---|
date | Sat, 23 Sep 2000 11:37:01 +0100 |
parents | 9cf0d605465a |
children |
line wrap: on
line source
------------------------------------------------------------------------------- NOFFLE Internals ------------------------------------------------------------------------------- This document is, for the moment, a collection of jottings on aspects of Noffle internals.One day it might make it into something resembling documentation, but I wouldn't put your money on it. Use the Source, Luke! 1. Where do things get stored? Articles: Articles are held keyed by Message-ID in the articles database, articles.gdbm. This is handled by database.[hc]. Articles are marked with a status, indicating if they were only partially downloaded (think overview mode) or if something went wrong on retrieval. Groups: The list of groups known is held in the groups database, groupinfo.gdbm, keyed on group name. This holds the group first and last article numbers, the last article number read on the remote server, group creation and last access times, plus the group description, the name of the server from which the group is drawn and a flag indicating if posting to the group is allowed. Local groups are indicated as belonging to a special server. They are for the most part treated identically to remote groups (though the whole business of auto-subscribe and auto-unsubscribe obviously doesn't apply, and posting operates locally). The fetchlist (fetchlist.[hc]) holds the list of group names Noffle currently subscribes to, and the subscription mode. Subscribed groups may have a file with their name in the overview directory. This file - the overview file - contains details of the articles in the group that can currently be read from the server. Each entry in the file is an overview (over.[hc]), while a group overview file is handled by content.[hc]. If no articles are left in a group, the overview file is deleted. The Noffle server loads the overview for a group into memory when it needs to manipulate the group and uses its reckoning on the first and last article number from there on. This may not correspond with the first and last number given in the groups database entry. Typically, the database first and last entries are updated from the overview on completion of actions affecting the group. Outbound articles are placed in a directory under the Noffle spool 'outgoing' directory. Each is in its own file, named by the article Message-ID, in a directory with the name of the server. outgoing.[hc] handle tracking what outbound messages are queued and queueing new ones. When Noffle connects to the appropriate server, the message is posted on and the file removed. 2. Posting Posting to remote groups is straightforward; the article is placed in the outgoing queue, and will be read back from the server as part of collecting new messages for the group. The article is placed once only in the queue, regardless of the number of external groups, as it only needs to appear once on the remote server. Articles posted only to newsgroups unknown to Noffle are rejected. If the group is marked as 'can't post' ('n' in LIST ACTIVE) the post is rejected immediately. Note you can't have moderated local groups at the moment; you can have read-only ones, though. Control message are similarly passed on, unless the control is 'cancel' and the cancel can be done entirely locally because the article is still in the outgoing queue. Posts to local groups appear in the article database immediately. Control messages (control.[hc]) for local groups are honoured, though currently only 'cancel' does anything. Things get more complex when an article is cross-posted to a local and remote group. Essentially, both the above happen; if the remote server does not change the Message-ID, the local copy will be the definitive for both groups. Obviously if the remote server does change the Message-ID, Noffle will tread the article coming back from the server as a new one. post.[hc] holds the code for posting local articles. The posting code in post 1.0 Noffle should (i.e. I'll do it if time permits) be rearranged to provide one function to post (or reject) an article regardless of original source. This would hopefully make it clearer what happens during a post, and make it easy to add a command-line article post function, which could remove the necessity for Python or Perl intervention gateing mailing lists into local newsgroups. 3. Pseudo articles Noffle generates various pseudo articles itself (see pseudo.[hc]), to inform the user of changes of state or to give instruction. All but one are, in fact, done by generating and posting a regular article, but one is special; the general information article. The gen info article is the one shown when one tries to read from a currently unsubscribed (Noffle is not subscribed to it, that it) newsgroup. It is apparently present in every single group known to Noffle, but is faked; it never appears in the article database. LIST ACTIVE fakes the first and last article numbers for a group if it knows the group is not subscribed to (and not local), and entry to a group with the GROUP command will cause an overview to be added to the group overview in memory only. If the article is not read, the overview is lost unsaved when moving to the next group. Reading the article triggers stuff happening. If auto-subscribe is on, a pseudo article confirming subcription is posted and the group overview saved. Gen info articles are not normally saved in overviews, but to prevent them vanishing very suddenly their overview is saved with other articles in the group if they form part of the sequence of the group. In this case it will persist until the subscription confirm article expires. This will not stop another gen info being generated if (say) the group gets auto-unsubscribed.