comparison src/post.c @ 43:2842f50feb55 noffle

[svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h, control.c, control.h, database.c, database.h, dynamicstring.c, dynamicstring.h, fetch.c, fetch.h, fetchlist.c, fetchlist.h, group.c, group.h, itemlist.c, itemlist.h, lock.c, lock.h, log.c, log.h, noffle.c, online.c, online.h, outgoing.c, outgoing.h, over.c, over.h, post.c, post.h, protocol.c, protocol.h, pseudo.c, pseudo.h, request.c, request.h, server.c, server.h, util.c, util.h, wildmat.c, wildmat.h: Moved files to the subdirectory src/ * Makefile.am, acconfig.h, configure.in, docs/Makefile.am, src/Makefile.am, Makefile.in, aclocal.m4, config.h.in, configure, install-sh, missing, mkinstalldirs, stamp-h.in, docs/Makefile.in, src/Makefile.in: Added files. They are used by aclocal, autoheader, autoconf and automake. * src/config.c, src/config.h: Renamed to configfile.c and configfile.h, because configure will generate a config.h file itself. * src/client.c, src/content.c, src/database.c, src/fetch.c, src/fetchlist.c, src/group.c, src/lock.c, src/noffle.c, src/online.c, src/outgoing.c, src/over.c, src/pseudo.c, src/request.c, src/server.c, src/util.c: Changed '#include "config.h"' to '#include "configfile.h"'. * src/client.c, src/content.c, src/database.c, src/fetch.c, src/fetchlist.c, src/group.c, src/lock.c, src/online.c, src/outgoing.c, src/post.c, src/protocol.c, src/request.c, src/server.c: Files now #include <config.h>. Added missing <stdio.h>. This removes the warnings about snprintf() not being declared. * Makefile: Removed. This is now generated by configure.
author uh1763
date Fri, 05 May 2000 22:45:56 +0100
parents
children 125d79c9e586
comparison
equal deleted inserted replaced
42:2467ff423c15 43:2842f50feb55
1 /*
2 post.c
3
4 $Id: post.c 49 2000-05-05 21:45:56Z uh1763 $
5 */
6
7 #if HAVE_CONFIG_H
8 #include <config.h>
9 #endif
10
11 #include <stdio.h>
12 #include "post.h"
13 #include <string.h>
14 #include "common.h"
15 #include "content.h"
16 #include "database.h"
17 #include "group.h"
18 #include "log.h"
19 #include "over.h"
20 #include "protocol.h"
21 #include "util.h"
22
23 struct OverInfo
24 {
25 Str subject;
26 Str from;
27 Str date;
28 Str msgId;
29 Str ref;
30 size_t bytes;
31 size_t lines;
32 };
33
34 struct Article
35 {
36 const char * text;
37 Bool posted;
38 struct OverInfo over;
39 };
40
41 static struct Article article = { NULL, FALSE };
42
43 static void
44 getOverInfo( struct OverInfo * o )
45 {
46 const char *p = article.text;
47 Str line, field, value;
48
49 o->bytes = strlen( p );
50
51 while( p != NULL )
52 {
53 p = Utl_getHeaderLn( line, p );
54 if ( line[ 0 ] == '\0' )
55 break;
56
57 /* Look for headers we need to stash. */
58 if ( Prt_getField( field, value, line ) )
59 {
60 if ( strcmp( field, "subject" ) == 0 )
61 Utl_cpyStr( o->subject, value );
62 else if ( strcmp ( field, "from" ) == 0 )
63 Utl_cpyStr( o->from, value );
64 else if ( strcmp ( field, "date" ) == 0 )
65 Utl_cpyStr( o->date, value );
66 else if ( strcmp ( field, "references" ) == 0 )
67 Utl_cpyStr( o->ref, value );
68 else if ( strcmp ( field, "message-id" ) == 0 )
69 Utl_cpyStr( o->msgId, value );
70 }
71 }
72
73 /* Move to start of body and count lines. */
74 for ( p++, o->lines = 0; *p != '\0'; p++ )
75 if ( *p == '\n' )
76 o->lines++;
77 }
78
79 /* Register an article for posting. */
80 Bool
81 Post_open( const char * text )
82 {
83 if ( article.text != NULL )
84 {
85 Log_err( "Busy article in Post_open." );
86 return FALSE;
87 }
88
89 memset( &article.over, 0, sizeof( article.over ) );
90 article.text = text;
91 getOverInfo( &article.over );
92
93 if ( Db_contains( article.over.msgId ) )
94 {
95 Log_err( "Duplicate article %s.", article.over.msgId );
96 return FALSE;
97 }
98
99 return TRUE;
100 }
101
102
103 /* Add the article to a group. */
104 Bool
105 Post_add ( const char * grp )
106 {
107 Over * over;
108 const char *msgId;
109
110 over = new_Over( article.over.subject,
111 article.over.from,
112 article.over.date,
113 article.over.msgId,
114 article.over.ref,
115 article.over.bytes,
116 article.over.lines );
117
118 msgId = article.over.msgId;
119
120 Cont_read( grp );
121 Cont_app( over );
122 Log_dbg( "Added message '%s' to group '%s'.", msgId, grp );
123
124 if ( !article.posted )
125 {
126 Log_inf( "Added '%s' to database.", msgId );
127 if ( ! Db_prepareEntry( over, Cont_grp(), Cont_last() )
128 || ! Db_storeArt ( msgId, article.text ) )
129 return FALSE;
130 article.posted = TRUE;
131 }
132 else
133 {
134 Str t;
135 const char *xref;
136
137 xref = Db_xref( msgId );
138 Log_dbg( "Adding '%s' to Xref of '%s'", grp, msgId );
139 snprintf( t, MAXCHAR, "%s %s:%i", xref, grp, Ov_numb( over ) );
140 Db_setXref( msgId, t );
141 }
142
143 Cont_write();
144 Grp_setFirstLast( Cont_grp(), Cont_first(), Cont_last() );
145 return TRUE;
146 }
147
148 /* Done with article - tidy up. */
149 void
150 Post_close( void )
151 {
152 article.text = NULL;
153 article.posted = FALSE;
154 }
155