enhanced the constant value handling

This commit is contained in:
2017-12-14 10:02:44 +00:00
parent 1f56b6cf93
commit 2172fa59a5
4 changed files with 329 additions and 197 deletions

View File

@ -132,6 +132,10 @@ QSE_EXPORT const qse_mchar_t* qse_mbsbasename (
const qse_mchar_t* path
);
/**
* The qse_substmbsbasenamedup() function creates a new string composed of
* the base directory part of the given \a path and \a file combined.
*/
QSE_EXPORT qse_mchar_t* qse_substmbsbasenamedup (
const qse_mchar_t* path,
const qse_mchar_t* file,
@ -289,7 +293,10 @@ QSE_EXPORT qse_size_t qse_canonwcspath (
int flags
);
/**
* The qse_substwcsbasenamedup() function creates a new string composed of
* the base directory part of the given \a path and \a file combined.
*/
QSE_EXPORT qse_wchar_t* qse_mergewcspathdup (
const qse_wchar_t* dir,
const qse_wchar_t* file,

View File

@ -39,7 +39,8 @@ typedef enum qse_raddic_opt_t qse_raddic_opt_t;
enum qse_raddic_trait_t
{
QSE_RADDIC_ALLOW_CONST_WITHOUT_ATTR = (1 << 0),
QSE_RADDIC_ALLOW_DUPLICATE_CONST = (1 << 1)
QSE_RADDIC_ALLOW_DUPLICATE_CONST = (1 << 1),
QSE_RADDIC_IGNORE_UNKNOWN_ATTR_FLAG = (1 << 2)
};
typedef enum qse_raddic_trait_t qse_raddic_trait_t;
@ -59,24 +60,6 @@ enum qse_raddic_errnum_t
typedef enum qse_raddic_errnum_t qse_raddic_errnum_t;
#if 0
#define QSE_RADDIC_ATTR_TYPE_STRING 0
#define QSE_RADDIC_ATTR_TYPE_INTEGER 1
#define QSE_RADDIC_ATTR_TYPE_IPADDR 2
#define QSE_RADDIC_ATTR_TYPE_DATE 3
#define QSE_RADDIC_ATTR_TYPE_ABINARY 4
#define QSE_RADDIC_ATTR_TYPE_OCTETS 5
#define QSE_RADDIC_ATTR_TYPE_IFID 6
#define QSE_RADDIC_ATTR_TYPE_IPV6ADDR 7
#define QSE_RADDIC_ATTR_TYPE_IPV6PREFIX 8
#define QSE_RADDIC_ATTR_TYPE_BYTE 9
#define QSE_RADDIC_ATTR_TYPE_SHORT 10
#define QSE_RADDIC_ATTR_TYPE_ETHERNET 11
#define QSE_RADDIC_ATTR_TYPE_SIGNED 12
#define QSE_RADDIC_ATTR_TYPE_COMBO_IP 13
#define QSE_RADDIC_ATTR_TYPE_TLV 14
#endif
enum qse_raddic_attr_type_t
{
QSE_RADDIC_ATTR_TYPE_INVALID = 0,
@ -130,20 +113,34 @@ enum qse_raddic_attr_type_t
};
typedef enum qse_raddic_attr_type_t qse_raddic_attr_type_t;
enum qse_raddic_attr_flag_encrypt_t
{
QSE_RADDIC_ATTR_FLAG_ENCRYPT_NONE = 0, /* keep this entry on top */
QSE_RADDIC_ATTR_FLAG_ENCRYPT_USER_PASSWORD, /* RFC2865 */
QSE_RADDIC_ATTR_FLAG_ENCRYPT_TUNNEL_PASSWORD, /* RFC2868 */
QSE_RADDIC_ATTR_FLAG_ENCRYPT_ASCEND_SECRET,
QSE_RADDIC_ATTR_FLAG_ENCRYPT_OTHER /* keep this entry at the bottom */
};
typedef enum qse_raddic_attr_flag_encrypt_t qse_raddic_attr_flag_encrypt_t;
struct qse_raddic_attr_flags_t
{
unsigned int addport : 1; /* add NAS-Port to IP address */
unsigned int has_tag : 1; /* tagged attribute */
unsigned int do_xlat : 1; /* strvalue is dynamic */
unsigned int unknown_attr : 1; /* not in dictionary */
unsigned int array : 1; /* pack multiples into 1 attr */
unsigned int has_value : 1; /* has a value */
unsigned int has_value_alias : 1; /* has a value alias */
unsigned int has_tlv : 1; /* has sub attributes */
unsigned int is_tlv : 1; /* is a sub attribute */
unsigned int encoded : 1; /* has been put into packet */
qse_int8_t tag; /* tag for tunneled attributes */
qse_uint8_t encrypt; /* encryption method */
unsigned int addport: 1; /* add NAS-Port to IP address */
unsigned int has_tag: 1; /* tagged attribute */
unsigned int unknown_attr: 1; /* not in dictionary */
unsigned int array: 1; /* pack multiples into 1 attr */
unsigned int concat: 1;
unsigned int internal: 1; /* internal use only */
unsigned int has_value: 1; /* has a value */
unsigned int has_tlv: 1; /* has sub attributes */
unsigned int is_tlv: 1; /* is a sub attribute */
qse_int8_t tag; /* tag for tunneled attributes */
qse_uint8_t length;
qse_raddic_attr_flag_encrypt_t encrypt; /* encryption method */
};
typedef struct qse_raddic_attr_flags_t qse_raddic_attr_flags_t;
@ -151,20 +148,43 @@ typedef struct qse_raddic_attr_t qse_raddic_attr_t;
struct qse_raddic_attr_t
{
qse_uint32_t attr;
int type;
qse_raddic_attr_type_t type;
int vendor;
qse_raddic_attr_flags_t flags;
qse_raddic_attr_t* nexta;
qse_char_t name[1];
};
typedef struct qse_raddic_const_value_t qse_raddic_const_value_t;
struct qse_raddic_const_value_t
{
qse_raddic_attr_type_t type;
union
{
qse_uint8_t ui8;
qse_uint16_t ui16;
qse_uint32_t ui32;
qse_uint64_t ui64;
qse_int8_t i8;
qse_int16_t i16;
qse_int32_t i32;
qse_int64_t i64;
qse_flt_t f32;
qse_flt_t f64;
/* TODO: more to come like ip address */
} u;
};
typedef struct qse_raddic_const_t qse_raddic_const_t;
struct qse_raddic_const_t
{
qse_uint32_t attr; /* vendor + attribute-value */
int value;
qse_raddic_const_t* nextc;
qse_char_t name[1];
qse_uint32_t attr; /* vendor + attribute-value */
qse_raddic_const_value_t value;
qse_raddic_const_t* nextc;
qse_char_t name[1];
};
typedef struct qse_raddic_vendor_t qse_raddic_vendor_t;
@ -265,8 +285,6 @@ QSE_EXPORT int qse_raddic_deletevendorbyvalue (
);
QSE_EXPORT qse_raddic_attr_t* qse_raddic_findattrbyname (
qse_raddic_t* dic,
const qse_char_t* name
@ -281,7 +299,7 @@ QSE_EXPORT qse_raddic_attr_t* qse_raddic_addattr (
qse_raddic_t* dic,
const qse_char_t* name,
int vendor,
int type,
qse_raddic_attr_type_t type,
int value,
const qse_raddic_attr_flags_t* flags
);
@ -293,7 +311,7 @@ QSE_EXPORT int qse_raddic_deleteattrbyname (
QSE_EXPORT int qse_raddic_deleteattrbyvalue (
qse_raddic_t* dic,
int attr
qse_uint32_t attr
);
@ -304,16 +322,16 @@ QSE_EXPORT qse_raddic_const_t* qse_raddic_findconstbyname (
);
QSE_EXPORT qse_raddic_const_t* qse_raddic_findconstbyvalue (
qse_raddic_t* dic,
qse_uint32_t attr,
int value
qse_raddic_t* dic,
qse_uint32_t attr,
const qse_raddic_const_value_t* value
);
QSE_EXPORT qse_raddic_const_t* qse_raddic_addconst (
qse_raddic_t* dic,
const qse_char_t* name,
const qse_char_t* attrstr,
int value
qse_raddic_t* dic,
const qse_char_t* name,
const qse_char_t* attrstr,
const qse_raddic_const_value_t* value
);
QSE_EXPORT int qse_raddic_deleteconstbyname (
@ -323,9 +341,9 @@ QSE_EXPORT int qse_raddic_deleteconstbyname (
);
QSE_EXPORT int qse_raddic_deleteconstbyvalue (
qse_raddic_t* dic,
qse_uint32_t attr,
int value
qse_raddic_t* dic,
qse_uint32_t attr,
const qse_raddic_const_value_t* value
);