1 /*  $Id: article.h 6647 2004-01-25 20:06:42Z rra $
2 **
3 **  The public interface to articles.
4 **
5 **  Written by James Brister <brister@vix.com>
6 **
7 **  The public interface to articles. The articles are implemented via
8 **  reference counting.  This interface provides the methods for getting the
9 **  contents of the article.
10 **
11 **  When an Article is created there's a chance that another copy of it
12 **  already exists.  For example if the Article is pulled out of a Tape for a
13 **  particular host it may already be in existance in some other host.  This
14 **  class will manage this situation to prevent multiple copies of the article
15 **  being in core.
16 */
17 
18 #if ! defined ( article_h__ )
19 #define article_h__
20 
21 #include <stdio.h>
22 
23 #include "misc.h"
24 
25 
26   /* Create a new Article object. FILENAME is the path of the file the */
27   /* article is in. MSGID is the news message id of the article */
28 Article newArticle (const char *filename, const char *msgid) ;
29 
30   /* delete the given article. Just decrements refcount and then FREEs if the
31      refcount is 0. */
32 void delArticle (Article article) ;
33 
34 void gPrintArticleInfo (FILE *fp, unsigned int indentAmt) ;
35 
36   /* print some debugging info about the article. */
37 void printArticleInfo (Article art, FILE *fp, unsigned int indentAmt) ;
38 
39   /* return true if this article's file still exists. */
40 bool artFileIsValid (Article article) ;
41 
42   /* return true if we have the article's contents (calling this may trigger
43      the reading off the disk). */
44 bool artContentsOk (Article article) ;
45 
46   /* increments reference count and returns a copy of article that can be
47      kept (or passed off to someone else) */
48 Article artTakeRef (Article article) ;
49 
50   /* return the pathname of the file the article is in. */
51 const char *artFileName (Article article) ;
52 
53   /* return a list of buffers suitable for giving to an endpoint. The return
54      value can (must) be given to freeBufferArray */
55 Buffer *artGetNntpBuffers (Article article) ;
56 
57   /* return the message id stoed in the article object */
58 const char *artMsgId (Article article) ;
59 
60   /* return size of the article */
61 int artSize (Article article) ;
62 
63   /* return the number of buffers that artGetNntpBuffers() would return. */
64 unsigned int artNntpBufferCount (Article article) ;
65 
66   /* tell the Article class to log (or not) missing articles as they occur. */
67 void artLogMissingArticles (bool val) ;
68 
69   /* if VAL is true, then when an article is read off disk the necesary
70      carriage returns are inserted instead of setting up iovec-style buffers
71      for writev. Useful for systems like solaris that have very small max
72      number of iovecs that writev can take. Must be called only once before
73      the first article is created.  */
74 void artBitFiddleContents (bool val) ;
75 
76   /* set the limit on the number of bytes in all articles (this is not a hard
77      limit). Can only be called one time before any articles are created. */
78 void artSetMaxBytesInUse (unsigned int val) ;
79 
80 #endif /* article_h__ */
81