1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* ssl/dtls1.h */
2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*
3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * DTLS implementation written by Nagendra Modadugu
4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.
5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* ====================================================================
7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright (c) 1999-2005 The OpenSSL Project.  All rights reserved.
8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without
10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions
11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met:
12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the above copyright
14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer.
15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer in
18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    the documentation and/or other materials provided with the
19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    distribution.
20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this
22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    software must display the following acknowledgment:
23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes software developed by the OpenSSL Project
24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    endorse or promote products derived from this software without
28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    prior written permission. For written permission, please contact
29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    openssl-core@OpenSSL.org.
30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 5. Products derived from this software may not be called "OpenSSL"
32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    nor may "OpenSSL" appear in their names without prior written
33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    permission of the OpenSSL Project.
34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 6. Redistributions of any form whatsoever must retain the following
36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    acknowledgment:
37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes software developed by the OpenSSL Project
38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OF THE POSSIBILITY OF SUCH DAMAGE.
52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ====================================================================
53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This product includes cryptographic software written by Eric Young
55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * (eay@cryptsoft.com).  This product includes software written by Tim
56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Hudson (tjh@cryptsoft.com).
57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef HEADER_DTLS1_H
61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define HEADER_DTLS1_H
62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/buffer.h>
64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/pqueue.h>
6598d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#ifdef OPENSSL_SYS_VMS
6698d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#include <resource.h>
6798d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#include <sys/timeb.h>
6898d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#endif
6998d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#ifdef OPENSSL_SYS_WIN32
7098d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom/* Needed for struct timeval */
7198d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#include <winsock.h>
7298d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#elif defined(OPENSSL_SYS_NETWARE) && !defined(_WINSOCK2API_)
7398d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#include <sys/timeval.h>
7498d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#else
7598d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#include <sys/time.h>
7698d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#endif
77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef  __cplusplus
79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectextern "C" {
80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_VERSION			0xFEFF
83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_BAD_VER			0x0100
84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
85e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu#if 0
86e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu/* this alert description is not specified anywhere... */
87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_AD_MISSING_HANDSHAKE_MESSAGE    110
88e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu#endif
89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* lengths of messages */
9198d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#define DTLS1_COOKIE_LENGTH                     256
92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_RT_HEADER_LENGTH                  13
94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_HM_HEADER_LENGTH                  12
96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_HM_BAD_FRAGMENT                   -2
98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_HM_FRAGMENT_RETRY                 -3
99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_CCS_HEADER_LENGTH                  1
101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
102e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu#ifdef DTLS1_AD_MISSING_HANDSHAKE_MESSAGE
103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_AL_HEADER_LENGTH                   7
104e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu#else
105e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu#define DTLS1_AL_HEADER_LENGTH                   2
106e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu#endif
107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
108392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifndef OPENSSL_NO_SSL_INTERN
109392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
110392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifndef OPENSSL_NO_SCTP
111392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#define DTLS1_SCTP_AUTH_LABEL	"EXPORTER_DTLS_OVER_SCTP"
112392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct dtls1_bitmap_st
115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
116221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	unsigned long map;		/* track 32 packets on 32-bit systems
117221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom					   and 64 - on 64-bit systems */
118221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	unsigned char max_seq_num[8];	/* max record number seen so far,
119221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom					   64-bit value in big-endian
120221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom					   encoding */
121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} DTLS1_BITMAP;
122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
12398d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstromstruct dtls1_retransmit_state
12498d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	{
12598d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	EVP_CIPHER_CTX *enc_write_ctx;	/* cryptographic state */
126221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	EVP_MD_CTX *write_hash;			/* used for mac generation */
12798d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#ifndef OPENSSL_NO_COMP
12898d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	COMP_CTX *compress;				/* compression */
12998d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#else
13098d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	char *compress;
13198d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#endif
13298d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	SSL_SESSION *session;
13398d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	unsigned short epoch;
13498d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	};
13598d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom
136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstruct hm_header_st
137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char type;
139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned long msg_len;
140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned short seq;
141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned long frag_off;
142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned long frag_len;
143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int is_ccs;
14498d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	struct dtls1_retransmit_state saved_retransmit_state;
145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	};
146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstruct ccs_header_st
148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char type;
150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned short seq;
151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	};
152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstruct dtls1_timeout_st
154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* Number of read timeouts so far */
156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int read_timeouts;
157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* Number of write timeouts so far */
159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int write_timeouts;
160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* Number of alerts received so far */
162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int num_alerts;
163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	};
164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct record_pqueue_st
166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned short epoch;
168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	pqueue q;
169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} record_pqueue;
170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct hm_fragment_st
172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	struct hm_header_st msg_header;
174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char *fragment;
1753d3a1b8fcf46ca3bdb3d8f09acd6ef604624a30dBrian Carlstrom	unsigned char *reassembly;
176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} hm_fragment;
177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct dtls1_state_st
179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int send_cookie;
181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char cookie[DTLS1_COOKIE_LENGTH];
182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char rcvd_cookie[DTLS1_COOKIE_LENGTH];
183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int cookie_len;
184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/*
186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	 * The current data and handshake epoch.  This is initially
187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	 * undefined, and starts at zero once the initial handshake is
188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	 * completed
189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	 */
190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned short r_epoch;
191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned short w_epoch;
192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* records being received in the current epoch */
194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	DTLS1_BITMAP bitmap;
195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* renegotiation starts a new set of sequence numbers */
197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	DTLS1_BITMAP next_bitmap;
198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* handshake message numbers */
200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned short handshake_write_seq;
201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned short next_handshake_write_seq;
202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned short handshake_read_seq;
204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
20598d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	/* save last sequence number for retransmissions */
20698d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	unsigned char last_write_sequence[8];
20798d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom
208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* Received handshake records (processed and unprocessed) */
209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	record_pqueue unprocessed_rcds;
210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	record_pqueue processed_rcds;
211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* Buffered handshake messages */
213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	pqueue buffered_messages;
214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* Buffered (sent) handshake records */
216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	pqueue sent_messages;
217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
21898d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	/* Buffered application records.
21998d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	 * Only for records between CCS and Finished
22098d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	 * to prevent either protocol violation or
22198d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	 * unnecessary message loss.
22298d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	 */
22398d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	record_pqueue buffered_app_data;
22498d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom
22598d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	/* Is set when listening for new connections with dtls1_listen() */
22698d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	unsigned int listen;
22798d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom
22898d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	unsigned int mtu; /* max DTLS packet size */
229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	struct hm_header_st w_msg_hdr;
231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	struct hm_header_st r_msg_hdr;
232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	struct dtls1_timeout_st timeout;
23498d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom
235392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	/* Indicates when the last handshake msg or heartbeat sent will timeout */
23698d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	struct timeval next_timeout;
23798d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom
23898d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	/* Timeout duration */
23998d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	unsigned short timeout_duration;
24098d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom
241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* storage for Alert/Handshake protocol data received but not
242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	 * yet processed by ssl3_read_bytes: */
243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char alert_fragment[DTLS1_AL_HEADER_LENGTH];
244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int alert_fragment_len;
245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char handshake_fragment[DTLS1_HM_HEADER_LENGTH];
246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int handshake_fragment_len;
247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int retransmitting;
24998d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	unsigned int change_cipher_spec_ok;
250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
251392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifndef OPENSSL_NO_SCTP
252392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	/* used when SSL_ST_XX_FLUSH is entered */
253392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	int next_state;
254392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
255392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	int shutdown_received;
256392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
257392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} DTLS1_STATE;
259656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
260656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct dtls1_record_data_st
261656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
262656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char *packet;
263656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int   packet_length;
264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	SSL3_BUFFER    rbuf;
265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	SSL3_RECORD    rrec;
266392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifndef OPENSSL_NO_SCTP
267392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	struct bio_dgram_sctp_rcvinfo recordinfo;
268392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} DTLS1_RECORD_DATA;
270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
271392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
272656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Timeout multipliers (timeout slice is defined in apps/timeouts.h */
274656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_TMO_READ_COUNT                      2
275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_TMO_WRITE_COUNT                     2
276656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_TMO_ALERT_COUNT                     12
278656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
279656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef  __cplusplus
280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
281656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
284