1 /* $NetBSD: qmqpd_state.c,v 1.1.1.1 2009/06/23 10:08:53 tron 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((char *) state); 101 } 102