diff options
Diffstat (limited to 'tinySIGCOMP/src/tcomp_nack_codes.h')
-rw-r--r-- | tinySIGCOMP/src/tcomp_nack_codes.h | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/tinySIGCOMP/src/tcomp_nack_codes.h b/tinySIGCOMP/src/tcomp_nack_codes.h new file mode 100644 index 0000000..76eb33f --- /dev/null +++ b/tinySIGCOMP/src/tcomp_nack_codes.h @@ -0,0 +1,135 @@ +/* +* Copyright (C) 2010-2011 Mamadou Diop. +* +* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org> +* +* This file is part of Open Source Doubango Framework. +* +* DOUBANGO is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* DOUBANGO is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with DOUBANGO. +* +*/ + +/**@file tcomp_nack_codes.h + * @brief List of NACK codes as per RFC 4077 subclause 3.2. + * + */ + +#ifndef TCOMP_NACKCODES_H +#define TCOMP_NACKCODES_H + +/* 0 1 2 3 4 5 6 7 + +---+---+---+---+---+---+---+---+ + | 1 1 1 1 1 | T | 0 | + +---+---+---+---+---+---+---+---+ + | | + : returned feedback item : + | | + +---+---+---+---+---+---+---+---+ + | code_len = 0 | + +---+---+---+---+---+---+---+---+ + | code_len = 0 | version = 1 | + +---+---+---+---+---+---+---+---+ + | Reason Code | + +---+---+---+---+---+---+---+---+ + | OPCODE of failed instruction | + +---+---+---+---+---+---+---+---+ + | PC of failed instruction | + | | + +---+---+---+---+---+---+---+---+ + | | + : SHA-1 Hash of failed message : + | | + +---+---+---+---+---+---+---+---+ + | | + : Error Details : + | | + +---+---+---+---+---+---+---+---+ +*/ +#define INDEX_NACK_HEADER 0 +#define INDEX_NACK_VERSION (INDEX_NACK_HEADER+ 2) +#define INDEX_NACK_REASON_CODE (INDEX_NACK_VERSION + 1) +#define INDEX_NACK_OPCODE (INDEX_NACK_REASON_CODE + 1) +#define INDEX_NACK_PC (INDEX_NACK_OPCODE + 1) +#define INDEX_NACK_SHA1 (INDEX_NACK_PC + 2) +#define INDEX_NACK_DETAILS (INDEX_NACK_PC + SHA1HashSize) + +/************************************************************************************ +* Error code details +*************************************************************************************/ +#define NACK_NONE 0 // For internal use only +#define NACK_STATE_NOT_FOUND 1 // State ID (6 - 20 bytes) +#define NACK_CYCLES_EXHAUSTED 2 // Cycles Per Bit (1 byte) +#define NACK_USER_REQUESTED 3 +#define NACK_SEGFAULT 4 +#define NACK_TOO_MANY_STATE_REQUESTS 5 +#define NACK_INVALID_STATE_ID_LENGTH 6 +#define NACK_INVALID_STATE_PRIORITY 7 +#define NACK_OUTPUT_OVERFLOW 8 +#define NACK_STACK_UNDERFLOW 9 +#define NACK_BAD_INPUT_BITORDER 10 +#define NACK_DIV_BY_ZERO 11 +#define NACK_SWITCH_VALUE_TOO_HIGH 12 +#define NACK_TOO_MANY_BITS_REQUESTED 13 +#define NACK_INVALID_OPERAND 14 +#define NACK_HUFFMAN_NO_MATCH 15 +#define NACK_MESSAGE_TOO_SHORT 16 +#define NACK_INVALID_CODE_LOCATION 17 +#define NACK_BYTECODES_TOO_LARGE 18 // Memory size (2 bytes) +#define NACK_INVALID_OPCODE 19 +#define NACK_INVALID_STATE_PROBE 20 +#define NACK_ID_NOT_UNIQUE 21 // State ID (6 - 20 bytes) +#define NACK_MULTILOAD_OVERWRITTEN 22 +#define NACK_STATE_TOO_SHORT 23 // State ID (6 - 20 bytes) +#define NACK_INTERNAL_ERROR 24 +#define NACK_FRAMING_ERROR 25 + + +typedef struct tcomp_nack_desc_s +{ + int32_t code; + const char* desc; +} +tcomp_nack_desc_t; + +static const tcomp_nack_desc_t TCOMP_NACK_DESCRIPTIONS[] = +{ + { NACK_NONE, "NONE" }, + { NACK_STATE_NOT_FOUND, "STATE_NOT_FOUND" }, + { NACK_CYCLES_EXHAUSTED, "CYCLES_EXHAUSTED" }, + { NACK_USER_REQUESTED, "USER_REQUESTED" }, + { NACK_SEGFAULT, "SEGFAULT" }, + { NACK_TOO_MANY_STATE_REQUESTS, "TOO_MANY_STATE_REQUESTS" }, + { NACK_INVALID_STATE_ID_LENGTH, "INVALID_STATE_ID_LENGTH" }, + { NACK_INVALID_STATE_PRIORITY, "INVALID_STATE_PRIORITY" }, + { NACK_OUTPUT_OVERFLOW, "OUTPUT_OVERFLOW" }, + { NACK_STACK_UNDERFLOW, "STACK_UNDERFLOW" }, + { NACK_BAD_INPUT_BITORDER, "BAD_INPUT_BITORDER" }, + { NACK_DIV_BY_ZERO, "DIV_BY_ZERO" }, + { NACK_SWITCH_VALUE_TOO_HIGH, "SWITCH_VALUE_TOO_HIGH" }, + { NACK_TOO_MANY_BITS_REQUESTED, "TOO_MANY_BITS_REQUESTED" }, + { NACK_INVALID_OPERAND, "INVALID_OPERAND" }, + { NACK_HUFFMAN_NO_MATCH, "HUFFMAN_NO_MATCH" }, + { NACK_MESSAGE_TOO_SHORT, "MESSAGE_TOO_SHORT" }, + { NACK_INVALID_CODE_LOCATION, "INVALID_CODE_LOCATION" }, + { NACK_BYTECODES_TOO_LARGE, "BYTECODES_TOO_LARGE" }, + { NACK_INVALID_OPCODE, "INVALID_OPCODE" }, + { NACK_INVALID_STATE_PROBE, "INVALID_STATE_PROBE" }, + { NACK_ID_NOT_UNIQUE, "ID_NOT_UNIQUE" }, + { NACK_MULTILOAD_OVERWRITTEN, "MULTILOAD_OVERWRITTEN" }, + { NACK_STATE_TOO_SHORT, "STATE_TOO_SHORT" }, + { NACK_INTERNAL_ERROR, "INTERNAL_ERROR" }, + { NACK_FRAMING_ERROR, "FRAMING_ERROR" } +}; + +#endif /* TCOMP_NACKCODES_H */ |