File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / strongswan / src / libtnccs / plugins / tnccs_20 / messages / pb_tnc_msg.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Jun 3 09:46:43 2020 UTC (4 years, 3 months ago) by misho
Branches: strongswan, MAIN
CVS tags: v5_9_2p0, v5_8_4p7, HEAD
Strongswan

    1: /*
    2:  * Copyright (C) 2010-2013 Andreas Steffen
    3:  * HSR Hochschule fuer Technik Rapperswil
    4:  *
    5:  * This program is free software; you can redistribute it and/or modify it
    6:  * under the terms of the GNU General Public License as published by the
    7:  * Free Software Foundation; either version 2 of the License, or (at your
    8:  * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
    9:  *
   10:  * This program is distributed in the hope that it will be useful, but
   11:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
   12:  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   13:  * for more details.
   14:  */
   15: 
   16: /**
   17:  * @defgroup pb_tnc_msg pb_tnc_msg
   18:  * @{ @ingroup tnccs_20
   19:  */
   20: 
   21: #ifndef PB_TNC_MSG_H_
   22: #define PB_TNC_MSG_H_
   23: 
   24: typedef enum pb_tnc_msg_type_t pb_tnc_msg_type_t;
   25: typedef struct pb_tnc_msg_info_t pb_tnc_msg_info_t;
   26: typedef struct pb_tnc_msg_t pb_tnc_msg_t;
   27: 
   28: #include <library.h>
   29: #include <pen/pen.h>
   30: 
   31: #define PB_TNC_VERSION		2
   32: 
   33: /**
   34:  * PB-TNC Message Types as defined in section 4.3 of RFC 5793
   35:  */
   36: enum pb_tnc_msg_type_t {
   37: 	PB_MSG_EXPERIMENTAL =				0,
   38: 	PB_MSG_PA =							1,
   39: 	PB_MSG_ASSESSMENT_RESULT =			2,
   40: 	PB_MSG_ACCESS_RECOMMENDATION =		3,
   41: 	PB_MSG_REMEDIATION_PARAMETERS =		4,
   42: 	PB_MSG_ERROR =						5,
   43: 	PB_MSG_LANGUAGE_PREFERENCE =		6,
   44: 	PB_MSG_REASON_STRING =				7,
   45: 	PB_MSG_ROOF =						7
   46: };
   47: 
   48: /**
   49:  * enum name for pb_tnc_msg_type_t.
   50:  */
   51: extern enum_name_t *pb_tnc_msg_type_names;
   52: 
   53: /**
   54:  * PB-TNC Message Type defined in the TCG namespace
   55:  */
   56: enum pb_tnc_tcg_msg_type_t {
   57: 	PB_TCG_MSG_RESERVED =				0,
   58: 	PB_TCG_MSG_PDP_REFERRAL =			1,
   59: 	PB_TCG_MSG_ROOF =					1
   60: };
   61: 
   62: /**
   63:  * enum name for pb_tnc_tcg_msg_type_t.
   64:  */
   65: extern enum_name_t *pb_tnc_tcg_msg_type_names;
   66: 
   67: /**
   68:  * PB-TNC Message Type defined in the ITA namespace
   69:  */
   70: enum pb_tnc_ita_msg_type_t {
   71: 	PB_ITA_MSG_NOSKIP_TEST =			0,
   72: 	PB_ITA_MSG_MUTUAL_CAPABILITY =		1,
   73: 	PB_ITA_MSG_ROOF =					1
   74: };
   75: 
   76: /**
   77:  * enum name for pb_tnc_tcg_msg_type_t.
   78:  */
   79: extern enum_name_t *pb_tnc_ita_msg_type_names;
   80: 
   81: /**
   82:  * Information entry describing a PB-TNC Message Type
   83:  */
   84: struct pb_tnc_msg_info_t {
   85: 	uint32_t min_size;
   86: 	bool exact_size;
   87: 	bool in_result_batch;
   88: 	signed char has_noskip_flag;
   89: };
   90: 
   91: #define	TRUE_OR_FALSE	2
   92: 
   93: /**
   94:  * Information on PB-TNC Message Types
   95:  */
   96: extern pb_tnc_msg_info_t pb_tnc_msg_infos[];
   97: 
   98: /**
   99:  * Information on PB-TNC TCG Message Types
  100:  */
  101: extern pb_tnc_msg_info_t pb_tnc_tcg_msg_infos[];
  102: 
  103: /**
  104:  * Information on PB-TNC ITA Message Types
  105:  */
  106: extern pb_tnc_msg_info_t pb_tnc_ita_msg_infos[];
  107: 
  108: /**
  109:  * Generic interface for all PB-TNC message types.
  110:  *
  111:  * To handle all messages in a generic way, this interface
  112:  * must be implemented by each message type.
  113:  */
  114: struct pb_tnc_msg_t {
  115: 
  116: 	/**
  117: 	 * Get the PB-TNC Message Type
  118: 	 *
  119: 	 * @return					 PB-TNC Message Type
  120: 	 */
  121: 	pen_type_t (*get_type)(pb_tnc_msg_t *this);
  122: 
  123: 	/**
  124: 	 * Get the encoding of the PB-TNC Message Value
  125: 	 *
  126: 	 * @return					encoded PB-TNC Message Value
  127: 	 */
  128: 	chunk_t (*get_encoding)(pb_tnc_msg_t *this);
  129: 
  130: 	/**
  131: 	 * Build the PB-TNC Message Value
  132: 	 */
  133: 	void (*build)(pb_tnc_msg_t *this);
  134: 
  135: 	/**
  136: 	 * Process the PB-TNC Message Value
  137: 	 *
  138: 	 * @param					relative offset where an error occurred
  139: 	 * @return					return processing status
  140: 	 */
  141: 	status_t (*process)(pb_tnc_msg_t *this, uint32_t *offset);
  142: 
  143: 	/**
  144: 	 * Get a new reference to the message.
  145: 	 *
  146: 	 * @return			this, with an increased refcount
  147: 	 */
  148: 	pb_tnc_msg_t* (*get_ref)(pb_tnc_msg_t *this);
  149: 
  150: 	/**
  151: 	 * Destroys a pb_tnc_msg_t object.
  152: 	 */
  153: 	void (*destroy)(pb_tnc_msg_t *this);
  154: };
  155: 
  156: /**
  157:  * Create an unprocessed PB-TNC message
  158:  *
  159:  * Useful for the parser which wants a generic constructor for all
  160:  * pb_tnc_message_t types.
  161:  *
  162:  * @param msg_type			PB-TNC message type
  163:  * @param value				PB-TNC message value
  164:  */
  165: pb_tnc_msg_t* pb_tnc_msg_create_from_data(pen_type_t msg_type, chunk_t value);
  166: 
  167: #endif /** PB_TNC_MSG_H_ @}*/

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>