added String::truncate() and related functions.

started adding radius dictionary file reader. incomplete yet
This commit is contained in:
hyung-hwan 2017-08-29 09:09:51 +00:00
parent 25e49a4526
commit 211f5b014e
8 changed files with 2429 additions and 7 deletions

View File

@ -423,6 +423,51 @@ public:
return SelfType (this->_item->buffer + index, size); return SelfType (this->_item->buffer + index, size);
} }
void truncate (qse_size_t new_size)
{
// use this function with care.
// if the new size is greater than the current capacity,
// it grows the capacity first according to the policy.
// in such a case, it still changes the length.
// if the new size is equal to or less than the current capaciy,
// it only changes the length.
// when chaning the length, it puts a null character at
// the length position. it leaves the contents of the growing
// part or the shrinking part untouched.
//
// if you want to shorten the length while growing the capacity,
// you can call truncate twice. for instance,
// str.truncate (1000).
// str.truncate (100).
StringItem* old_item = QSE_NULL;
if (this->_item->isShared())
{
StringItem* t;
if (new_size > this->_item->capacity)
t = this->_item->copy (this->getMmgr(), this->adjust_desired_capacity(new_size));
else
t = this->_item->copy (this->getMmgr());
old_item = this->_item;
this->_item = t;
this->ref_item ();
}
else if (new_size > this->_item->capacity)
{
StringItem* t = this->_item->copy (this->getMmgr(), this->adjust_desired_capacity(new_size));
old_item = this->_item;
this->_item = t;
this->ref_item ();;
}
this->_item->buffer[new_size] = NULL_CHAR;
this->_item->size = new_size;
if (old_item) this->deref_item (old_item);
}
// //
// TODO: comparison, hash, trim, case-converting, etc // TODO: comparison, hash, trim, case-converting, etc
// utf-8 encoding/decoding // utf-8 encoding/decoding

View File

@ -1,5 +1,6 @@
pkgincludedir = $(includedir)/qse/rad pkgincludedir = $(includedir)/qse/rad
pkginclude_HEADERS = \ pkginclude_HEADERS = \
raddic.h \
radmsg.h radmsg.h

View File

@ -357,6 +357,7 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
pkginclude_HEADERS = \ pkginclude_HEADERS = \
raddic.h \
radmsg.h radmsg.h
all: all-am all: all-am

View File

@ -0,0 +1,79 @@
/*
* $Id$
*
Copyright (c) 2006-2014 Chung, Hyung-Hwan. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _QSE_RAD_RADDIC_H_
#define _QSE_RAD_RADDIC_H_
#include <qse/types.h>
#include <qse/macros.h>
#define QSE_RAD_ATTR_TYPE_STRING 0
#define QSE_RAD_ATTR_TYPE_INTEGER 1
#define QSE_RAD_ATTR_TYPE_IPADDR 2
#define QSE_RAD_ATTR_TYPE_DATE 3
#define QSE_RAD_ATTR_TYPE_ABINARY 4
#define QSE_RAD_ATTR_TYPE_OCTETS 5
#define QSE_RAD_ATTR_TYPE_IFID 6
#define QSE_RAD_ATTR_TYPE_IPV6ADDR 7
#define QSE_RAD_ATTR_TYPE_IPV6PREFIX 8
#define QSE_RAD_ATTR_TYPE_BYTE 9
#define QSE_RAD_ATTR_TYPE_SHORT 10
#define QSE_RAD_ATTR_TYPE_ETHERNET 11
#define QSE_RAD_ATTR_TYPE_SIGNED 12
#define QSE_RAD_ATTR_TYPE_COMBO_IP 13
#define QSE_RAD_ATTR_TYPE_TLV 14
struct qse_raddic_attr_t
{
int attr;
int type;
int vendor;
/* ATTR_FLAGS flags;*/
char name[1];
};
typedef struct qse_raddic_attr_t qse_raddic_attr_t;
typedef struct qse_raddic_t qse_raddic_t;
#if defined(__cplusplus)
extern "C" {
#endif
QSE_EXPORT qse_raddic_t* qse_raddic_open (
qse_mmgr_t* mmgr,
qse_size_t xtnsize
);
QSE_EXPORT void qse_raddic_close (
qse_raddic_t* dic
);
#if defined(__cplusplus)
}
#endif
#endif

View File

@ -229,7 +229,7 @@ QSE_EXPORT int qse_rad_delete_attribute (
QSE_EXPORT int qse_rad_delete_vendor_specific_attribute ( QSE_EXPORT int qse_rad_delete_vendor_specific_attribute (
qse_rad_hdr_t* hdr, qse_rad_hdr_t* hdr,
qse_uint32_t vendor, qse_uint32_t vendor,
qse_uint8_t id qse_uint8_t attrid
); );
QSE_EXPORT int qse_rad_insert_string_attribute ( QSE_EXPORT int qse_rad_insert_string_attribute (
@ -284,7 +284,7 @@ QSE_EXPORT int qse_rad_insert_ipv6prefix_attribute (
); );
QSE_EXPORT int qse_rad_insert_giga_attribute ( QSE_EXPORT int qse_rad_insert_giga_attribute (
qse_rad_hdr_t* auth, qse_rad_hdr_t* auth,
int max, int max,
qse_uint32_t vendor, qse_uint32_t vendor,
int low_id, int low_id,
@ -293,7 +293,7 @@ QSE_EXPORT int qse_rad_insert_giga_attribute (
); );
QSE_EXPORT int qse_rad_set_user_password ( QSE_EXPORT int qse_rad_set_user_password (
qse_rad_hdr_t* auth, qse_rad_hdr_t* auth,
int max, int max,
const qse_mchar_t* password, const qse_mchar_t* password,
const qse_mchar_t* secret const qse_mchar_t* secret
@ -309,7 +309,7 @@ QSE_EXPORT void qse_rad_copy_authenticator (
); );
QSE_EXPORT int qse_rad_set_authenticator ( QSE_EXPORT int qse_rad_set_authenticator (
qse_rad_hdr_t* req, qse_rad_hdr_t* req,
const qse_mchar_t* secret const qse_mchar_t* secret
); );
@ -319,14 +319,14 @@ QSE_EXPORT int qse_rad_set_authenticator (
* so this function doesn't apply * so this function doesn't apply
*/ */
QSE_EXPORT int qse_rad_verify_request ( QSE_EXPORT int qse_rad_verify_request (
qse_rad_hdr_t* req, qse_rad_hdr_t* req,
const qse_mchar_t* secret const qse_mchar_t* secret
); );
QSE_EXPORT int qse_rad_verify_response ( QSE_EXPORT int qse_rad_verify_response (
qse_rad_hdr_t* res, qse_rad_hdr_t* res,
const qse_rad_hdr_t* req, const qse_rad_hdr_t* req,
const qse_mchar_t* secret const qse_mchar_t* secret
); );

View File

@ -8,6 +8,7 @@ AM_CPPFLAGS = \
lib_LTLIBRARIES = libqserad.la lib_LTLIBRARIES = libqserad.la
libqserad_la_SOURCES = \ libqserad_la_SOURCES = \
raddic.c \
radmsg.c radmsg.c
libqserad_la_CFLAGS = libqserad_la_CFLAGS =

View File

@ -135,7 +135,8 @@ am__uninstall_files_from_dir = { \
am__installdirs = "$(DESTDIR)$(libdir)" am__installdirs = "$(DESTDIR)$(libdir)"
LTLIBRARIES = $(lib_LTLIBRARIES) LTLIBRARIES = $(lib_LTLIBRARIES)
libqserad_la_DEPENDENCIES = libqserad_la_DEPENDENCIES =
am_libqserad_la_OBJECTS = libqserad_la-radmsg.lo am_libqserad_la_OBJECTS = libqserad_la-raddic.lo \
libqserad_la-radmsg.lo
libqserad_la_OBJECTS = $(am_libqserad_la_OBJECTS) libqserad_la_OBJECTS = $(am_libqserad_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@) AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@ -396,6 +397,7 @@ AM_CPPFLAGS = \
#noinst_HEADERS = #noinst_HEADERS =
lib_LTLIBRARIES = libqserad.la lib_LTLIBRARIES = libqserad.la
libqserad_la_SOURCES = \ libqserad_la_SOURCES = \
raddic.c \
radmsg.c radmsg.c
libqserad_la_CFLAGS = libqserad_la_CFLAGS =
@ -479,6 +481,7 @@ mostlyclean-compile:
distclean-compile: distclean-compile:
-rm -f *.tab.c -rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqserad_la-raddic.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqserad_la-radmsg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqserad_la-radmsg.Plo@am__quote@
.c.o: .c.o:
@ -502,6 +505,13 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libqserad_la-raddic.lo: raddic.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libqserad_la_CFLAGS) $(CFLAGS) -MT libqserad_la-raddic.lo -MD -MP -MF $(DEPDIR)/libqserad_la-raddic.Tpo -c -o libqserad_la-raddic.lo `test -f 'raddic.c' || echo '$(srcdir)/'`raddic.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libqserad_la-raddic.Tpo $(DEPDIR)/libqserad_la-raddic.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='raddic.c' object='libqserad_la-raddic.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libqserad_la_CFLAGS) $(CFLAGS) -c -o libqserad_la-raddic.lo `test -f 'raddic.c' || echo '$(srcdir)/'`raddic.c
libqserad_la-radmsg.lo: radmsg.c libqserad_la-radmsg.lo: radmsg.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libqserad_la_CFLAGS) $(CFLAGS) -MT libqserad_la-radmsg.lo -MD -MP -MF $(DEPDIR)/libqserad_la-radmsg.Tpo -c -o libqserad_la-radmsg.lo `test -f 'radmsg.c' || echo '$(srcdir)/'`radmsg.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libqserad_la_CFLAGS) $(CFLAGS) -MT libqserad_la-radmsg.lo -MD -MP -MF $(DEPDIR)/libqserad_la-radmsg.Tpo -c -o libqserad_la-radmsg.lo `test -f 'radmsg.c' || echo '$(srcdir)/'`radmsg.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libqserad_la-radmsg.Tpo $(DEPDIR)/libqserad_la-radmsg.Plo @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libqserad_la-radmsg.Tpo $(DEPDIR)/libqserad_la-radmsg.Plo

2285
qse/lib/rad/raddic.c Normal file

File diff suppressed because it is too large Load Diff