From 14de235c5c0fcf1bc002ffc05b5a34a90858f3b4 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Fri, 2 Mar 2018 12:36:03 +0000 Subject: [PATCH] libcs compiles with -ansi option now FossilOrigin-Name: afeca48ac2e33dace533047329ea48224ee5e4bfd4e83449f335d0a022a67215 --- src/cw/acpriolist.c | 10 + src/cw/acpriolist.h | 12 +- src/cw/action.c | 2 +- src/cw/capwap.h | 39 +--- src/cw/capwap_cisco.h | 53 +---- src/cw/capwap_inline.c | 39 ++++ src/cw/cw.h | 202 +++---------------- src/cw/cw_inline.c | 203 +++++++++++++++++++ src/cw/dot11.h | 75 ++----- src/cw/dot11_inline.c | 76 +++++++ src/cw/format.c | 24 +++ src/cw/format.h | 26 +-- src/cw/format_dot11_fc.c | 2 +- src/cw/lw.h | 77 +------- src/cw/lw_inline.c | 77 ++++++++ src/cw/mbag.c | 414 +++++++++++++++++++++++++++++++++++++++ src/cw/mbag.h | 353 ++++----------------------------- src/cw/message_set.c | 6 +- src/cw/strheap.c | 11 ++ src/cw/strheap.h | 10 +- src/cw/timer.h | 14 +- src/cw/timer_inline.c | 15 ++ 22 files changed, 980 insertions(+), 760 deletions(-) create mode 100644 src/cw/capwap_inline.c create mode 100644 src/cw/cw_inline.c create mode 100644 src/cw/dot11_inline.c create mode 100644 src/cw/lw_inline.c create mode 100644 src/cw/timer_inline.c diff --git a/src/cw/acpriolist.c b/src/cw/acpriolist.c index aab4775e..f9d56570 100644 --- a/src/cw/acpriolist.c +++ b/src/cw/acpriolist.c @@ -71,4 +71,14 @@ cw_acprio_t * cw_acpriolist_add(cw_acpriolist_t l, const char *name,int name_len } +int cw_acpriolist_get(cw_acpriolist_t l, char * acname){ + cw_acprio_t ps,*pf; + ps.name=acname; + + pf=mavl_get(l,&ps); + if (!pf) + return 256; + return pf->prio; +} + diff --git a/src/cw/acpriolist.h b/src/cw/acpriolist.h index 6cf740ed..56d3fa54 100644 --- a/src/cw/acpriolist.h +++ b/src/cw/acpriolist.h @@ -34,15 +34,9 @@ typedef struct mavl * cw_acpriolist_t; extern cw_acpriolist_t cw_acpriolist_create(); cw_acprio_t * cw_acpriolist_add(cw_acpriolist_t l, const char *name,int name_len, uint8_t prio); -static inline int cw_acpriolist_get(cw_acpriolist_t l, char * acname){ - cw_acprio_t ps,*pf; - ps.name=acname; - - pf=mavl_get(l,&ps); - if (!pf) - return 256; - return pf->prio; -} +int cw_acpriolist_get(cw_acpriolist_t l, char * acname); + + #define cw_acpriolist_del(l,s) mavl_del(l,s) #define cw_acpriolist_set(l,n,nl,p) cw_acpriolist_add(l,n,nl,p) diff --git a/src/cw/action.c b/src/cw/action.c index e891d860..100b7563 100644 --- a/src/cw/action.c +++ b/src/cw/action.c @@ -32,7 +32,7 @@ */ -static inline int cw_action_in_cmp(const void *elem1, const void *elem2) +static int cw_action_in_cmp(const void *elem1, const void *elem2) { struct cw_action_in *e1 = (struct cw_action_in *) elem1; struct cw_action_in *e2 = (struct cw_action_in *) elem2; diff --git a/src/cw/capwap.h b/src/cw/capwap.h index 7fe05790..865c376f 100644 --- a/src/cw/capwap.h +++ b/src/cw/capwap.h @@ -581,40 +581,15 @@ extern struct cw_strlist_elem mbag_item_strings[]; #define cw_strerror(rc) cw_strrc(rc) */ -static inline const char * cw_strerror(int rc) { - if (rc<0){ - if (errno==EAGAIN) - return "Timed out"; - return strerror(errno); - } - return cw_strresult(rc); -} + +const char * cw_strerror(int rc); +int cw_rcok(int rc); +const char *cw_strelemp_(cw_strheap_t h, int msg_id); + + + #define cw_strrc cw_strerror -static inline int cw_rcok(int rc) -{ - if (rc==0 || rc==2){ - return 1; - } - return 0; -} - - -/** - *@defgroup CW CW - *@{ - */ - -static inline const char *cw_strelemp_(cw_strheap_t h, int msg_id) -{ - const char *rc = cw_strheap_get(h, msg_id); - if (rc) - return rc; - return cw_strheap_get(h, CW_STR_STOP); -} - -/**@}*/ - #define cw_strelemp(p,id) cw_strelemp_((p)->strelem,id) diff --git a/src/cw/capwap_cisco.h b/src/cw/capwap_cisco.h index 54c47ebd..bd5166b9 100644 --- a/src/cw/capwap_cisco.h +++ b/src/cw/capwap_cisco.h @@ -113,36 +113,16 @@ -/** - * Add a Cisco AP Timesync message element to a buffer - * @param dst destination buffer - * @param time a unix timestamp - * @param type of time - * @return number of bytes put (5) - */ -static inline int cw_put_cisco_ap_timesync(uint8_t * dst, time_t time, uint8_t type) -{ - cw_put_dword(dst , time); - cw_put_byte(dst + 4, type); - return 5; +int cw_put_cisco_ap_timesync(uint8_t * dst, time_t time, uint8_t type); + -} int cw_out_cisco_ap_timesync(struct conn *conn,struct cw_action_out * a,uint8_t *dst); -static inline int cw_addelem_cisco_ap_regulatory_domain(uint8_t *dst, struct radioinfo * ri){ - uint8_t *d=dst+10; - - d+=cw_put_byte(d,ri->rid); /* Band ID */ - d+=cw_put_byte(d,1); /* Set True/False */ - d+=cw_put_byte(d,ri->rid); /* Slot ID */ - d+=cw_put_word(d,ri->regDomain); - return 5 + cw_put_elem_vendor_hdr(dst, CW_VENDOR_ID_CISCO, CW_CISCO_AP_REGULATORY_DOMAIN, 5); -} - +int cw_addelem_cisco_ap_regulatory_domain(uint8_t *dst, struct radioinfo * ri); /** @@ -162,33 +142,10 @@ static inline int cw_addelem_cisco_mwar(uint8_t *dst, struct ac_info *acinfo){ } */ -/** - * Add a Cisco Certificate payload message element - * @param dst destination buffer - * @param src pointer to DER certificate - * @param len length of certificate - * @return number of bytes put - */ -static inline int cw_addelem_cisco_certificate(uint8_t*dst,uint8_t*src,int len){ - int l = lw_put_certificate(dst+10,src,len); - return l+cw_put_elem_vendor_hdr(dst,CW_VENDOR_ID_CISCO,CW_CISCO_CERTIFICATE,l); -} +int cw_readelem_cisco_station_cfg(uint8_t *src,int len); +int cw_addelem_cisco_certificate(uint8_t*dst,uint8_t*src,int len); -/* -static inline int cw_addelem_cisco_wtp_radio_cfg(uint8_t * dst,struct radioinfo *ri){ - int l = lw_put_80211_wtp_wlan_radio_configuration(dst+10,ri); - return l+cw_put_elem_vendor_hdr(dst,CW_VENDOR_ID_CISCO,CW_CISCO_STATION_CFG,l); -} -*/ - - -static inline int cw_readelem_cisco_station_cfg(uint8_t *src,int len){ - -// lw_readelem_ - return 0; -} - extern const char * cw_cisco_id_to_str(int elem_id); int cw_readelem_cisco_wtp_radio_cfg(int elem_id,uint8_t *elem, int len,struct radioinfo *ri); diff --git a/src/cw/capwap_inline.c b/src/cw/capwap_inline.c new file mode 100644 index 00000000..a9f0bb8e --- /dev/null +++ b/src/cw/capwap_inline.c @@ -0,0 +1,39 @@ +#include "capwap.h" + + +const char * cw_strerror(int rc) { + if (rc<0){ + if (errno==EAGAIN) + return "Timed out"; + return strerror(errno); + } + return cw_strresult(rc); +} + + + +int cw_rcok(int rc) +{ + if (rc==0 || rc==2){ + return 1; + } + return 0; +} + + +/** + *@defgroup CW CW + *@{ + */ + +const char *cw_strelemp_(cw_strheap_t h, int msg_id) +{ + const char *rc = cw_strheap_get(h, msg_id); + if (rc) + return rc; + return cw_strheap_get(h, CW_STR_STOP); +} + +/**@}*/ + + diff --git a/src/cw/cw.h b/src/cw/cw.h index 1910f9d4..9b118482 100644 --- a/src/cw/cw.h +++ b/src/cw/cw.h @@ -141,43 +141,16 @@ struct cw_MsgDef{ }; typedef struct cw_MsgDef cw_msgdef_t; -/** - * Get length wireless specific data - * @param th Pointer to packet - * @return length of wireless specific data - * - * Call this function only if the W flag is set - */ -static inline int cw_get_hdr_ws_len(uint8_t * th) -{ - if (!cw_get_hdr_flag_m(th)){ - return *(th + 8); - } - return *(th + 9 + cw_get_hdr_rmac_len(th)); -} -/** - * Get pointer to wireless specific data - * @param th Pointer to packet - * @return Pointer to data - * - * Call this function only if the W flag is set - */ -static inline uint8_t *cw_get_hdr_ws_data(uint8_t * th) -{ - if (!cw_get_hdr_flag_m(th)) - return th + 9; - return (th + 10 + cw_get_hdr_rmac_len(th)); -} + +int cw_get_hdr_ws_len(uint8_t * th); +uint8_t *cw_get_hdr_ws_data(uint8_t * th); + #define cw_get_hdr_msg_offset(th) (4*cw_get_hdr_hlen(th)) -static inline uint8_t * cw_get_hdr_payload_ptr(uint8_t *th) -{ - return th+cw_get_hdr_msg_offset(th); -} - +uint8_t * cw_get_hdr_payload_ptr(uint8_t *th); #define cw_get_hdr_msg_elems_offset(th) (cw_get_hdr_msg_offset(th)+8) @@ -185,46 +158,9 @@ static inline uint8_t * cw_get_hdr_payload_ptr(uint8_t *th) - -/** - * Set the HLEN field of a CAWAP Header - * @param th pointer to the header - * @param hlen value to set (Header Length) - */ -static inline void cw_set_hdr_hlen(uint8_t * th, int hlen) -{ - uint32_t d = cw_get_dword(th); - d &= (0x1f << 19) ^ 0xffffffff; - d |= ((hlen) & 0x1f) << 19; - cw_set_dword(th, d); -} - -/** - * Set the WBID field of a CAWAP Header - * @param th pointer to the header - * @param wbid value to set (Wireless ID) - */ -static inline void cw_set_hdr_wbid(uint8_t * th, int wbid) -{ - uint32_t d = cw_get_dword(th); - d &= (0x1f << 9) ^ 0xffffffff; - d |= ((wbid) & 0x1f) << 9; - cw_set_dword(th, d); -} - -/** - * Set the RID field of a CAWAP Header - * @param th pointer to the header - * @param rid value to set (Radio ID) - */ -static inline void cw_set_hdr_rid(uint8_t * th, int rid) -{ - uint32_t d = cw_get_dword(th); - d &= (0x1f << 14) ^ 0xffffffff; - d |= ((rid) & 0x1f) << 14; - cw_set_dword(th, d); -} - +void cw_set_hdr_hlen(uint8_t * th, int hlen); +void cw_set_hdr_wbid(uint8_t * th, int wbid); +void cw_set_hdr_rid(uint8_t * th, int rid); @@ -282,49 +218,17 @@ static inline void cw_set_hdr_rid(uint8_t * th, int rid) #define cw_is_response(msg_id) (!is_response(msg_id)) -static inline uint8_t *cw_get_hdr_msg_elems_ptr(uint8_t * m) -{ - return cw_get_msg_elems_ptr(m + cw_get_hdr_msg_offset(m)); -} +uint8_t *cw_get_hdr_msg_elems_ptr(uint8_t * m); +uint8_t *cw_get_hdr_msg_ptr(uint8_t * rawmsg); + -static inline uint8_t *cw_get_hdr_msg_ptr(uint8_t * rawmsg) -{ - return rawmsg + cw_get_hdr_msg_offset(rawmsg); -} #define cw_get_hdr_msg_id(ptr)\ cw_get_msg_id(cw_get_hdr_msg_ptr(ptr)) #define cw_get_hdr_msg_type cw_get_hdr_msg_id -static inline int cw_get_hdr_msg_total_len(uint8_t * rawmsg) -{ - - int offset = cw_get_hdr_msg_offset(rawmsg); - return offset + cw_get_msg_elems_len(rawmsg + offset) + 8; -} - - - -static inline int cw_set_hdr_rmac(uint8_t * th, bstr_t rmac) -{ - if (!rmac) { - cw_set_hdr_flags(th, CAPWAP_FLAG_HDR_M, 0); - cw_set_hdr_hlen(th, 2); - return 0; - } - int rmac_len = bstr_len(rmac); - memcpy(cw_get_hdr_rmac(th), rmac, rmac_len + 1); - cw_set_hdr_flags(th, CAPWAP_FLAG_HDR_M, 1); - - int hlen = 4 + rmac_len / 4; - - if (rmac_len % 4 != 0) { - hlen++; - } - cw_set_hdr_hlen(th, hlen); - return 1; -} - +int cw_get_hdr_msg_total_len(uint8_t * rawmsg); +int cw_set_hdr_rmac(uint8_t * th, bstr_t rmac); @@ -384,24 +288,8 @@ static inline int cw_set_hdr_rmac(uint8_t * th, bstr_t rmac) (cw_put_dword(dst, (((uint32_t)type)<<16) | (len)),4) -/** - * Put a message element header for a message to contain a vendor specific payload - * @param dst pointer to destination buffer - * @param vendorid vendorid - * @param elemid element id of vendor specific data - * @len length of vendor specific data - * @return the number of bytes put (always 10) - */ -static inline int cw_put_elem_vendor_hdr(uint8_t * dst, uint32_t vendorid, - uint16_t elemid, uint16_t len) -{ - - cw_put_elem_hdr(dst, CAPWAP_ELEM_VENDOR_SPECIFIC_PAYLOAD, len + 6); - cw_put_dword(dst + 4, vendorid); - cw_put_word(dst + 8, elemid); - return 10; -} - +int cw_put_elem_vendor_hdr(uint8_t * dst, uint32_t vendorid, + uint16_t elemid, uint16_t len); @@ -422,48 +310,15 @@ extern int cw_put_mbag_item(uint8_t * dst, struct mbag_item *item); #define cw_put_encryption_capabilities_7(dst,cap) cw_put_word(dst,cap) -/** - * Add a message element to a buffer - * @param dst pointer to buffer - * @type message element type - * @data pointer to data - * @length of message element - * @return the number of bytes put - */ -static inline int cw_addelem(uint8_t * dst, uint16_t type, uint8_t * data, uint16_t len) -{ - int l = cw_put_elem_hdr(dst, type, len); - return l + cw_put_data(dst + l, data, len); -} - - -static inline int cw_addelem_bstr(uint8_t * dst, uint16_t type, const bstr_t bstr) -{ - return cw_addelem(dst, type, bstr_data(bstr), bstr_len(bstr)); -} - - -static inline int cw_put_elem_result_code(uint8_t * dst, uint32_t code) -{ - cw_put_dword(dst + 4, code); - return 4 + cw_put_elem_hdr(dst, CW_ELEM_RESULT_CODE, 4); -} +int cw_addelem(uint8_t * dst, uint16_t type, uint8_t * data, uint16_t len); +int cw_addelem_bstr(uint8_t * dst, uint16_t type, const bstr_t bstr); +int cw_put_elem_result_code(uint8_t * dst, uint32_t code); +int cw_put_version(uint8_t * dst, uint16_t subelem_id, bstrv_t v); - -static inline int cw_put_version(uint8_t * dst, uint16_t subelem_id, bstrv_t v) -{ - uint8_t *d = dst; - d += cw_put_dword(d, bstrv_get_vendor_id(v)); - d += cw_put_dword(d, (subelem_id << 16) | bstrv_len(v)); - d += cw_put_data(d, bstrv_data(v), bstrv_len(v)); - return d - dst; -} - - extern int cw_put_ac_status(uint8_t * dst, struct cw_ac_status *s, struct conn *conn); @@ -598,28 +453,15 @@ extern int cw_radio_set_admin_state(mbag_t radios,int rid, int state, int cause) //extern int cw_put_elem_radio_operational_state(uint8_t * dst, int rid, int os, int d7mode); -static inline int cw_put_elem_radio_operational_state(uint8_t * dst, int rid, int state, int cause) { - cw_put_byte(dst+4,rid); - cw_put_byte(dst+5,state); - cw_put_byte(dst+6,cause); - return 3+cw_put_elem_hdr(dst,CW_ELEM_RADIO_OPERATIONAL_STATE,3); -} +int cw_put_elem_radio_operational_state(uint8_t * dst, int rid, int state, int cause); +int cw_put_elem_radio_administrative_state(uint8_t * dst, int rid, int state); -static inline int cw_put_elem_radio_administrative_state(uint8_t * dst, int rid, int state) { - cw_put_byte(dst+4,rid); - cw_put_byte(dst+5,state); - return 2+cw_put_elem_hdr(dst,CW_ELEM_RADIO_ADMINISTRATIVE_STATE,2); -} uint8_t *cw_init_data_keep_alive_msg(uint8_t * buffer,uint8_t *rmac); -static inline int cw_put_elem_session_id(uint8_t *dst, uint8_t *session_id, int len){ - memcpy(dst+4,session_id,len); - return len+cw_put_elem_hdr(dst,CW_ELEM_SESSION_ID,len); -} - int cw_out_radio_generic(struct conn *conn, struct cw_action_out *a, uint8_t * dst); +int cw_put_elem_session_id(uint8_t *dst, uint8_t *session_id, int len); /** diff --git a/src/cw/cw_inline.c b/src/cw/cw_inline.c new file mode 100644 index 00000000..33e4d5fa --- /dev/null +++ b/src/cw/cw_inline.c @@ -0,0 +1,203 @@ +#include "cw.h" + +/** + * Get length wireless specific data + * @param th Pointer to packet + * @return length of wireless specific data + * + * Call this function only if the W flag is set + */ +int cw_get_hdr_ws_len(uint8_t * th) +{ + if (!cw_get_hdr_flag_m(th)){ + return *(th + 8); + } + return *(th + 9 + cw_get_hdr_rmac_len(th)); +} + +/** + * Get pointer to wireless specific data + * @param th Pointer to packet + * @return Pointer to data + * + * Call this function only if the W flag is set + */ +uint8_t *cw_get_hdr_ws_data(uint8_t * th) +{ + if (!cw_get_hdr_flag_m(th)) + return th + 9; + return (th + 10 + cw_get_hdr_rmac_len(th)); +} + + + +uint8_t * cw_get_hdr_payload_ptr(uint8_t *th) +{ + return th+cw_get_hdr_msg_offset(th); +} + + + +/** + * Set the HLEN field of a CAWAP Header + * @param th pointer to the header + * @param hlen value to set (Header Length) + */ +void cw_set_hdr_hlen(uint8_t * th, int hlen) +{ + uint32_t d = cw_get_dword(th); + d &= (0x1f << 19) ^ 0xffffffff; + d |= ((hlen) & 0x1f) << 19; + cw_set_dword(th, d); +} + +/** + * Set the WBID field of a CAWAP Header + * @param th pointer to the header + * @param wbid value to set (Wireless ID) + */ +void cw_set_hdr_wbid(uint8_t * th, int wbid) +{ + uint32_t d = cw_get_dword(th); + d &= (0x1f << 9) ^ 0xffffffff; + d |= ((wbid) & 0x1f) << 9; + cw_set_dword(th, d); +} + +/** + * Set the RID field of a CAWAP Header + * @param th pointer to the header + * @param rid value to set (Radio ID) + */ +void cw_set_hdr_rid(uint8_t * th, int rid) +{ + uint32_t d = cw_get_dword(th); + d &= (0x1f << 14) ^ 0xffffffff; + d |= ((rid) & 0x1f) << 14; + cw_set_dword(th, d); +} + + +uint8_t *cw_get_hdr_msg_elems_ptr(uint8_t * m) +{ + return cw_get_msg_elems_ptr(m + cw_get_hdr_msg_offset(m)); +} + +uint8_t *cw_get_hdr_msg_ptr(uint8_t * rawmsg) +{ + return rawmsg + cw_get_hdr_msg_offset(rawmsg); +} + +int cw_get_hdr_msg_total_len(uint8_t * rawmsg) +{ + + int offset = cw_get_hdr_msg_offset(rawmsg); + return offset + cw_get_msg_elems_len(rawmsg + offset) + 8; +} + + + +int cw_set_hdr_rmac(uint8_t * th, bstr_t rmac) +{ + if (!rmac) { + cw_set_hdr_flags(th, CAPWAP_FLAG_HDR_M, 0); + cw_set_hdr_hlen(th, 2); + return 0; + } + int rmac_len = bstr_len(rmac); + memcpy(cw_get_hdr_rmac(th), rmac, rmac_len + 1); + cw_set_hdr_flags(th, CAPWAP_FLAG_HDR_M, 1); + + int hlen = 4 + rmac_len / 4; + + if (rmac_len % 4 != 0) { + hlen++; + } + cw_set_hdr_hlen(th, hlen); + return 1; +} + + +/** + * Put a message element header for a message to contain a vendor specific payload + * @param dst pointer to destination buffer + * @param vendorid vendorid + * @param elemid element id of vendor specific data + * @len length of vendor specific data + * @return the number of bytes put (always 10) + */ +int cw_put_elem_vendor_hdr(uint8_t * dst, uint32_t vendorid, + uint16_t elemid, uint16_t len) +{ + + cw_put_elem_hdr(dst, CAPWAP_ELEM_VENDOR_SPECIFIC_PAYLOAD, len + 6); + cw_put_dword(dst + 4, vendorid); + cw_put_word(dst + 8, elemid); + return 10; +} + + + + + +/** + * Add a message element to a buffer + * @param dst pointer to buffer + * @type message element type + * @data pointer to data + * @length of message element + * @return the number of bytes put + */ +int cw_addelem(uint8_t * dst, uint16_t type, uint8_t * data, uint16_t len) +{ + int l = cw_put_elem_hdr(dst, type, len); + return l + cw_put_data(dst + l, data, len); +} + + +int cw_addelem_bstr(uint8_t * dst, uint16_t type, const bstr_t bstr) +{ + return cw_addelem(dst, type, bstr_data(bstr), bstr_len(bstr)); +} + + +int cw_put_elem_result_code(uint8_t * dst, uint32_t code) +{ + cw_put_dword(dst + 4, code); + return 4 + cw_put_elem_hdr(dst, CW_ELEM_RESULT_CODE, 4); +} + + + + + + +int cw_put_version(uint8_t * dst, uint16_t subelem_id, bstrv_t v) +{ + uint8_t *d = dst; + d += cw_put_dword(d, bstrv_get_vendor_id(v)); + d += cw_put_dword(d, (subelem_id << 16) | bstrv_len(v)); + d += cw_put_data(d, bstrv_data(v), bstrv_len(v)); + return d - dst; +} + + +int cw_put_elem_radio_operational_state(uint8_t * dst, int rid, int state, int cause) { + cw_put_byte(dst+4,rid); + cw_put_byte(dst+5,state); + cw_put_byte(dst+6,cause); + return 3+cw_put_elem_hdr(dst,CW_ELEM_RADIO_OPERATIONAL_STATE,3); +} + +int cw_put_elem_radio_administrative_state(uint8_t * dst, int rid, int state) { + cw_put_byte(dst+4,rid); + cw_put_byte(dst+5,state); + return 2+cw_put_elem_hdr(dst,CW_ELEM_RADIO_ADMINISTRATIVE_STATE,2); +} + +int cw_put_elem_session_id(uint8_t *dst, uint8_t *session_id, int len){ + memcpy(dst+4,session_id,len); + return len+cw_put_elem_hdr(dst,CW_ELEM_SESSION_ID,len); +} + + diff --git a/src/cw/dot11.h b/src/cw/dot11.h index ae17ed5f..e7c7111e 100644 --- a/src/cw/dot11.h +++ b/src/cw/dot11.h @@ -131,14 +131,7 @@ extern const uint8_t dot11_tab_br[256]; #define dot11_put_qword(dst,v) ((*((uint64_t*)(dst))=htobe64(v)),8) -static inline uint16_t dot11_get_word(uint8_t * ptr) -{ - uint16_t w; - w = dot11_get_byte(ptr + 1); - w |= dot11_get_byte(ptr) << 8; - return w; -} - +uint16_t dot11_get_word(uint8_t * ptr); @@ -154,10 +147,9 @@ static inline uint16_t dot11_get_word(uint8_t * ptr) #define dot11_get_duration(frame) dot11_get_word(frame+2) -static inline void dot11_get_address(uint8_t * dst, uint8_t * frame) -{ - memcpy(dst, frame, 6); -} + +void dot11_get_address(uint8_t * dst, uint8_t * frame); + #define dot11_get_address1(dst,frame) dot11_get_address(dst,frame+4) #define dot11_get_address2(dst,frame) dot11_get_address(dst,frame+4+1*6) @@ -180,12 +172,7 @@ static inline void dot11_get_address(uint8_t * dst, uint8_t * frame) #define dot11_fc_put_frame_control(dst,fc) dot11_put_word(dst,fc) -static inline int dot11_put_frame_control(uint8_t * dst, int fctype, int flags) -{ - uint16_t fc = fctype | flags; - return dot11_fc_put_frame_control(dst, fc); -} - +int dot11_put_frame_control(uint8_t * dst, int fctype, int flags); /** * @defgroup DOT11_TIMER Timer @@ -193,26 +180,10 @@ static inline int dot11_put_frame_control(uint8_t * dst, int fctype, int flags) */ extern uint64_t dot11_timer_offset; -/** - * Get the current timestamp - * @return current timestamp in microseconds - */ -static inline uint64_t dot11_timer_get() -{ - struct timeval tv; - gettimeofday(&tv, NULL); - return 1000000 * tv.tv_sec + tv.tv_usec - dot11_timer_offset; -} +uint64_t dot11_timer_get(); +void dot11_timer_set(uint64_t val); - -static inline void dot11_timer_set(uint64_t val) -{ - struct timeval tv; - gettimeofday(&tv, NULL); - dot11_timer_offset = 1000000 * tv.tv_sec + tv.tv_usec - val; -} - /** * @} */ @@ -230,13 +201,10 @@ static inline void dot11_timer_set(uint64_t val) #define dot11_put_address(dst,addr) (memcpy(dst,addr,6),6) #define dot11_put_sequence_control(dst,v) (dot11_put_word(dst,v)) #define dot11_put_capability(dst,v) dot11_put_word(dst,v) -static inline int dot11_put_ssid(uint8_t *dst,uint8_t * ssid,int len){ - dot11_put_byte(dst,DOT11_ELEM_SSID); - dot11_put_byte(dst+1,len); - memcpy(dst+2,ssid,len); - return len; +int dot11_put_ssid(uint8_t *dst,uint8_t * ssid,int len); + + -} /** * Convert a rate, specified as float to an inzteger, used @@ -253,30 +221,11 @@ static inline int dot11_put_ssid(uint8_t *dst,uint8_t * ssid,int len){ */ #define dot11_rate2float(rate) (((float)(rate))/2.0) -static inline int dot11_put_supported_rates(uint8_t *dst, float *basic, float *rates){ - uint8_t *d = dst+2; - while(*basic != 0.0){ - *d++ = 0x80 | dot11_float2rate(*basic); - basic++; - } - while(*rates != 0.0){ - *d++ = dot11_float2rate(*rates); - rates++; - } - *(dst)=DOT11_ELEM_SUPPORTED_RATES; - *(dst+1) = d-(dst+2); - - return d-dst; -} +int dot11_put_supported_rates(uint8_t *dst, float *basic, float *rates); +int dot11_put_dsss_param_set(uint8_t *dst,int ch); -static inline int dot11_put_dsss_param_set(uint8_t *dst,int ch) { - dot11_put_byte(dst,DOT11_ELEM_DSSS_PARAM_SET); - dot11_put_byte(dst+1,1); - dot11_put_byte(dst+2,ch); - return 3; -} extern int dot11_create_beacon(uint8_t *dst); diff --git a/src/cw/dot11_inline.c b/src/cw/dot11_inline.c new file mode 100644 index 00000000..8aa84d3c --- /dev/null +++ b/src/cw/dot11_inline.c @@ -0,0 +1,76 @@ +#include "dot11.h" + + +uint16_t dot11_get_word(uint8_t * ptr) +{ + uint16_t w; + w = dot11_get_byte(ptr + 1); + w |= dot11_get_byte(ptr) << 8; + return w; +} + +void dot11_get_address(uint8_t * dst, uint8_t * frame) +{ + memcpy(dst, frame, 6); +} + +int dot11_put_frame_control(uint8_t * dst, int fctype, int flags) +{ + uint16_t fc = fctype | flags; + return dot11_fc_put_frame_control(dst, fc); +} + +/** + * Get the current timestamp + * @return current timestamp in microseconds + */ +uint64_t dot11_timer_get() +{ + struct timeval tv; + gettimeofday(&tv, NULL); + return 1000000 * tv.tv_sec + tv.tv_usec - dot11_timer_offset; +} + + + +void dot11_timer_set(uint64_t val) +{ + struct timeval tv; + gettimeofday(&tv, NULL); + dot11_timer_offset = 1000000 * tv.tv_sec + tv.tv_usec - val; +} + +int dot11_put_ssid(uint8_t *dst,uint8_t * ssid,int len){ + dot11_put_byte(dst,DOT11_ELEM_SSID); + dot11_put_byte(dst+1,len); + memcpy(dst+2,ssid,len); + return len; + +} + +int dot11_put_supported_rates(uint8_t *dst, float *basic, float *rates){ + uint8_t *d = dst+2; + while(*basic != 0.0){ + *d++ = 0x80 | dot11_float2rate(*basic); + basic++; + } + while(*rates != 0.0){ + *d++ = dot11_float2rate(*rates); + rates++; + } + *(dst)=DOT11_ELEM_SUPPORTED_RATES; + *(dst+1) = d-(dst+2); + + return d-dst; +} + + +int dot11_put_dsss_param_set(uint8_t *dst,int ch) { + + dot11_put_byte(dst,DOT11_ELEM_DSSS_PARAM_SET); + dot11_put_byte(dst+1,1); + dot11_put_byte(dst+2,ch); + return 3; +} + + diff --git a/src/cw/format.c b/src/cw/format.c index edcc8652..b804a7b9 100644 --- a/src/cw/format.c +++ b/src/cw/format.c @@ -110,4 +110,28 @@ int format_scan_hex_bytes(uint8_t *dst,const char *s, int len) return err; } +char *format_s_hex_bytes(char *dst, const char *format, const char *delim, + const uint8_t * src, int len) +{ + format_hex_bytes(dst, format, delim, src, len); + return dst; +} + + + +int format_hdr_flags(char *dst, uint8_t * th) +{ + char *s = dst; + s += sprintf(s, "%s", "("); + s += sprintf(s, "%s", cw_get_hdr_flag_t(th) ? "T" : ""); + s += sprintf(s, "%s", cw_get_hdr_flag_f(th) ? "F" : ""); + s += sprintf(s, "%s", cw_get_hdr_flag_l(th) ? "L" : ""); + s += sprintf(s, "%s", cw_get_hdr_flag_w(th) ? "W" : ""); + s += sprintf(s, "%s", cw_get_hdr_flag_m(th) ? "M" : ""); + s += sprintf(s, "%s", cw_get_hdr_flag_k(th) ? "K" : ""); + s += sprintf(s, "%s", ")"); + return s - dst; + +} + diff --git a/src/cw/format.h b/src/cw/format.h index 87e2b96a..8138a1cb 100644 --- a/src/cw/format.h +++ b/src/cw/format.h @@ -31,12 +31,10 @@ extern int format_hex_bytes(char *dst, const char *format, const char *delim, const uint8_t * src, int len); -static inline char *format_s_hex_bytes(char *dst, const char *format, const char *delim, - const uint8_t * src, int len) -{ - format_hex_bytes(dst, format, delim, src, len); - return dst; -} +char *format_s_hex_bytes(char *dst, const char *format, const char *delim, + const uint8_t * src, int len); + + #define format_bin2hex(src,len) (format_s_hex_bytes((char[(len) * 2 + 1]) {0}, "%02X", "", src, len)) @@ -77,21 +75,7 @@ extern int format_scan_hex_bytes(uint8_t * dst, const char *s, int len); #define format_mac(dst,src,len)\ format_hex_bytes(dst,"%02x",":",src,len) -static inline int format_hdr_flags(char *dst, uint8_t * th) -{ - char *s = dst; - s += sprintf(s, "%s", "("); - s += sprintf(s, "%s", cw_get_hdr_flag_t(th) ? "T" : ""); - s += sprintf(s, "%s", cw_get_hdr_flag_f(th) ? "F" : ""); - s += sprintf(s, "%s", cw_get_hdr_flag_l(th) ? "L" : ""); - s += sprintf(s, "%s", cw_get_hdr_flag_w(th) ? "W" : ""); - s += sprintf(s, "%s", cw_get_hdr_flag_m(th) ? "M" : ""); - s += sprintf(s, "%s", cw_get_hdr_flag_k(th) ? "K" : ""); - s += sprintf(s, "%s", ")"); - return s - dst; - -} - +int format_hdr_flags(char *dst, uint8_t * th); int format_is_utf8(unsigned char *str, size_t len); diff --git a/src/cw/format_dot11_fc.c b/src/cw/format_dot11_fc.c index 4e6bf902..0014ecbc 100644 --- a/src/cw/format_dot11_fc.c +++ b/src/cw/format_dot11_fc.c @@ -2,7 +2,7 @@ #include "format.h" -static inline int add_flag(char *dst,int fc, int flag, char *name,char **delim) +static int add_flag(char *dst,int fc, int flag, char *name,char **delim) { if (! (fc&flag) ) return 0; diff --git a/src/cw/lw.h b/src/cw/lw.h index c6c098a0..be356b28 100644 --- a/src/cw/lw.h +++ b/src/cw/lw.h @@ -97,77 +97,14 @@ macro to avoid any side effects */ -/** - * Put some bytes to an output buffer - * @param dst Destination - * @param data Data to put - * @len length of data (iini bytes) - * @return The number of bytes put - */ -static inline int lw_put_data(uint8_t*dst,const uint8_t*data,uint16_t len) -{ - memcpy(dst,data,len); - return len; -} +int lw_put_data(uint8_t*dst,const uint8_t*data,uint16_t len); +int lw_put_bstr(uint8_t * dst, const bstr_t b); +int lw_put_bstr16(uint8_t * dst, const bstr16_t b); +int lw_put_str(uint8_t*dst,const uint8_t *str); +int lw_put_elem_hdr(uint8_t *dst,uint8_t type,uint16_t len); +int lw_put_vendor(uint8_t * dst, uint32_t vendorid, + uint16_t elemid, uint16_t len); -/** - * Put a #bstr_t to an output buffer - * @param dst Destination - * @param b bstr to put - * @return The number of bytes put - */ -static inline int lw_put_bstr(uint8_t * dst, const bstr_t b){ - lw_put_data(dst,bstr_data(b),bstr_len(b)); - return bstr_len(b); -} - -/** - * Put a #bstr16_t to an output buffer - * @param dst Destination - * @param b bstr16 to put - * @return The number of bytes put - */ -static inline int lw_put_bstr16(uint8_t * dst, const bstr16_t b){ - lw_put_data(dst,bstr16_data(b),bstr16_len(b)); - return bstr16_len(b); -} - - -/** - * Put a string to an output buffer - * @param dst Output buffer - * @param str zero-terminated string to put - * @return number of bytes put - */ -static inline int lw_put_str(uint8_t*dst,const uint8_t *str) { - return lw_put_data(dst,str,strlen((char*)str)); -} - - -static inline int lw_put_elem_hdr(uint8_t *dst,uint8_t type,uint16_t len) -{ - *dst=type; - *((uint16_t*)(dst+1)) = htons(len); - return 3; -} - - - -/** - * Put a message element header for a message to contain a vendor specific payload - * @param dst pointer to destination buffer - * @param vendorid vendorid - * @param elemid element id of vendor specific data - * @len length of vendor specific data - * @return the number of bytes put (always 10) - */ -static inline int lw_put_vendor(uint8_t * dst, uint32_t vendorid, - uint16_t elemid, uint16_t len) -{ - lw_put_dword(dst + 0, vendorid); - lw_put_word(dst + 4, elemid); - return 6; -} diff --git a/src/cw/lw_inline.c b/src/cw/lw_inline.c new file mode 100644 index 00000000..a68a2d26 --- /dev/null +++ b/src/cw/lw_inline.c @@ -0,0 +1,77 @@ +#include "lw.h" + +/** + * Put some bytes to an output buffer + * @param dst Destination + * @param data Data to put + * @len length of data (iini bytes) + * @return The number of bytes put + */ +int lw_put_data(uint8_t*dst,const uint8_t*data,uint16_t len) +{ + memcpy(dst,data,len); + return len; +} + +/** + * Put a #bstr_t to an output buffer + * @param dst Destination + * @param b bstr to put + * @return The number of bytes put + */ +int lw_put_bstr(uint8_t * dst, const bstr_t b){ + lw_put_data(dst,bstr_data(b),bstr_len(b)); + return bstr_len(b); +} + +/** + * Put a #bstr16_t to an output buffer + * @param dst Destination + * @param b bstr16 to put + * @return The number of bytes put + */ +int lw_put_bstr16(uint8_t * dst, const bstr16_t b){ + lw_put_data(dst,bstr16_data(b),bstr16_len(b)); + return bstr16_len(b); +} + + +/** + * Put a string to an output buffer + * @param dst Output buffer + * @param str zero-terminated string to put + * @return number of bytes put + */ +int lw_put_str(uint8_t*dst,const uint8_t *str) { + return lw_put_data(dst,str,strlen((char*)str)); +} + + +int lw_put_elem_hdr(uint8_t *dst,uint8_t type,uint16_t len) +{ + *dst=type; + *((uint16_t*)(dst+1)) = htons(len); + return 3; +} + + + +/** + * Put a message element header for a message to contain a vendor specific payload + * @param dst pointer to destination buffer + * @param vendorid vendorid + * @param elemid element id of vendor specific data + * @len length of vendor specific data + * @return the number of bytes put (always 10) + */ +int lw_put_vendor(uint8_t * dst, uint32_t vendorid, + uint16_t elemid, uint16_t len) +{ + lw_put_dword(dst + 0, vendorid); + lw_put_word(dst + 4, elemid); + return 6; +} + + + + diff --git a/src/cw/mbag.c b/src/cw/mbag.c index bb48b3b2..1cad9b86 100644 --- a/src/cw/mbag.c +++ b/src/cw/mbag.c @@ -395,3 +395,417 @@ void * mbag_get_data(mbag_t s, const char *id, const struct mbag_typedef * type, } + + + + + + + + + + + + + + + + + + + + +/***************************************************/ + + +void * mbag_get_raw(mbag_t s, const char *id, void * def) +{ + struct mbag_item *i = mbag_get(s, id); + if (!i) + return def; + return i->data; +} + + + +uint8_t mbag_get_byte(mbag_t s, const char *id, uint8_t def) +{ + struct mbag_item *i = mbag_get(s, id); + if (!i) + return def; + if (i->type != MBAG_BYTE) + return def; + return i->byte; +} + +uint16_t mbag_get_word(mbag_t s, const char *id, uint16_t def) +{ + struct mbag_item *i = mbag_get(s, id); + if (!i) + return def; + if (i->type != MBAG_WORD) + return def; + return i->word; +} + + + +uint32_t mbag_get_dword(mbag_t s, const char *id, uint32_t def) +{ + struct mbag_item *i = mbag_get(s, id); + if (!i) + return def; + if (i->type != MTYPE_DWORD) + return def; + return i->dword; +} + + +mbag_t mbag_i_get_mbag(mbag_t s, uint32_t id, mbag_t def) +{ + struct mbag_item *i = mbag_i_get(s, id); + if (!i) + return def; + if (i->type != MBAG_MBAG) + return def; + return i->data; +} + + +mbag_t mbag_get_mbag(mbag_t s, const char *id, mbag_t def) +{ + struct mbag_item *i = mbag_get(s, id); + if (!i) + return def; + if (i->type != MBAG_MBAG) + return def; + return i->data; +} + +mbag_item_t * mbag_set_bstrn(mbag_t s, const char *id, uint8_t * data, int len) +{ + struct mbag_item *i = mbag_item_create(s, id); + if (!i) + return NULL; + i->type = MBAG_BSTR; + i->data = bstr_create(data, len); + return i; +} + + + + +struct mavl *mbag_get_mavl(mbag_t s, const char *id) +{ + struct mbag_item *i = mbag_get(s, id); + if (!i) + return NULL; + if (i->type != MBAG_AVLTREE) + return NULL; + return i->data; +} + +int mbag_i_set_mavl(mbag_t s, uint32_t id, mavl_t t) +{ + struct mbag_item *i = mbag_i_item_create(s, id); + if (!i) + return 0; + i->type = MBAG_AVLTREE; + i->data = t; + return 1; +} + +int mbag_set_mavl(mbag_t s, const char *id, mavl_t t) +{ + struct mbag_item *i = mbag_item_create(s, id); + if (!i) + return 0; + i->type = MBAG_AVLTREE; + i->data = t; + return 1; +} + +/* +struct mavl *mbag_get_avltree_c(mbag_t s, const char *id, + struct mavl *(creator) ()) +{ + struct mavl * avltree = mbag_get_mavl(s, id); + if (avltree){ + return avltree; + } + + avltree = creator(); + if (!avltree) + return NULL; + mbag_set_mavl(s, id, avltree); + return avltree; +} +*/ + +mavl_t mbag_get_mavl_c(mbag_t s, const char *id, + mavl_t (creator) ()) +{ + struct mbag_item *i = mbag_get(s, id); + if (i) + return i->data; + + if (!creator) + return NULL; + mavl_t avltree = creator(); + if (!avltree) + return NULL; + mbag_set_mavl(s, id, avltree); + return avltree; +} + + +mavl_t mbag_get_mbag_c(mbag_t s, const char *id, + mavl_t (creator) ()) +{ + struct mbag_item *i = mbag_get(s, id); + if (i) + return i->data; + + if (!creator) + return NULL; + mavl_t avltree = creator(); + if (!avltree) + return NULL; + mbag_set_mbag(s, id, avltree); + return avltree; +} + + + +int mbag_inc_word(mbag_t s, const char * id,int n) +{ + uint16_t w = mbag_get_word(s,id,0); + mbag_set_word(s,id,w+n); + return 1; +} + + + +mavl_t mbag_i_get_mbag_c(mbag_t s, uint32_t iid, + mavl_t (creator) ()) +{ + struct mbag_item *i = mbag_i_get(s, iid); + if (i) + return i->data; + + if (!creator) + return NULL; + mavl_t avltree = creator(); + if (!avltree) + return NULL; + mbag_i_set_mbag(s, iid, avltree); + return avltree; +} + + + + +mavl_t mbag_i_get_mavl(mbag_t s, uint32_t id, + mavl_t (creator) ()) +{ + struct mbag_item *i = mbag_i_get(s, id); + if (i) + return i->data; + + if (!creator) + return NULL; + mavl_t avltree = creator(); + if (!avltree) + return NULL; + mbag_i_set_mavl(s, id, avltree); + return avltree; +} + + + + + + + + + + + + + + + + + + + + + +char *mbag_get_str(mbag_t s, const char *id, char *def) +{ + struct mbag_item *i = mbag_get(s, id); + if (!i) + return def; + return i->data; + +}; + +int mbag_set_str(mbag_t s, const char *id, const char *str) +{ + struct mbag_item *i = mbag_item_create(s, id); + if (!i) + return 0; + i->type = MBAG_STR; + i->data = strdup(str); + return 1; +} + + +int mbag_set_sockaddr(mbag_t s, const char *id, const struct sockaddr * sa) +{ + struct mbag_item *i = mbag_item_create(s, id); + if (!i) + return 0; + struct sockaddr_storage * sad = malloc(sizeof(struct sockaddr_storage)); + if (!sad){ + free(i); + return 0; + } + sock_copyaddr(sad,sa); + i->type = MBAG_SOCKADDR; + i->data = sad; + return 1; + +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/*******/ + +void *mbag_item_get_data_ptr(struct mbag_item *item) +{ + if (item->type == MBAG_FUN ) + { + struct mbag_item_fundef *fundef = + (struct mbag_item_fundef *) item->data; + if (!fundef) + return NULL; + return fundef->get(fundef->arg); + } + return item->data; +} + + +void mbag_item_release_data_ptr(struct mbag_item *item, void *data) +{ + if (item->type == MBAG_FUN) + { + struct mbag_item_fundef *fundef = + (struct mbag_item_fundef *) item->data; + if (!fundef) + return; + if (!fundef->free) + return; + + return fundef->free(fundef->arg, data); + } + +} + +int mbag_set_strn(mbag_t s, const char *id, const char *str, int n) +{ + struct mbag_item *i = mbag_item_create(s, id); + if (!i) + return 0; + i->type = MBAG_STR; + i->data = strndup(str, n); + return 1; +} + +int mbag_set_bstr16n(mbag_t s, const char *id, uint8_t * data, int len) +{ + struct mbag_item *i = mbag_item_create(s, id); + if (!i) + return 0; + i->type = MBAG_BSTR16; + i->data = bstr16_create(data, len); + return 1; +} + + + +mbag_item_t * mbag_set_const_ptr(mbag_t s, const char *id, void *ptr) +{ + struct mbag_item *i = mbag_item_create(s, id); + if (!i) + return 0; + i->type = MBAG_CONST_DATA; + i->data = ptr; + return i; +} + + +int mbag_set_ptr(mbag_t s, const char *id, void *ptr) +{ + struct mbag_item *i = mbag_item_create(s, id); + if (!i) + return 0; + i->type = MBAG_PTR; + i->data = ptr; + return 1; +} + + + +int mbag_set_fun(mbag_t s, const char *id, + void *(*funget) (void *arg), + void (*funfree) (void *arg, void *data), void *arg) +{ + struct mbag_item *i = mbag_item_create(s, id); + if (!i) + return 0; + + struct mbag_item_fundef *fundef = malloc(sizeof(struct mbag_item_fundef)); + i->data = fundef; + if (!fundef) + return 0; + + fundef->get = funget; + fundef->free = funfree; + fundef->arg = arg; + i->type=MBAG_FUN; + + return 1; +} + + + + + + + diff --git a/src/cw/mbag.h b/src/cw/mbag.h index 96d80761..6213fd83 100644 --- a/src/cw/mbag.h +++ b/src/cw/mbag.h @@ -213,250 +213,59 @@ mbag_item_t *mbag_get(mbag_t s, const char *id); #define mbag_get_bstr(m,i,d) mbag_get_data(m,i,MBAG_BSTR,d) #define mbag_get_bstr16(m,i,d) mbag_get_data(m,i,MBAG_BSTR16,d) -static inline void * mbag_get_raw(mbag_t s, const char *id, void * def) -{ - struct mbag_item *i = mbag_get(s, id); - if (!i) - return def; - return i->data; -} +void * mbag_get_raw(mbag_t s, const char *id, void * def); +uint8_t mbag_get_byte(mbag_t s, const char *id, uint8_t def); +uint16_t mbag_get_word(mbag_t s, const char *id, uint16_t def); +uint32_t mbag_get_dword(mbag_t s, const char *id, uint32_t def); +mbag_t mbag_i_get_mbag(mbag_t s, uint32_t id, mbag_t def); +mbag_t mbag_get_mbag(mbag_t s, const char *id, mbag_t def); +mbag_item_t * mbag_set_bstrn(mbag_t s, const char *id, uint8_t * data, int len); +struct mavl *mbag_get_mavl(mbag_t s, const char *id); +int mbag_i_set_mavl(mbag_t s, uint32_t id, mavl_t t); +int mbag_set_mavl(mbag_t s, const char *id, mavl_t t); +mavl_t mbag_get_mavl_c(mbag_t s, const char *id, + mavl_t (creator) ()); +mavl_t mbag_get_mbag_c(mbag_t s, const char *id, + mavl_t (creator) ()); + +int mbag_inc_word(mbag_t s, const char * id,int n); + +mavl_t mbag_i_get_mbag_c(mbag_t s, uint32_t iid, + mavl_t (creator) ()); + + +mavl_t mbag_i_get_mavl(mbag_t s, uint32_t id, + mavl_t (creator) ()); -static inline uint8_t mbag_get_byte(mbag_t s, const char *id, uint8_t def) -{ - struct mbag_item *i = mbag_get(s, id); - if (!i) - return def; - if (i->type != MBAG_BYTE) - return def; - return i->byte; -} -static inline uint16_t mbag_get_word(mbag_t s, const char *id, uint16_t def) -{ - struct mbag_item *i = mbag_get(s, id); - if (!i) - return def; - if (i->type != MBAG_WORD) - return def; - return i->word; -} - -static inline uint32_t mbag_get_dword(mbag_t s, const char *id, uint32_t def) -{ - struct mbag_item *i = mbag_get(s, id); - if (!i) - return def; - if (i->type != MTYPE_DWORD) - return def; - return i->dword; -} - - -static inline mbag_t mbag_i_get_mbag(mbag_t s, uint32_t id, mbag_t def) -{ - struct mbag_item *i = mbag_i_get(s, id); - if (!i) - return def; - if (i->type != MBAG_MBAG) - return def; - return i->data; -} - - -static inline mbag_t mbag_get_mbag(mbag_t s, const char *id, mbag_t def) -{ - struct mbag_item *i = mbag_get(s, id); - if (!i) - return def; - if (i->type != MBAG_MBAG) - return def; - return i->data; -} - -static inline mbag_item_t * mbag_set_bstrn(mbag_t s, const char *id, uint8_t * data, int len) -{ - struct mbag_item *i = mbag_item_create(s, id); - if (!i) - return NULL; - i->type = MBAG_BSTR; - i->data = bstr_create(data, len); - return i; -} -static inline struct mavl *mbag_get_mavl(mbag_t s, const char *id) -{ - struct mbag_item *i = mbag_get(s, id); - if (!i) - return NULL; - if (i->type != MBAG_AVLTREE) - return NULL; - return i->data; -} - -static inline int mbag_i_set_mavl(mbag_t s, uint32_t id, mavl_t t) -{ - struct mbag_item *i = mbag_i_item_create(s, id); - if (!i) - return 0; - i->type = MBAG_AVLTREE; - i->data = t; - return 1; -} - -static inline int mbag_set_mavl(mbag_t s, const char *id, mavl_t t) -{ - struct mbag_item *i = mbag_item_create(s, id); - if (!i) - return 0; - i->type = MBAG_AVLTREE; - i->data = t; - return 1; -} - -/* -static inline struct mavl *mbag_get_avltree_c(mbag_t s, const char *id, - struct mavl *(creator) ()) -{ - struct mavl * avltree = mbag_get_mavl(s, id); - if (avltree){ - return avltree; - } - - avltree = creator(); - if (!avltree) - return NULL; - mbag_set_mavl(s, id, avltree); - return avltree; -} -*/ - -static inline mavl_t mbag_get_mavl_c(mbag_t s, const char *id, - mavl_t (creator) ()) -{ - struct mbag_item *i = mbag_get(s, id); - if (i) - return i->data; - - if (!creator) - return NULL; - mavl_t avltree = creator(); - if (!avltree) - return NULL; - mbag_set_mavl(s, id, avltree); - return avltree; -} - - -static inline mavl_t mbag_get_mbag_c(mbag_t s, const char *id, - mavl_t (creator) ()) -{ - struct mbag_item *i = mbag_get(s, id); - if (i) - return i->data; - - if (!creator) - return NULL; - mavl_t avltree = creator(); - if (!avltree) - return NULL; - mbag_set_mbag(s, id, avltree); - return avltree; -} - - - -static inline int mbag_inc_word(mbag_t s, const char * id,int n) -{ - uint16_t w = mbag_get_word(s,id,0); - mbag_set_word(s,id,w+n); - return 1; -} - - - -static inline mavl_t mbag_i_get_mbag_c(mbag_t s, uint32_t iid, - mavl_t (creator) ()) -{ - struct mbag_item *i = mbag_i_get(s, iid); - if (i) - return i->data; - - if (!creator) - return NULL; - mavl_t avltree = creator(); - if (!avltree) - return NULL; - mbag_i_set_mbag(s, iid, avltree); - return avltree; -} -static inline mavl_t mbag_i_get_mavl(mbag_t s, uint32_t id, - mavl_t (creator) ()) -{ - struct mbag_item *i = mbag_i_get(s, id); - if (i) - return i->data; - if (!creator) - return NULL; - mavl_t avltree = creator(); - if (!avltree) - return NULL; - mbag_i_set_mavl(s, id, avltree); - return avltree; -} /** @} */ -static inline char *mbag_get_str(mbag_t s, const char *id, char *def) -{ - struct mbag_item *i = mbag_get(s, id); - if (!i) - return def; - return i->data; - -}; - -static inline int mbag_set_str(mbag_t s, const char *id, const char *str) -{ - struct mbag_item *i = mbag_item_create(s, id); - if (!i) - return 0; - i->type = MBAG_STR; - i->data = strdup(str); - return 1; -} +char *mbag_get_str(mbag_t s, const char *id, char *def); +int mbag_set_str(mbag_t s, const char *id, const char *str); +int mbag_set_sockaddr(mbag_t s, const char *id, const struct sockaddr * sa); + + + -static inline int mbag_set_sockaddr(mbag_t s, const char *id, const struct sockaddr * sa) -{ - struct mbag_item *i = mbag_item_create(s, id); - if (!i) - return 0; - struct sockaddr_storage * sad = malloc(sizeof(struct sockaddr_storage)); - if (!sad){ - free(i); - return 0; - } - sock_copyaddr(sad,sa); - i->type = MBAG_SOCKADDR; - i->data = sad; - return 1; -} @@ -466,102 +275,22 @@ struct mbag_item_fundef { void *arg; }; - -static inline void *mbag_item_get_data_ptr(struct mbag_item *item) -{ - if (item->type == MBAG_FUN ) - { - struct mbag_item_fundef *fundef = - (struct mbag_item_fundef *) item->data; - if (!fundef) - return NULL; - return fundef->get(fundef->arg); - } - return item->data; -} - - -static inline void mbag_item_release_data_ptr(struct mbag_item *item, void *data) -{ - if (item->type == MBAG_FUN) - { - struct mbag_item_fundef *fundef = - (struct mbag_item_fundef *) item->data; - if (!fundef) - return; - if (!fundef->free) - return; - - return fundef->free(fundef->arg, data); - } - -} - -static inline int mbag_set_strn(mbag_t s, const char *id, const char *str, int n) -{ - struct mbag_item *i = mbag_item_create(s, id); - if (!i) - return 0; - i->type = MBAG_STR; - i->data = strndup(str, n); - return 1; -} - -static inline int mbag_set_bstr16n(mbag_t s, const char *id, uint8_t * data, int len) -{ - struct mbag_item *i = mbag_item_create(s, id); - if (!i) - return 0; - i->type = MBAG_BSTR16; - i->data = bstr16_create(data, len); - return 1; -} - - - -static inline mbag_item_t * mbag_set_const_ptr(mbag_t s, const char *id, void *ptr) -{ - struct mbag_item *i = mbag_item_create(s, id); - if (!i) - return 0; - i->type = MBAG_CONST_DATA; - i->data = ptr; - return i; -} - - -static inline int mbag_set_ptr(mbag_t s, const char *id, void *ptr) -{ - struct mbag_item *i = mbag_item_create(s, id); - if (!i) - return 0; - i->type = MBAG_PTR; - i->data = ptr; - return 1; -} - - - -static inline int mbag_set_fun(mbag_t s, const char *id, +void *mbag_item_get_data_ptr(struct mbag_item *item); +void mbag_item_release_data_ptr(struct mbag_item *item, void *data); +int mbag_set_strn(mbag_t s, const char *id, const char *str, int n); +int mbag_set_bstr16n(mbag_t s, const char *id, uint8_t * data, int len); +mbag_item_t * mbag_set_const_ptr(mbag_t s, const char *id, void *ptr); +int mbag_set_ptr(mbag_t s, const char *id, void *ptr); +int mbag_set_fun(mbag_t s, const char *id, void *(*funget) (void *arg), - void (*funfree) (void *arg, void *data), void *arg) -{ - struct mbag_item *i = mbag_item_create(s, id); - if (!i) - return 0; + void (*funfree) (void *arg, void *data), void *arg); + + + + - struct mbag_item_fundef *fundef = malloc(sizeof(struct mbag_item_fundef)); - i->data = fundef; - if (!fundef) - return 0; - fundef->get = funget; - fundef->free = funfree; - fundef->arg = arg; - i->type=MBAG_FUN; - return 1; -} int mbag_set_from_buf(mbag_t dst, mbagtype_t type, const char *item_id, uint8_t *data, int len); diff --git a/src/cw/message_set.c b/src/cw/message_set.c index 93da9ed7..3d2678c8 100644 --- a/src/cw/message_set.c +++ b/src/cw/message_set.c @@ -15,7 +15,7 @@ typedef struct { }message2_t; */ -static inline int cmp_cw_msgelemprops(const void *elem1, const void *elem2){ +static int cmp_cw_msgelemprops(const void *elem1, const void *elem2){ cw_elem_handler_t * e1 = ((cw_msgelemprops_t*)elem1)->elem; cw_elem_handler_t * e2 = ((cw_msgelemprops_t*)elem2)->elem; int r; @@ -32,7 +32,7 @@ static inline int cmp_cw_msgelemprops(const void *elem1, const void *elem2){ } -static inline int msg_cmp(const void *elem1, const void *elem2) +int msg_cmp(const void *elem1, const void *elem2) { message2_t * e1 = (message2_t*)elem1; message2_t * e2 = (message2_t*)elem2; @@ -158,4 +158,4 @@ mlist_t cw_msgset_get_msg(cw_MsgSet_t * set, int type){ } return result->elements_list; -} \ No newline at end of file +} diff --git a/src/cw/strheap.c b/src/cw/strheap.c index 433c2237..0bb8d44e 100644 --- a/src/cw/strheap.c +++ b/src/cw/strheap.c @@ -35,3 +35,14 @@ int cw_strheap_register_strings(cw_strheap_t h, struct cw_strlist_elem *s) return n+1; } + +const char * cw_strheap_get(cw_strheap_t h, int id) { + struct cw_strlist_elem s; + s.id=id; + struct cw_strlist_elem *r = avltree_get(h,&s); + if (r) + return r->str; + return NULL; +} + + diff --git a/src/cw/strheap.h b/src/cw/strheap.h index e9ce0240..0809bc99 100644 --- a/src/cw/strheap.h +++ b/src/cw/strheap.h @@ -13,14 +13,6 @@ typedef struct avltree * cw_strheap_t; extern cw_strheap_t cw_strheap_create(); extern int cw_strheap_register_strings(cw_strheap_t h, struct cw_strlist_elem *s); -static inline const char * cw_strheap_get(cw_strheap_t h, int id) { - struct cw_strlist_elem s; - s.id=id; - struct cw_strlist_elem *r = avltree_get(h,&s); - if (r) - return r->str; - return NULL; -} - +const char * cw_strheap_get(cw_strheap_t h, int id); #endif diff --git a/src/cw/timer.h b/src/cw/timer.h index 833e1504..5f74ba11 100644 --- a/src/cw/timer.h +++ b/src/cw/timer.h @@ -94,17 +94,9 @@ typedef time_t cw_timer_t; #define cw_clock_start(c)\ gettimeofday(c,NULL); -/** - * Get lap time. (stop watch) - * @param tv pointer to a clock variable defined with #CW_CLOCK_DEFINE - * @return lap time in seconds. - */ -static inline double cw_clock_lap(struct timeval *tv) -{ - struct timeval lap; - gettimeofday(&lap, NULL); - return (cw_timevaltodouble(&lap) - cw_timevaltodouble(tv)) / 1000000.0; -} + +double cw_clock_lap(struct timeval *tv); + /** * An alias for #cw_clock_lap diff --git a/src/cw/timer_inline.c b/src/cw/timer_inline.c new file mode 100644 index 00000000..19b42ff0 --- /dev/null +++ b/src/cw/timer_inline.c @@ -0,0 +1,15 @@ +#include "timer.h" + +/** + * Get lap time. (stop watch) + * @param tv pointer to a clock variable defined with #CW_CLOCK_DEFINE + * @return lap time in seconds. + */ +double cw_clock_lap(struct timeval *tv) +{ + struct timeval lap; + gettimeofday(&lap, NULL); + return (cw_timevaltodouble(&lap) - cw_timevaltodouble(tv)) / 1000000.0; +} + +