added common test macros.
added dhcp packet composition functions
This commit is contained in:
@ -33,6 +33,7 @@ pkginclude_HEADERS = \
|
||||
time.h \
|
||||
tmr.h \
|
||||
tre.h \
|
||||
test.h \
|
||||
uni.h \
|
||||
uri.h \
|
||||
utf8.h \
|
||||
|
@ -135,8 +135,8 @@ am__can_run_installinfo = \
|
||||
am__pkginclude_HEADERS_DIST = alg.h arr.h chr.h cp949.h cp950.h dll.h \
|
||||
env.h fma.h fmt.h gdl.h htb.h htl.h hton.h hwad.h ipad.h \
|
||||
main.h map.h mb8.h mbwc.h mem.h oht.h opt.h path.h pma.h rbt.h \
|
||||
rex.h sll.h slmb.h str.h time.h tmr.h tre.h uni.h uri.h utf8.h \
|
||||
xma.h Mmgr.hpp StdMmgr.hpp HeapMmgr.hpp Mmged.hpp \
|
||||
rex.h sll.h slmb.h str.h time.h tmr.h tre.h test.h uni.h uri.h \
|
||||
utf8.h xma.h Mmgr.hpp StdMmgr.hpp HeapMmgr.hpp Mmged.hpp \
|
||||
ScopedPtr.hpp SharedPtr.hpp StrBase.hpp String.hpp Mpool.hpp \
|
||||
Association.hpp LinkedList.hpp HashList.hpp HashTable.hpp \
|
||||
RedBlackTree.hpp RedBlackTable.hpp Array.hpp BinaryHeap.hpp
|
||||
@ -374,8 +374,8 @@ top_srcdir = @top_srcdir@
|
||||
pkginclude_HEADERS = alg.h arr.h chr.h cp949.h cp950.h dll.h env.h \
|
||||
fma.h fmt.h gdl.h htb.h htl.h hton.h hwad.h ipad.h main.h \
|
||||
map.h mb8.h mbwc.h mem.h oht.h opt.h path.h pma.h rbt.h rex.h \
|
||||
sll.h slmb.h str.h time.h tmr.h tre.h uni.h uri.h utf8.h xma.h \
|
||||
$(am__append_1)
|
||||
sll.h slmb.h str.h time.h tmr.h tre.h test.h uni.h uri.h \
|
||||
utf8.h xma.h $(am__append_1)
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
|
38
qse/include/qse/cmn/test.h
Normal file
38
qse/include/qse/cmn/test.h
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* $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_CMN_TEST_H_
|
||||
#define _QSE_CMN_TEST_H_
|
||||
|
||||
#include <qse/si/sio.h>
|
||||
|
||||
#define QSE_TESASSERT_FAIL1(msg1) qse_printf(QSE_T("FAILURE in %hs[%d] - %s\n"), __func__, (int)__LINE__, msg1)
|
||||
#define QSE_TESASSERT_FAIL2(msg1,msg2) qse_printf(QSE_T("FAILURE in %hs[%d] - %s - %s\n"), __func__, (int)__LINE__, msg1, msg2)
|
||||
|
||||
#define QSE_TESASSERT1(test,msg1) do { if (!(test)) { QSE_TESASSERT_FAIL1(msg1); goto oops; } } while(0)
|
||||
#define QSE_TESASSERT2(test,msg1,msg2) do { if (!(test)) { QSE_TESASSERT_FAIL2(msg1,msg2); goto oops; } } while(0)
|
||||
|
||||
#endif
|
@ -11,8 +11,19 @@
|
||||
/* operation code */
|
||||
enum qse_dhcp4_op_t
|
||||
{
|
||||
QSE_DHCP4OP_BOOTREQUEST = 1,
|
||||
QSE_DHCP4OP_BOOTREPLY = 2
|
||||
QSE_DHCP4_OP_BOOTREQUEST = 1,
|
||||
QSE_DHCP4_OP_BOOTREPLY = 2
|
||||
};
|
||||
|
||||
enum qse_dhcp4_htype_t
|
||||
{
|
||||
QSE_DHCP4_HTYPE_ETHERNET = 1,
|
||||
QSE_DHCP4_HTYPE_IEEE802 = 6,
|
||||
QSE_DHCP4_HTYPE_ARCNET = 7,
|
||||
QSE_DHCP4_HTYPE_APPLETALK = 8,
|
||||
QSE_DHCP4_HTYPE_HDLC = 17,
|
||||
QSE_DHCP4_HTYPE_ATM = 19,
|
||||
QSE_DHCP4_HTYPE_INFINIBAND = 32
|
||||
};
|
||||
|
||||
/* option codes (partial) */
|
||||
@ -71,17 +82,29 @@ enum qse_dhcp4_opt_relay_t
|
||||
/* message type */
|
||||
enum qse_dhcp4_msg_t
|
||||
{
|
||||
QSE_DHCP4MSG_DISCOVER = 1,
|
||||
QSE_DHCP4MSG_OFFER = 2,
|
||||
QSE_DHCP4MSG_REQUEST = 3,
|
||||
QSE_DHCP4MSG_DECLINE = 4,
|
||||
QSE_DHCP4MSG_ACK = 5,
|
||||
QSE_DHCP4MSG_NAK = 6,
|
||||
QSE_DHCP4MSG_RELEASE = 7,
|
||||
QSE_DHCP4MSG_INFORM = 8
|
||||
QSE_DHCP4_MSG_DISCOVER = 1,
|
||||
QSE_DHCP4_MSG_OFFER = 2,
|
||||
QSE_DHCP4_MSG_REQUEST = 3,
|
||||
QSE_DHCP4_MSG_DECLINE = 4,
|
||||
QSE_DHCP4_MSG_ACK = 5,
|
||||
QSE_DHCP4_MSG_NAK = 6,
|
||||
QSE_DHCP4_MSG_RELEASE = 7,
|
||||
QSE_DHCP4_MSG_INFORM = 8,
|
||||
|
||||
/*QSE_DHCP4_MSG_RENEW = 9,*/
|
||||
|
||||
QSE_DHCP4_MSG_LEASE_QUERY = 10,
|
||||
QSE_DHCP4_MSG_LEASE_UNASSIGNED = 11,
|
||||
QSE_DHCP4_MSG_LEASE_UNKNOWN = 12,
|
||||
QSE_DHCP4_MSG_LEASE_ACTIVE = 13,
|
||||
|
||||
QSE_DHCP4_MSG_BULK_LEASE_QUERY = 14,
|
||||
QSE_DHCP4_MSG_LEASE_QUERY_DONE = 15
|
||||
};
|
||||
|
||||
struct qse_dhcp4_pkt_t
|
||||
#include <qse/pack1.h>
|
||||
|
||||
struct qse_dhcp4_pkt_hdr_t
|
||||
{
|
||||
qse_uint8_t op;
|
||||
qse_uint8_t htype;
|
||||
@ -103,24 +126,74 @@ struct qse_dhcp4_pkt_t
|
||||
* the first four bytes of the options compose a magic cookie
|
||||
* 0x63 0x82 0x53 0x63 */
|
||||
};
|
||||
typedef struct qse_dhcp4_pkt_hdr_t qse_dhcp4_pkt_hdr_t;
|
||||
|
||||
typedef struct qse_dhcp4_pkt_t qse_dhcp4_pkt_t;
|
||||
struct qse_dhcp4_opt_hdr_t
|
||||
{
|
||||
qse_uint8_t code;
|
||||
qse_uint8_t len;
|
||||
};
|
||||
typedef struct qse_dhcp4_opt_hdr_t qse_dhcp4_opt_hdr_t;
|
||||
|
||||
typedef int (*qse_dhcp4_opt_walker_t) (qse_dhcp4_opt_hdr_t* opt);
|
||||
|
||||
struct qse_dhcp4_pktinf_t
|
||||
{
|
||||
qse_dhcp4_pkt_hdr_t* hdr;
|
||||
qse_size_t len;
|
||||
};
|
||||
typedef struct qse_dhcp4_pktinf_t qse_dhcp4_pktinf_t;
|
||||
|
||||
struct qse_dhcp4_pktbuf_t
|
||||
{
|
||||
qse_dhcp4_pkt_hdr_t* hdr;
|
||||
qse_size_t len;
|
||||
qse_size_t capa;
|
||||
};
|
||||
typedef struct qse_dhcp4_pktbuf_t qse_dhcp4_pktbuf_t;
|
||||
|
||||
#include <qse/unpack.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
QSE_EXPORT qse_uint8_t* qse_dhcp4_get_options (
|
||||
const qse_dhcp4_pkt_t* pkt,
|
||||
qse_size_t len,
|
||||
qse_size_t* olen /* option area length */
|
||||
QSE_EXPORT int qse_dhcp4_initialize_pktbuf (
|
||||
qse_dhcp4_pktbuf_t* pkt,
|
||||
void* buf,
|
||||
qse_size_t capa
|
||||
);
|
||||
|
||||
QSE_EXPORT qse_uint8_t* qse_dhcp4_get_option (
|
||||
const qse_dhcp4_pkt_t* pkt,
|
||||
qse_size_t len,
|
||||
int code,
|
||||
qse_uint8_t* olen
|
||||
QSE_EXPORT int qse_dhcp4_add_option (
|
||||
qse_dhcp4_pktbuf_t* pkt,
|
||||
int code,
|
||||
void* optr, /**< option data pointer */
|
||||
qse_uint8_t olen /**< option data length */
|
||||
);
|
||||
|
||||
QSE_EXPORT void qse_dhcp4_compact_options (
|
||||
qse_dhcp4_pktbuf_t* pkt
|
||||
);
|
||||
|
||||
#if 0
|
||||
QSE_EXPORT int qse_dhcp4_add_options (
|
||||
qse_dhcp4_pkt_hdr_t* pkt,
|
||||
qse_size_t len,
|
||||
qse_size_t max,
|
||||
int code,
|
||||
qse_uint8_t* optr, /* option data */
|
||||
qse_uint8_t olen /* option length */
|
||||
);
|
||||
#endif
|
||||
|
||||
QSE_EXPORT int qse_dhcp4_walk_options (
|
||||
const qse_dhcp4_pktinf_t* pkt,
|
||||
qse_dhcp4_opt_walker_t walker
|
||||
);
|
||||
|
||||
QSE_EXPORT qse_dhcp4_opt_hdr_t* qse_dhcp4_find_option (
|
||||
const qse_dhcp4_pktinf_t* pkt,
|
||||
int ode
|
||||
);
|
||||
|
||||
QSE_EXPORT qse_uint8_t* qse_dhcp4_get_relay_suboption (
|
||||
@ -130,16 +203,6 @@ QSE_EXPORT qse_uint8_t* qse_dhcp4_get_relay_suboption (
|
||||
qse_uint8_t* olen
|
||||
);
|
||||
|
||||
|
||||
QSE_EXPORT int qse_dhcp4_add_option (
|
||||
qse_dhcp4_pkt_t* pkt,
|
||||
qse_size_t len,
|
||||
qse_size_t max,
|
||||
int code,
|
||||
qse_uint8_t* optr, /* option data */
|
||||
qse_uint8_t olen /* option length */
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user