use bounds-checking lookup functions for string constants

This commit is contained in:
Brendan O'Dea 2005-01-05 13:37:56 +00:00
parent 5c3bc79ed4
commit 2a09904461
2 changed files with 194 additions and 151 deletions

View file

@ -1,23 +1,37 @@
// L2TPNS: constants
char const *cvs_id_constants = "$Id: constants.c,v 1.3 2004-06-28 02:43:13 fred_nerk Exp $";
char const *cvs_id_constants = "$Id: constants.c,v 1.4 2005-01-05 13:37:56 bodea Exp $";
#include <stdio.h>
#include "constants.h"
#include <memory.h>
const char *lcp_types[MAX_LCP_TYPE+1] = {
"Reserved",
"Maximum-Receive-Unit",
"Async-Control-Map",
"Authentication-Protocol",
"Quality-Protocol",
"Magic-Number",
"Reserved 6",
"Protocol-Field-Compression",
"Address-and-Control-Field-Compression",
};
#define CONSTANT(table, ...) \
static char const *table ## s[] = { \
__VA_ARGS__ \
}; \
char const *table(int index) \
{ \
static char n[16]; \
if (index >= 0 && index < sizeof(table ## s) / sizeof(table ## s[0]) \
&& table ## s[index]) \
return table ## s[index]; \
snprintf(n, sizeof(n), "%d", index); \
return n; \
}
const char *avpnames[MAX_AVPNAME+1] = {
CONSTANT(lcp_type,
0, // 0
"Maximum-Receive-Unit", // 1
"Async-Control-Map", // 2
"Authentication-Protocol", // 3
"Quality-Protocol", // 4
"Magic-Number", // 5
0, // 6
"Protocol-Field-Compression", // 7
"Address-and-Control-Field-Compression" // 8
)
CONSTANT(avp_name,
"Message Type", // 0
"Result Code", // 1
"Protocol Version", // 2
@ -38,7 +52,7 @@ const char *avpnames[MAX_AVPNAME+1] = {
"Maximum BPS", // 17
"Bearer Type", // 18 (2 = Analog, 1 = Digital)
"Framing Type", // 19 (2 = Async, 1 = Sync)
"Reserved 20", // 20
0, // 20
"Called Number", // 21
"Calling Number", // 22
"Sub Address", // 23
@ -57,84 +71,127 @@ const char *avpnames[MAX_AVPNAME+1] = {
"Random Vector", // 36
"Private Group ID", // 37
"Rx Connect Speed", // 38
"Sequencing Required", // 39
};
"Sequencing Required" // 39
)
const char *stopccn_result_codes[MAX_STOPCCN_RESULT_CODE+1] = {
"Reserved",
"General request to clear control connection",
"General error--Error Code indicates the problem",
"Control channel already exists",
"Requester is not authorized to establish a control channel",
"The protocol version of the requester is not supported",
"Requester is being shut down",
"Finite State Machine error",
};
CONSTANT(stopccn_result_code,
0, // 0
"General request to clear control connection", // 1
"General error--Error Code indicates the problem", // 2
"Control channel already exists", // 3
"Requester is not authorized to establish a"
" control channel", // 4
"The protocol version of the requester is not"
" supported", // 5
"Requester is being shut down", // 6
"Finite State Machine error" // 7
)
const char *cdn_result_codes[MAX_CDN_RESULT_CODE+1] = {
"Reserved",
"Call disconnected due to loss of carrier",
"Call disconnected for the reason indicated in error code",
"Call disconnected for administrative reasons",
"Call failed due to lack of appropriate facilities being available (temporary condition)",
"Call failed due to lack of appropriate facilities being available (permanent condition)",
"Invalid destination",
"Call failed due to no carrier detected",
"Call failed due to detection of a busy signal",
"Call failed due to lack of a dial tone",
"Call was not established within time allotted by LAC",
"Call was connected but no appropriate framing was detected",
};
CONSTANT(cdn_result_code,
0, // 0
"Call disconnected due to loss of carrier", // 1
"Call disconnected for the reason indicated in"
" error code", // 2
"Call disconnected for administrative reasons", // 3
"Call failed due to lack of appropriate facilities"
" being available (temporary condition)", // 4
"Call failed due to lack of appropriate facilities"
" being available (permanent condition)", // 5
"Invalid destination", // 6
"Call failed due to no carrier detected", // 7
"Call failed due to detection of a busy signal", // 8
"Call failed due to lack of a dial tone", // 9
"Call was not established within time allotted by"
" LAC", // 10
"Call was connected but no appropriate framing was"
" detected" // 11
)
const char *error_codes[MAX_ERROR_CODE+1] = {
"No general error",
"No control connection exists yet for this LAC-LNS pair",
"Length is wrong",
"One of the field values was out of range or reserved field was non-zero",
"Insufficient resources to handle this operation now",
"The Session ID is invalid in this context",
"A generic vendor-specific error occurred in the LAC",
"Try another LNS",
"Session or tunnel was shutdown due to receipt of an unknown AVP with the M-bit set",
};
CONSTANT(error_code,
"No general error", // 0
"No control connection exists yet for this LAC-LNS"
" pair", // 1
"Length is wrong", // 2
"One of the field values was out of range or"
" reserved field was non-zero", // 3
"Insufficient resources to handle this operation"
" now", // 4
"The Session ID is invalid in this context", // 5
"A generic vendor-specific error occurred in the"
" LAC", // 6
"Try another LNS", // 7
"Session or tunnel was shutdown due to receipt of"
" an unknown AVP with the M-bit set" // 8
)
const char *authtypes[MAX_AUTHTYPE+1] = {
"Reserved",
"Textual username/password exchange",
"PPP CHAP",
"PPP PAP",
"No Authentication",
"Microsoft CHAP Version 1 (MSCHAPv1)",
};
CONSTANT(auth_type,
0, // 0
"Textual username/password exchange", // 1
"PPP CHAP", // 2
"PPP PAP", // 3
"No Authentication", // 4
"Microsoft CHAP Version 1 (MSCHAPv1)" // 5
)
const char *radius_states[MAX_RADIUS_STATE+1] = {
"RADIUSNULL",
"RADIUSCHAP",
"RADIUSAUTH",
"RADIUSIPCP",
"RADIUSSTART",
"RADIUSSTOP",
"RADIUSWAIT",
NULL
};
CONSTANT(ppp_lcp_type,
0, // 0
"ConfigReq", // 1
"ConfigAck", // 2
"ConfigNak", // 3
"ConfigRej", // 4
"TerminateReq", // 5
"TerminateAck", // 6
"CodeRej", // 7
"ProtocolRej", // 8
"EchoReq", // 9
"EchoReply", // 10
"DiscardRequest", // 11
"IdentRequest" // 12
)
const char *l2tp_message_types[MAX_L2TP_MESSAGE_TYPE+1] = {
"reserved",
"SCCRQ",
"SCCRP",
"SCCCN",
CONSTANT(radius_state,
"RADIUSNULL", // 0
"RADIUSCHAP", // 1
"RADIUSAUTH", // 2
"RADIUSIPCP", // 3
"RADIUSSTART", // 4
"RADIUSSTOP", // 5
"RADIUSWAIT" // 6
)
CONSTANT(radius_code,
0, // 0
"Access-Request", // 1
"Access-Accept", // 2
"Access-Reject", // 3
"Accounting-Request", // 4
"Accounting-Response", // 5
0, // 6
0, // 7
0, // 8
0, // 9
0, // 10
"Access-Challenge", // 11
"Status-Server (experimental)", // 12
"Status-Client (experimental)" // 13
)
CONSTANT(l2tp_message_type,
0, // 0
"SCCRQ", // 1
"SCCRP", // 2
"SCCCN", // 3
"StopCCN", // 4
"reserved",
"HELLO",
"OCRQ",
"OCRP",
"OCCN",
0, // 5
"HELLO", // 6
"OCRQ", // 7
"OCRP", // 8
"OCCN", // 9
"ICRQ", // 10
"ICRP",
"ICCN",
"reserved",
"CDN",
"ICRP", // 11
"ICCN", // 12
0, // 13
"CDN", // 14
"WEN", // 15
"SLI",
};
"SLI" // 16
)

View file

@ -1,29 +1,15 @@
#ifndef __CONSTANTS_H__
#define __CONSTANTS_H__
#define MAX_LCP_TYPE 8
extern const char *lcp_types[MAX_LCP_TYPE+1];
#define MAX_AVPNAME 40
extern const char *avpnames[MAX_AVPNAME+1];
#define MAX_STOPCCN_RESULT_CODE 7
extern const char *stopccn_result_codes[MAX_STOPCCN_RESULT_CODE+1];
#define MAX_CDN_RESULT_CODE 11
extern const char *cdn_result_codes[MAX_CDN_RESULT_CODE+1];
#define MAX_ERROR_CODE 8
extern const char *error_codes[MAX_ERROR_CODE+1];
#define MAX_AUTHTYPE 5
extern const char *authtypes[MAX_AUTHTYPE+1];
// Can remove the NULL end now
#define MAX_RADIUS_STATE 8
extern const char *radius_states[MAX_RADIUS_STATE+1];
#define MAX_L2TP_MESSAGE_TYPE 16
extern const char *l2tp_message_types[MAX_L2TP_MESSAGE_TYPE+1];
char const *lcp_type(int type);
char const *avp_name(int avp);
char const *stopccn_result_code(int code);
char const *cdn_result_code(int code);
char const *error_code(int code);
char const *auth_type(int type);
char const *ppp_lcp_type(int type);
char const *radius_state(int state);
char const *radius_code(int code);
char const *l2tp_message_type(int type);
#endif /* __CONSTANTS_H__ */