(linenum→info "unix/slp.c:2238")

openssl/0.9.8g/ssl/dtls1.h

    1: /* ssl/dtls1.h */
    2: /* 
    3:  * DTLS implementation written by Nagendra Modadugu
    4:  * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.  
    5:  */
    6: /* ====================================================================
    7:  * Copyright (c) 1999-2005 The OpenSSL Project.  All rights reserved.
    8:  *
    9:  * Redistribution and use in source and binary forms, with or without
   10:  * modification, are permitted provided that the following conditions
   11:  * are met:
   12:  *
   13:  * 1. Redistributions of source code must retain the above copyright
   14:  *    notice, this list of conditions and the following disclaimer. 
   15:  *
   16:  * 2. Redistributions in binary form must reproduce the above copyright
   17:  *    notice, this list of conditions and the following disclaimer in
   18:  *    the documentation and/or other materials provided with the
   19:  *    distribution.
   20:  *
   21:  * 3. All advertising materials mentioning features or use of this
   22:  *    software must display the following acknowledgment:
   23:  *    "This product includes software developed by the OpenSSL Project
   24:  *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
   25:  *
   26:  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
   27:  *    endorse or promote products derived from this software without
   28:  *    prior written permission. For written permission, please contact
   29:  *    openssl-core@OpenSSL.org.
   30:  *
   31:  * 5. Products derived from this software may not be called "OpenSSL"
   32:  *    nor may "OpenSSL" appear in their names without prior written
   33:  *    permission of the OpenSSL Project.
   34:  *
   35:  * 6. Redistributions of any form whatsoever must retain the following
   36:  *    acknowledgment:
   37:  *    "This product includes software developed by the OpenSSL Project
   38:  *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
   39:  *
   40:  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
   41:  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   42:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   43:  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
   44:  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   45:  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   46:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   47:  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   48:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   49:  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   50:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   51:  * OF THE POSSIBILITY OF SUCH DAMAGE.
   52:  * ====================================================================
   53:  *
   54:  * This product includes cryptographic software written by Eric Young
   55:  * (eay@cryptsoft.com).  This product includes software written by Tim
   56:  * Hudson (tjh@cryptsoft.com).
   57:  *
   58:  */
   59: 
   60: #ifndef HEADER_DTLS1_H 
   61: #define HEADER_DTLS1_H 
   62: 
   63: #include <openssl/buffer.h>
   64: #include <openssl/pqueue.h>
   65: 
   66: #ifdef  __cplusplus
   67: extern "C" {
   68: #endif
   69: 
   70: #define DTLS1_VERSION                   0xFEFF
   71: #define DTLS1_BAD_VER                   0x0100
   72: 
   73: #define DTLS1_AD_MISSING_HANDSHAKE_MESSAGE    110
   74: 
   75: /* lengths of messages */
   76: #define DTLS1_COOKIE_LENGTH                     32
   77: 
   78: #define DTLS1_RT_HEADER_LENGTH                  13
   79: 
   80: #define DTLS1_HM_HEADER_LENGTH                  12
   81: 
   82: #define DTLS1_HM_BAD_FRAGMENT                   -2
   83: #define DTLS1_HM_FRAGMENT_RETRY                 -3
   84: 
   85: #define DTLS1_CCS_HEADER_LENGTH                  1
   86: 
   87: #define DTLS1_AL_HEADER_LENGTH                   7
   88: 
   89: 
   90: typedef struct dtls1_bitmap_st
   91:         {
   92:         PQ_64BIT map;
   93:         unsigned long length;     /* sizeof the bitmap in bits */
   94:         PQ_64BIT max_seq_num;  /* max record number seen so far */
   95:         } DTLS1_BITMAP;
   96: 
   97: struct hm_header_st
   98:         {
   99:         unsigned char type;
  100:         unsigned long msg_len;
  101:         unsigned short seq;
  102:         unsigned long frag_off;
  103:         unsigned long frag_len;
  104:         unsigned int is_ccs;
  105:         };
  106: 
  107: struct ccs_header_st
  108:         {
  109:         unsigned char type;
  110:         unsigned short seq;
  111:         };
  112: 
  113: struct dtls1_timeout_st
  114:         {
  115:         /* Number of read timeouts so far */
  116:         unsigned int read_timeouts;
  117:         
  118:         /* Number of write timeouts so far */
  119:         unsigned int write_timeouts;
  120:         
  121:         /* Number of alerts received so far */
  122:         unsigned int num_alerts;
  123:         };
  124: 
  125: typedef struct record_pqueue_st
  126:         {
  127:         unsigned short epoch;
  128:         pqueue q;
  129:         } record_pqueue;
  130: 
  131: typedef struct hm_fragment_st
  132:         {
  133:         struct hm_header_st msg_header;
  134:         unsigned char *fragment;
  135:         } hm_fragment;
  136: 
  137: typedef struct dtls1_state_st
  138:         {
  139:         unsigned int send_cookie;
  140:         unsigned char cookie[DTLS1_COOKIE_LENGTH];
  141:         unsigned char rcvd_cookie[DTLS1_COOKIE_LENGTH];
  142:         unsigned int cookie_len;
  143: 
  144:         /* 
  145:          * The current data and handshake epoch.  This is initially
  146:          * undefined, and starts at zero once the initial handshake is
  147:          * completed 
  148:          */
  149:         unsigned short r_epoch;
  150:         unsigned short w_epoch;
  151: 
  152:         /* records being received in the current epoch */
  153:         DTLS1_BITMAP bitmap;
  154: 
  155:         /* renegotiation starts a new set of sequence numbers */
  156:         DTLS1_BITMAP next_bitmap;
  157: 
  158:         /* handshake message numbers */
  159:         unsigned short handshake_write_seq;
  160:         unsigned short next_handshake_write_seq;
  161: 
  162:         unsigned short handshake_read_seq;
  163: 
  164:         /* Received handshake records (processed and unprocessed) */
  165:         record_pqueue unprocessed_rcds;
  166:         record_pqueue processed_rcds;
  167: 
  168:         /* Buffered handshake messages */
  169:         pqueue buffered_messages;
  170: 
  171:         /* Buffered (sent) handshake records */
  172:         pqueue sent_messages;
  173: 
  174:         unsigned int mtu; /* max wire packet size */
  175: 
  176:         struct hm_header_st w_msg_hdr;
  177:         struct hm_header_st r_msg_hdr;
  178: 
  179:         struct dtls1_timeout_st timeout;
  180:         
  181:         /* storage for Alert/Handshake protocol data received but not
  182:          * yet processed by ssl3_read_bytes: */
  183:         unsigned char alert_fragment[DTLS1_AL_HEADER_LENGTH];
  184:         unsigned int alert_fragment_len;
  185:         unsigned char handshake_fragment[DTLS1_HM_HEADER_LENGTH];
  186:         unsigned int handshake_fragment_len;
  187: 
  188:         unsigned int retransmitting;
  189: 
  190:         } DTLS1_STATE;
  191: 
  192: typedef struct dtls1_record_data_st
  193:         {
  194:         unsigned char *packet;
  195:         unsigned int   packet_length;
  196:         SSL3_BUFFER    rbuf;
  197:         SSL3_RECORD    rrec;
  198:         } DTLS1_RECORD_DATA;
  199: 
  200: 
  201: /* Timeout multipliers (timeout slice is defined in apps/timeouts.h */
  202: #define DTLS1_TMO_READ_COUNT                      2
  203: #define DTLS1_TMO_WRITE_COUNT                     2
  204: 
  205: #define DTLS1_TMO_ALERT_COUNT                     12
  206: 
  207: #ifdef  __cplusplus
  208: }
  209: #endif
  210: #endif
  211: 
Syntax (Markdown)