1 /* 2 * 3 * base_include.h 4 * 5 * 基本头文件引用声明。 6 * 7 * 本代码支持win32平台和linux平台。 8 * 9 * Copyright (c)2012,lizhi<ibox> 10 * 11 * 2012-10-10 V1.0 lizhi<QQ:252240557,msn:ddgooo@hotmail.com> created 12 * 13 * 14 */ 15 16 17 #ifndef __INCLUDE_BASE_INCLUDE_H 18 #define __INCLUDE_BASE_INCLUDE_H 19 20 21 /* 22 * Macro开关 23 */ 24 #ifndef WIN32 25 #define WIN32 26 #endif 27 28 /* 29 * Common header file 30 */ 31 #include <stdio.h> 32 #include <stdlib.h> 33 #include <string.h> 34 #include <errno.h> 35 #include <assert.h> 36 #include <fcntl.h> 37 #include <sys/stat.h> 38 #include <stdarg.h> 39 #include <time.h> 40 #include <signal.h> 41 #include <malloc.h> 42 #include <memory.h> 43 #include <limits.h> 44 #include <math.h> 45 #ifdef WIN32 /* windows */ 46 #include <windows.h> 47 #else /* linux */ 48 #endif 49 /* 50 * Common Network header file 51 */ 52 #ifdef WIN32 /* windows */ 53 //#include <winsock2.h> 54 #else /* linux */ 55 #include <sys/types.h> 56 #include <sys/socket.h> 57 #include <netinet/in.h> 58 #include <arpa/inet.h> 59 #include <sys/time.h> 60 #include <netdb.h> 61 #include <sys/ioctl.h> 62 #include <net/if.h> 63 #include <sys/utsname.h> 64 #include <netinet/in.h> 65 #include <netinet/ip.h> 66 #include <netinet/tcp.h> 67 #include <netinet/ip_icmp.h> 68 #include <netpacket/packet.h> 69 #include <net/ethernet.h> 70 #include <linux/fb.h> 71 #include <sys/mman.h> 72 #include <asm/types.h> 73 #endif 74 75 76 77 78 79 80 #endif /* __INCLUDE_BASE_INCLUDE_H */
1 /* 2 * 3 * base_type.h 4 * 5 * 基本数据类型引用声明。 6 * 7 * 本代码支持win32平台和linux平台。 8 * 9 * Copyright (c)2012,lizhi<ibox> 10 * 11 * 2012-10-10 V1.0 lizhi<QQ:252240557,msn:ddgooo@hotmail.com> created 12 * 13 */ 14 15 16 #ifndef __INCLUDE_BASE_TYPE_H 17 #define __INCLUDE_BASE_TYPE_H 18 19 /* 20 * 头文件 21 */ 22 #include "base_include.h" 23 24 25 /* 26 * 基础数据类型定义(base data type define) 27 */ 28 typedef char s8; 29 typedef unsigned char u8; 30 typedef short s16; 31 typedef unsigned short u16; 32 typedef long s32; 33 typedef unsigned long u32; 34 typedef float f32; 35 typedef double f64; 36 37 #if defined(WIN32) /* windows */ 38 typedef __int64 s64; 39 typedef unsigned __int64 u64; 40 #else /* linux */ 41 typedef long long s64; 42 typedef unsigned long long u64; 43 #endif 44 45 46 /* 47 * BOOL、TRUE、FALSE、NULL 定义 48 */ 49 #ifndef BOOL 50 #define BOOL (s32) 51 #endif 52 #ifndef TRUE 53 #define TRUE (0x01) 54 #endif 55 #ifndef FALSE 56 #define FALSE (0x00) 57 #endif 58 #ifndef NULL 59 #define NULL (0x00) 60 #endif 61 62 63 /* 64 * 函数参数类型说明 65 */ 66 #ifndef IN 67 #define IN 68 #endif 69 #ifndef OUT 70 #define OUT 71 #endif 72 #ifndef INOUT 73 #define INOUT 74 #endif 75 76 77 78 #endif /* __INCLUDE_BASE_TYPE_H */
1 /* 2 * 3 * base_debug.h 4 * 5 * 基本DEBUG调试宏定义。 6 * 7 * 本代码支持win32平台和linux平台。 8 * 9 * Copyright (c)2012,lizhi<ibox> 10 * 11 * 2012-10-10 V1.0 lizhi<QQ:252240557,msn:ddgooo@hotmail.com> created 12 * 13 */ 14 15 16 #ifndef __INCLUDE_BASE_DEBUG_H 17 #define __INCLUDE_BASE_DEBUG_H 18 19 20 /* 21 * Macro开关 22 */ 23 #ifndef USER_DEBUG 24 #define USER_DEBUG 25 #endif 26 27 /* 28 * debug调试宏定义 29 */ 30 #ifdef USER_DEBUG 31 32 33 #define _my_printf printf 34 35 36 #ifdef WIN32 37 #define _my_print_info(strerr, strfile, iline) \ 38 fprintf(stderr, \ 39 " >%s, assert failed (%s:%d)\n" \ 40 " >errno : %d, %s\n" \ 41 " >network last error : %d, last error : %d\n\n", \ 42 strerr, strfile, iline, \ 43 errno, strerror(errno), \ 44 WSAGetLastError(), GetLastError()) 45 #else 46 #define _my_print_info(strerr, strfile, iline) \ 47 fprintf(stderr, \ 48 " >%s, assert failed (%s:%d)\n" \ 49 " >errno : %d, %s\n\n", \ 50 strerr, strfile, iline, \ 51 errno, strerror(errno)) 52 #endif 53 54 #define _my_assert(condition) \ 55 do { \ 56 if ( !(condition) ) { \ 57 _my_print_info("ERROR", __FILE__, __LINE__); \ 58 fflush(stderr); \ 59 exit(-1); \ 60 } \ 61 } while(0); 62 63 #define _my_warn(condition) \ 64 do { \ 65 if ( !(condition) ) { \ 66 _my_print_info("WARNING", __FILE__, __LINE__); \ 67 fflush(stderr); \ 68 } \ 69 } while(0); 70 71 #define _my_assertex(condition, file, line) \ 72 do { \ 73 if ( !(condition) ) { \ 74 _my_print_info("ERROR", file, line); \ 75 fflush(stderr); \ 76 exit(-1); \ 77 } \ 78 } while(0); 79 80 #define _my_warnex(condition, file, line) \ 81 do { \ 82 if ( !(condition) ) { \ 83 _my_print_info("WARNING", file, line); \ 84 fflush(stderr); \ 85 } \ 86 } while(0); 87 88 #define _my_assert_info(condition, info) \ 89 do { \ 90 if ( !(condition) ) { \ 91 _my_print_info((info), __FILE__, __LINE__); \ 92 fflush(stderr); \ 93 exit(-1); \ 94 } \ 95 } while(0); 96 97 #define _my_warn_info(condition, info) \ 98 do { \ 99 if ( !(condition) ) { \ 100 _my_print_info((info), __FILE__, __LINE__); \ 101 fflush(stderr); \ 102 } \ 103 } while(0); 104 105 #else 106 107 108 #define _my_printf 109 #define _my_assert(condition) 110 #define _my_assertex(condition, file, line) 111 #define _my_warn(condition) 112 #define _my_warnex(condition, file, line) 113 #define _my_assert_info(condition, info) 114 #define _my_warn_info(condition, info) 115 116 #endif /* USER_DEBUG */ 117 118 119 120 #endif /* __INCLUDE_BASE_DEBUG_H */
1 /* 2 * 3 * base_endian.h 4 * 5 * 基本数据编码和转换函数定义。 6 * 7 * 本代码支持win32平台和linux平台。 8 * 9 * Copyright (c)2012,lizhi<ibox> 10 * 11 * 2012-10-10 V1.0 lizhi<QQ:252240557,msn:ddgooo@hotmail.com> created 12 * 13 */ 14 15 16 #ifndef __INCLUDE_BASE_ENDIAN_H 17 #define __INCLUDE_BASE_ENDIAN_H 18 19 20 /* 21 * 头文件 22 */ 23 #include "base_type.h" 24 25 26 /* 27 * Macro开关 28 */ 29 #ifndef USER_ENDIAN 30 #define USER_ENDIAN 31 #endif 32 33 34 #ifdef USER_ENDIAN 35 36 /* 37 * _my_hasbe - 判断主机顺序是否为大端; 38 * 39 * 返回TRUE: 主机顺序为大端,否则为小端; 40 * 41 * h表示host,be表示big endian; 42 * 43 */ 44 int _my_hasbe(void); 45 46 47 /* 48 * _my_swpe16/_my_swpe32/_my_swpe64 - 交互端顺序; 49 * 50 * 如大端(Big-Endian)转换成小端(Little-Endian),或者小端转换成大端 51 * 52 */ 53 #define _my_swpe16(data) ((((data) & 0xff00) >> 8) | (((data) & 0x00ff) << 8)) 54 #define _my_swpe32(data) ((((data) & 0xff000000) >> 24) \ 55 | (((data) & 0x00ff0000) >> 8) \ 56 | (((data) & 0x0000ff00) << 8) \ 57 | (((data) & 0x000000ff) << 24)) 58 #define _my_swpe64(data) ((((data) & (u64)(0xff00000000000000)) >> 56) \ 59 | (((data) & (u64)(0x00ff000000000000)) >> 40) \ 60 | (((data) & (u64)(0x0000ff0000000000)) >> 24) \ 61 | (((data) & (u64)(0x000000ff00000000)) >> 08) \ 62 | (((data) & (u64)(0x00000000ff000000)) << 08) \ 63 | (((data) & (u64)(0x0000000000ff0000)) << 24) \ 64 | (((data) & (u64)(0x000000000000ff00)) << 40) \ 65 | (((data) & (u64)(0x00000000000000ff)) << 56)) 66 67 /* 68 * _my_btohN/_my_htobN - 主机字节顺序与大端顺序间的相互转换; 69 * 70 * h表示host,be表示big endian; 71 * 72 */ 73 #define _my_btoh16(data) ( _my_hasbe() ? (data) : _my_swpe16(data)) 74 #define _my_btoh32(data) ( _my_hasbe() ? (data) : _my_swpe32(data)) 75 #define _my_btoh64(data) ( _my_hasbe() ? (data) : _my_swpe64(data)) 76 #define _my_htob16(data) (_my_btoh16(data)) 77 #define _my_htob32(data) (_my_btoh32(data)) 78 #define _my_htob64(data) (_my_btoh64(data)) 79 /* 80 * _my_btolN/_my_ltobN - 主机字节顺序与小端顺序间的相互转换; 81 * 82 * h表示host,l表示little endian; 83 * 84 */ 85 #define _my_ltoh16(data) ((!_my_hasbe()) ? (data) : _my_swpe16(data)) 86 #define _my_ltoh32(data) ((!_my_hasbe()) ? (data) : _my_swpe32(data)) 87 #define _my_ltoh64(data) ((!_my_hasbe()) ? (data) : _my_swpe64(data)) 88 #define _my_htol16(data) (_my_ltoh16(data)) 89 #define _my_htol32(data) (_my_ltoh32(data)) 90 #define _my_htol64(data) (_my_ltoh64(data)) 91 /* 92 * _my_htonN/_my_ntohN - 主机字节顺序与网络字节顺序间的相互转换; 93 * 94 * h表示host,n表示net; 95 * 96 */ 97 #define _my_hton16(data) (_my_htob16(data)) 98 #define _my_hton32(data) (_my_htob32(data)) 99 #define _my_hton64(data) (_my_htob64(data)) 100 #define _my_ntoh16(data) (_my_btoh16(data)) 101 #define _my_ntoh32(data) (_my_btoh32(data)) 102 #define _my_ntoh64(data) (_my_btoh64(data)) 103 104 /* 105 * _my_getXN - 按字节顺序取值; 106 * 107 */ 108 #define _my_get8(p) ((p)[0]) 109 #define _my_getl16(p) (((p)[0]) | (((p)[1]) << 8)) 110 #define _my_getb16(p) (((p)[1]) | (((p)[0]) << 8)) 111 #define _my_getl32(p) (((p)[0]) | (((p)[1]) << 8) | (((p)[2]) << 16) | (((p)[3]) << 24)) 112 #define _my_getb32(p) (((p)[3]) | (((p)[2]) << 8) | (((p)[1]) << 16) | (((p)[0]) << 24)) 113 #define _my_getl64(p) (((p)[0]) | (((p)[1]) << 8) | (((p)[2]) << 16) | (((p)[3]) << 24) \ 114 | (((p)[4]) << 32) | (((p)[5]) << 40) | (((p)[6]) << 48) | (((p)[7]) << 56)) 115 #define _my_getb64(p) (((p)[7]) | (((p)[6]) << 8) | (((p)[5]) << 16) | (((p)[4]) << 24) \ 116 | (((p)[3]) << 32) | (((p)[2]) << 40) | (((p)[1]) << 48) | (((p)[0]) << 56)) 117 #define _my_geth16(p) (_my_hasbe() ? _my_getb16(p) : _my_getl16(p)) 118 #define _my_geth32(p) (_my_hasbe() ? _my_getb32(p) : _my_getl32(p)) 119 #define _my_geth64(p) (_my_hasbe() ? _my_getb64(p) : _my_getl64(p)) 120 121 #define _my_getl24(p) (((p)[0]) | ((p)[1] << 8)| ((p)[2] << 16)) 122 #define _my_getb24(p) (((p)[0] << 24) | ((p)[1] << 16) | ((p)[2] << 8)) 123 #define _my_geth24(p) (_my_hasb_chk() ? _my_getb24(p) : _my_getl24(p)) 124 125 126 127 128 #endif /* USER_ENDIAN */ 129 130 131 #endif /* __INCLUDE_BASE_ENDIAN_H */
1 /* 2 * 3 * base_function.h 4 * 5 * 基本函数及宏定义。 6 * 7 * 本代码支持win32平台和linux平台。 8 * 9 * Copyright (c)2012,lizhi<ibox> 10 * 11 * 2012-10-10 V1.0 lizhi<QQ:252240557,msn:ddgooo@hotmail.com> created 12 * 13 */ 14 15 16 #ifndef __INCLUDE_BASE_FUNCTION_H 17 #define __INCLUDE_BASE_FUNCTION_H 18 19 20 /* 21 * Macro开关 22 */ 23 #ifndef USER_FUNCTION 24 #define USER_FUNCTION 25 #endif 26 27 28 /* 29 * Macro开关 30 */ 31 #ifdef USER_FUNCTION 32 33 34 /* 35 * 内存申请 36 */ 37 #define _my_buf_malloc(size) malloc(size) 38 #define _my_buf_free(ptr) free(ptr) 39 40 /* 41 * min/max - 数学比较(非标准库函数) 42 */ 43 #define _my_min(x, y) ((x) <= (y) ? (x) : (y)) 44 #define _my_max(x, y) ((x) >= (y) ? (x) : (y)) 45 46 /* 47 * 字符\字符串处理函数(非标准库函数) 48 * 49 * strupr/strlwr - 转换大小写 50 * 51 */ 52 char * _my_strupr(char *str); 53 char * _my_strlwr(char *str); 54 55 56 #endif /* USER_FUNCTION */ 57 58 #endif /* __INCLUDE_BASE_FUNCTION_H */
1 /* 2 * 3 * base_endian.c 4 * 5 * 基本数据编码和转换函数定义。 6 * 7 * 本代码支持win32平台和linux平台。 8 * 9 * Copyright (c)2012,lizhi<ibox> 10 * 11 * 2012-10-10 V1.0 lizhi<QQ:252240557,msn:ddgooo@hotmail.com> created 12 * 13 */ 14 15 16 /* 17 * 头文件 18 */ 19 #include "base_type.h" 20 #include "base_include.h" 21 #include "base_debug.h" 22 #include "base_function.h" 23 #include "base_endian.h" 24 25 26 /* 27 * _my_hasbe - 判断主机顺序是否为大端; 28 * 29 * 返回TRUE: 主机顺序为大端,否则为小端; 30 * 31 */ 32 int _my_hasbe(void) 33 { 34 u16 data = 0x0001; 35 u8* p = (u8*)(&data); 36 return ((u8)(*p) == 0x01) ? FALSE : TRUE; 37 }
1 /* 2 * 3 * base_function.c 4 * 5 * 基本函数及宏定义。 6 * 7 * 本代码支持win32平台和linux平台。 8 * 9 * Copyright (c)2012,lizhi<ibox> 10 * 11 * 2012-10-10 V1.0 lizhi<QQ:252240557,msn:ddgooo@hotmail.com> created 12 * 13 */ 14 15 16 /* 17 * 头文件 18 */ 19 #include "base_type.h" 20 #include "base_include.h" 21 #include "base_debug.h" 22 #include "base_endian.h" 23 24 25 26 /* 27 * 字符\字符串处理函数(非标准库函数) 28 * 29 * strupr/strlwr - 转换大小写 30 * 31 */ 32 char * _my_strupr(char *str) 33 { 34 char *p = str; 35 while (*p != '\0') { 36 if(*p >= 'a' && *p <= 'z'){ 37 *p -= 0x20; 38 } 39 p++; 40 } 41 return str; 42 } 43 /* 44 * 字符\字符串处理函数(非标准函数) 45 * 46 * strupr/strlwr - 转换大小写 47 * 48 */ 49 char * _my_strlwr(char *str) 50 { 51 char *p = str; 52 while (*p != '\0') { 53 if(*p >= 'A' && *p <= 'Z'){ 54 *p += 0x20; 55 } 56 p++; 57 } 58 return str; 59 }