diff src/outgoing.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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/outgoing.c	Fri May 05 22:45:56 2000 +0100
@@ -0,0 +1,168 @@
+/*
+  outgoing.c
+
+  $Id: outgoing.c 49 2000-05-05 21:45:56Z uh1763 $
+*/
+
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "outgoing.h"
+
+#include <stdio.h>
+#include <dirent.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <time.h>
+#include <unistd.h>
+#include "configfile.h"
+#include "log.h"
+#include "util.h"
+
+struct Outgoing
+{
+    DIR *dir;
+    Str serv;
+} outgoing = { NULL, "" };
+
+static void
+fileOutgoing( Str file, const char *serv, const char *msgId )
+{
+    snprintf( file, MAXCHAR, "%s/outgoing/%s/%s",
+              Cfg_spoolDir(), serv, msgId );
+}
+
+static void
+createDir( const char *serv )
+{
+    Str dir;
+    int r;
+
+    snprintf( dir, MAXCHAR, "%s/outgoing/%s", Cfg_spoolDir(), serv );
+    r = mkdir( dir, 0755 );
+    if ( r != 0 )
+        Log_dbg( "mkdir: %s", strerror( errno ) );
+}
+
+Bool
+Out_add( const char *serv, const char *msgId, const DynStr *artTxt )
+{
+    Str file;
+    FILE *f;
+
+    fileOutgoing( file, serv, msgId );
+    if ( ! ( f = fopen( file, "w" ) ) )
+    {
+        createDir( serv );
+        if ( ! ( f = fopen( file, "w" ) ) )
+        {
+            Log_err( "Cannot open %s", file );
+            return FALSE;
+        }
+    }
+    fprintf( f, "%s", DynStr_str( artTxt ) );
+    fclose( f );
+    return TRUE;
+}
+
+Bool
+Out_first( const char *serv, Str msgId, DynStr *artTxt )
+{
+    Str file;
+    
+    snprintf( file, MAXCHAR, "%s/outgoing/%s", Cfg_spoolDir(), serv );
+    if ( ! ( outgoing.dir = opendir( file ) ) )
+    {
+        Log_dbg( "Cannot open %s", file );
+        return FALSE;
+    }
+    Utl_cpyStr( outgoing.serv, serv );
+    Out_next( NULL, NULL ); /* "."  */
+    Out_next( NULL, NULL ); /* ".." */
+    return Out_next( msgId, artTxt );
+}
+
+Bool
+Out_next( Str msgId, DynStr *artTxt )
+{
+    struct dirent *d;
+    FILE *f;
+    Str file, line;
+
+    ASSERT( outgoing.dir );
+    if ( ! ( d = readdir( outgoing.dir ) ) )
+    {
+        closedir( outgoing.dir );
+        outgoing.dir = NULL;
+        return FALSE;
+    }
+    if ( artTxt == NULL )
+        return ( d->d_name != NULL );
+    fileOutgoing( file, outgoing.serv, d->d_name );
+    if ( ! ( f = fopen( file, "r" ) ) )
+    {
+        Log_err( "Cannot open %s for read", file );
+        return FALSE;
+    }
+    DynStr_clear( artTxt );
+    while ( fgets( line, MAXCHAR, f ) )
+        DynStr_app( artTxt, line );
+    Utl_cpyStr( msgId, d->d_name );
+    fclose( f );
+    return TRUE;
+}
+
+void
+Out_remove( const char *serv, const char *msgId )
+{
+    Str file;
+
+    fileOutgoing( file, serv, msgId );
+    if ( unlink( file ) != 0 )
+        Log_err( "Cannot remove %s", file );
+}
+
+Bool
+Out_find( const char *msgId, Str server )
+{
+    Str servdir;
+    DIR *d;
+    struct dirent *entry;
+    Bool res;
+    
+    
+    snprintf( servdir, MAXCHAR, "%s/outgoing", Cfg_spoolDir() );
+    if ( ! ( d = opendir( servdir ) ) )
+    {
+        Log_dbg( "Cannot open %s", servdir );
+        return FALSE;
+    }
+
+    readdir( d );	/* '.' */
+    readdir( d );	/* '..' */
+
+    res = FALSE;
+    while ( ! res && ( entry = readdir( d ) ) != NULL )
+    {
+	Str file;
+	struct stat s;
+
+	fileOutgoing( file, entry->d_name, msgId );
+	if ( stat( file, &s ) == 0 )
+	{
+	    res = TRUE;
+	    Utl_cpyStr( server, entry->d_name );
+	}
+    }
+
+    closedir( d );
+    return res;
+}
+
+
+
+
+