X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=job.h;h=7246ef9bbf4cb8b61180a656ab4aa3632fe893e9;hb=4fe282310226fdfc4a5c7b9c4131e6e5ba96315f;hp=36e5c0dcdada4ead4585f6a3dd9d194098eb0378;hpb=cde61dd0b59b0f3f3b3afefafd045f8d75b32975;p=apps%2Fpfixtools.git diff --git a/job.h b/job.h index 36e5c0d..7246ef9 100644 --- a/job.h +++ b/job.h @@ -38,51 +38,39 @@ #include "mem.h" -enum job_state { +enum job_mode { JOB_IDLE = 0x00, JOB_READ = 0x01, JOB_WRITE = 0x02, - JOB_RDWR = 0x03, - JOB_CONN = 0x04, - JOB_LISTEN = 0x08, + JOB_RDWR = JOB_READ | JOB_WRITE, + JOB_LISTEN = 0x04, + JOB_CONN = 0x08, }; -enum smtp_state { - STATE_CONNECT, - STATE_HELO, /* or EHLO */ - STATE_MAIL, - STATE_RCPT, - STATE_DATE, - STATE_EOM, - STATE_VRFY, - STATE_ETRN, -}; - -typedef struct job_t job_t; typedef struct jpriv_t jpriv_t; - -struct job_t { - unsigned state : 6; - unsigned done : 1; - unsigned error : 1; +typedef struct job_t { + unsigned mode : 6; /* 4 are enough, 2 used as padding */ + unsigned done : 1; + unsigned error : 1; + unsigned state : 24; int fd; - void (*process)(job_t *); - void (*stop)(job_t *); + void (*process)(struct job_t *); + void (*stop)(struct job_t *); jpriv_t *jdata; -}; +} job_t; -static inline job_t *job_init(job_t *job) { - p_clear(job, 1); +static inline job_t *job_new(void) { + job_t *job = p_new(job_t, 1); job->fd = -1; return job; } -DO_NEW(job_t, job); -void job_release(job_t **job); -void job_update_state(job_t *job, int state); -job_t *job_accept(job_t *listener, int state); +void job_delete(job_t **job); + +void job_update_mode(job_t *job, int mode); +job_t *job_accept(job_t *listener, int mode); void job_initialize(void); void job_loop(void);