00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef __ZRTP_STRING_H__
00011 #define __ZRTP_STRING_H__
00012
00013 #include "zrtp_config.h"
00014 #include "zrtp_types.h"
00015
00021
00022
00023
00024
00025 #define ZRTP_STRING8 12
00026 #define ZRTP_STRING16 20
00027 #define ZRTP_STRING32 36
00028 #define ZRTP_STRING64 68
00029 #define ZRTP_STRING128 132
00030 #define ZRTP_STRING256 260
00031 #define ZRTP_STRING1024 1028
00032
00033
00034 #if ( ZRTP_PLATFORM != ZP_SYMBIAN )
00035 #pragma pack(push, 1)
00036 #endif
00037
00038 typedef struct zrtp_stringn
00039 {
00040 uint16_t length;
00041 uint16_t max_length;
00042 char buffer[0];
00043 } zrtp_stringn_t;
00044
00045 typedef struct zrtp_string8
00046 {
00047 uint16_t length;
00048 uint16_t max_length;
00049 char buffer[ZRTP_STRING8];
00050 } zrtp_string8_t;
00051
00052
00053 typedef struct zrtp_string16
00054 {
00055 uint16_t length;
00056 uint16_t max_length;
00057 char buffer[ZRTP_STRING16];
00058 } zrtp_string16_t;
00059
00060 typedef struct zrtp_string32
00061 {
00062 uint16_t length;
00063 uint16_t max_length;
00064 char buffer[ZRTP_STRING32];
00065 } zrtp_string32_t;
00066
00067 typedef struct zrtp_string64
00068 {
00069 uint16_t length;
00070 uint16_t max_length;
00071 char buffer[ZRTP_STRING64];
00072 } zrtp_string64_t;
00073
00074 typedef struct zrtp_string128
00075 {
00076 uint16_t length;
00077 uint16_t max_length;
00078 char buffer[ZRTP_STRING128];
00079 } zrtp_string128_t;
00080
00081 typedef struct zrtp_string256
00082 {
00083 uint16_t length;
00084 uint16_t max_length;
00085 char buffer[ZRTP_STRING256];
00086 } zrtp_string256_t;
00087
00088 typedef struct zrtp_string1024
00089 {
00090 uint16_t length;
00091 uint16_t max_length;
00092 char buffer[ZRTP_STRING1024];
00093 } zrtp_string1024_t;
00094
00095 #if ( ZRTP_PLATFORM != ZP_SYMBIAN )
00096 #pragma pack(pop)
00097 #endif
00098
00099
00134 #define ZSTR_GV(pstr) \
00135 (zrtp_stringn_t*)((char*)pstr.buffer - sizeof(pstr.max_length) - sizeof(pstr.length))
00136
00143 #define ZSTR_GVP(pstr) \
00144 (zrtp_stringn_t*)((char*)pstr->buffer - sizeof(pstr->max_length) - sizeof(pstr->length))
00145
00151 #define ZSTR_INIT_EMPTY(a) { 0, sizeof(a.buffer) - 1, { 0 }}
00152
00157 #define ZSTR_INIT_WITH_CONST_CSTRING(s) {sizeof(s) - 1, 0, s}
00158
00165 #define ZSTR_SET_EMPTY(a)\
00166 { a.length = 0; a.max_length = sizeof(a.buffer) - 1; a.buffer[0] = 0; }
00167
00168
00169 #if defined(__cplusplus)
00170 extern "C"
00171 {
00172 #endif
00173
00185 int zrtp_zstrcmp(const zrtp_stringn_t *left, const zrtp_stringn_t *right);
00186
00194 void zrtp_zstrcpy(zrtp_stringn_t *dst, const zrtp_stringn_t *src);
00195
00205 void zrtp_zstrncpy(zrtp_stringn_t *dst, const zrtp_stringn_t *src, uint16_t size);
00206
00212 void zrtp_zstrcpyc(zrtp_stringn_t *dst, const char *src);
00213
00214
00221 void zrtp_zstrncpyc(zrtp_stringn_t *dst, const char *src, uint16_t size);
00222
00231 void zrtp_zstrcat(zrtp_stringn_t *dst, const zrtp_stringn_t *src);
00232
00237 void zrtp_wipe_zstring(zrtp_stringn_t *zstr);
00238
00251 int zrtp_memcmp(const void* s1, const void* s2, uint32_t n);
00252
00264 const char* hex2str(const char* bin, int bin_size, char* buff, int buff_size);
00265
00276 char *str2hex(const char* buff, int buff_size, char* bin, int bin_size);
00277
00278 #if defined(__cplusplus)
00279 }
00280 #endif
00281
00284 #endif