Files
bongo/src/agents/queue/queue.h
T

148 lines
3.9 KiB
C

/****************************************************************************
* <Novell-copyright>
* Copyright (c) 2001 Novell, Inc. All Rights Reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of version 2 of the GNU General Public License
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, contact Novell, Inc.
*
* To contact Novell about this file by physical or electronic mail, you
* may find current contact information at www.novell.com.
* </Novell-copyright>
****************************************************************************/
#ifndef QUEUE_H
#define QUEUE_H
#include "queued.h"
#include "conf.h"
#define SPOOL_LOCK_ARRAY_SIZE 256
#define SPOOL_LOCK_IDARRAY_SIZE 64
typedef struct _QueuePushClient {
int port;
int queue;
unsigned long address;
unsigned long usageCount;
unsigned long errorCount;
unsigned char identifier[MDB_MAX_OBJECT_CHARS + 1];
} QueuePushClient;
typedef struct _Queue {
/* Queue IDs */
unsigned long queueID;
XplMutex queueIDLock;
struct {
XplSemaphore semaphores[SPOOL_LOCK_ARRAY_SIZE];
unsigned long *entryIDs;
} spoolLocks;
/* Queue agent management */
struct {
XplMutex lock;
int count;
int allocated;
QueuePushClient *array;
} pushClients;
BOOL pushClientsRegistered[8];
/* Worker threads */
/* FIXME: use a thread pool here */
XplSemaphore todo;
XplAtomic activeWorkers;
#if QUEUE_COMPLETE
XplAtomic maximumWorkers;
long defaultSequential;
long maxSequential;
long check;
#endif
BOOL restartNeeded;
BOOL flushNeeded;
/* Bounce management */
time_t lastBounce;
unsigned long bounceCount;
/* Statistics */
XplAtomic numServicedAgents;
XplAtomic queuedLocal;
XplAtomic localDeliveryFailed;
XplAtomic remoteDeliveryFailed;
XplAtomic totalSpam;
} MessageQueue;
extern MessageQueue Queue;
FILE * fopen_check(FILE **handle, char *path, char *mode, int line);
int fclose_check(FILE **handle, int line);
int unlink_check(char *path, int line);
int rename_check(const char *oldpath, const char *newpath, int line);
BOOL QueueInit(void);
void QueueShutdown(void);
int CreateQueueThreads(BOOL failed);
int CommandQaddm(void *param);
int CommandQaddq(void *param);
int CommandQabrt(void *param);
int CommandQbody(void *param);
int CommandQbraw(void *param);
int CommandQcopy(void *param);
int CommandQcrea(void *param);
int CommandQdele(void *param);
int CommandQdone(void *param);
int CommandQdspc(void *param);
int CommandQend(void *param);
int CommandQgrep(void *param);
int CommandQhead(void *param);
int CommandQinfo(void *param);
int CommandQmodFrom(void *param);
int CommandQmodFlags(void *param);
int CommandQmodLocal(void *param);
int CommandQmodMailbox(void *param);
int CommandQmodRaw(void *param);
int CommandQmodTo(void *param);
int CommandQmime(void *param);
int CommandQmove(void *param);
int CommandQrcp(void *param);
int CommandQretr(void *param);
int CommandQrts(void *param);
int CommandQrun(void *param);
int CommandQsql(void *param);
int CommandQsrchDomain(void *param);
int CommandQsrchHeader(void *param);
int CommandQsrchBody(void *param);
int CommandQsrchBraw(void *param);
int CommandQstorAddress(void *param);
int CommandQstorCal(void *param);
int CommandQstorFlags(void *param);
int CommandQstorFrom(void *param);
int CommandQstorLocal(void *param);
int CommandQstorMessage(void *param);
int CommandQstorRaw(void *param);
int CommandQstorTo(void *param);
int CommandQwait(void *param);
int CommandQflush(void *param);
#endif