/* 
 * Copyright (c) 2005-2006 NFG Net Facilities Group BV support@nfg.nl
 * pool.h
 *
 * definition of process pool function prototypes
 */

#ifndef POOL_H
#define POOL_H

#include "dbmail.h"

#define HARD_MAX_CHILDREN 300

#define STATE_NOOP -1
#define STATE_IDLE 0
#define STATE_CONNECTED 1
#define STATE_WAIT 2

#define SCOREBOARD_LOCK_FILE "/tmp/dbmail_scoreboard"

#define scoreboard_rdlck() set_lock(F_RDLCK)
#define scoreboard_wrlck() set_lock(F_WRLCK)
#define scoreboard_unlck() set_lock(F_UNLCK)

typedef struct {
	pid_t pid;
	time_t ctime;
	unsigned char status;
	unsigned long count;
	char client[128];
	char user[128];
} child_state_t;

typedef struct {
	unsigned int lock;
	serverConfig_t *conf;
	child_state_t child[HARD_MAX_CHILDREN];
} Scoreboard_t;


void scoreboard_new(serverConfig_t * conf);
void scoreboard_lock_new(void);
void scoreboard_release(pid_t pid);
void scoreboard_delete(void);
int child_register(void);
void child_reg_connected(void);
void child_reg_connected_client(const char *ip, const char *name);
void child_reg_connected_user(char *user);
void child_reg_disconnected(void);
void child_unregister(void);
int count_children(void);
int count_spare_children(void);
pid_t get_idle_spare(void);
int getKey(pid_t pid);

void manage_start_children(void);
void manage_restart_children(void);
void manage_spare_children(void);
void manage_stop_children(void);
void scoreboard_setup(void);
void scoreboard_conf_check(void);
void scoreboard_state(void);
void statefile_create(char *scoreFile);

#endif


syntax highlighted by Code2HTML, v. 0.9.1