Home | History | Annotate | Line # | Download | only in qmqpd
      1 /*	$NetBSD: qmqpd_state.c,v 1.2 2017/02/14 01:16:47 christos Exp $	*/
      2 
      3 /*++
      4 /* NAME
      5 /*	qmqpd_state 3
      6 /* SUMMARY
      7 /*	Postfix QMQP server
      8 /* SYNOPSIS
      9 /*	#include "qmqpd.h"
     10 /*
     11 /*	QMQPD_STATE *qmqpd_state_alloc(stream)
     12 /*	VSTREAM *stream;
     13 /*
     14 /*	void	qmqpd_state_free(state)
     15 /*	QMQPD_STATE *state;
     16 /* DESCRIPTION
     17 /*	qmqpd_state_alloc() creates and initializes session context.
     18 /*
     19 /*	qmqpd_state_free() destroys session context.
     20 /*
     21 /*	Arguments:
     22 /* .IP stream
     23 /*	Stream connected to peer. The stream is not copied.
     24 /* DIAGNOSTICS
     25 /*	All errors are fatal.
     26 /* LICENSE
     27 /* .ad
     28 /* .fi
     29 /*	The Secure Mailer license must be distributed with this software.
     30 /* AUTHOR(S)
     31 /*	Wietse Venema
     32 /*	IBM T.J. Watson Research
     33 /*	P.O. Box 704
     34 /*	Yorktown Heights, NY 10598, USA
     35 /*--*/
     36 
     37 /* System library. */
     38 
     39 #include <sys_defs.h>
     40 #include <time.h>
     41 
     42 /* Utility library. */
     43 
     44 #include <mymalloc.h>
     45 #include <vstream.h>
     46 #include <vstring.h>
     47 
     48 /* Global library. */
     49 
     50 #include <mail_stream.h>
     51 #include <cleanup_user.h>
     52 #include <mail_proto.h>
     53 
     54 /* Application-specific. */
     55 
     56 #include <qmqpd.h>
     57 
     58 /* qmqpd_state_alloc - allocate and initialize session state */
     59 
     60 QMQPD_STATE *qmqpd_state_alloc(VSTREAM *stream)
     61 {
     62     QMQPD_STATE *state;
     63 
     64     state = (QMQPD_STATE *) mymalloc(sizeof(*state));
     65     state->err = CLEANUP_STAT_OK;
     66     state->client = stream;
     67     state->message = vstring_alloc(1000);
     68     state->buf = vstring_alloc(100);
     69     GETTIMEOFDAY(&state->arrival_time);
     70     qmqpd_peer_init(state);
     71     state->queue_id = 0;
     72     state->cleanup = 0;
     73     state->dest = 0;
     74     state->rcpt_count = 0;
     75     state->reason = 0;
     76     state->sender = 0;
     77     state->recipient = 0;
     78     state->protocol = MAIL_PROTO_QMQP;
     79     state->where = "initializing client connection";
     80     state->why_rejected = vstring_alloc(10);
     81     return (state);
     82 }
     83 
     84 /* qmqpd_state_free - destroy session state */
     85 
     86 void    qmqpd_state_free(QMQPD_STATE *state)
     87 {
     88     vstring_free(state->message);
     89     vstring_free(state->buf);
     90     qmqpd_peer_reset(state);
     91     if (state->queue_id)
     92 	myfree(state->queue_id);
     93     if (state->dest)
     94 	mail_stream_cleanup(state->dest);
     95     if (state->sender)
     96 	myfree(state->sender);
     97     if (state->recipient)
     98 	myfree(state->recipient);
     99     vstring_free(state->why_rejected);
    100     myfree((void *) state);
    101 }
    102