Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
e8a376a8
提交
e8a376a8
authored
11月 25, 2011
作者:
Viktor Krikun
提交者:
Travis Cross
3月 31, 2012
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
First draft implementation of random-access cache
(refs #25)
上级
be03cdc2
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
327 行增加
和
51 行删除
+327
-51
zrtp_iface_cache.h
include/zrtp_iface_cache.h
+6
-4
zrtp_types.h
include/zrtp_types.h
+1
-0
Makefile.am
projects/gnu/build/test/Makefile.am
+31
-17
zrtp_iface_cache.c
src/zrtp_iface_cache.c
+162
-30
cache_test.c
test/cache_test.c
+127
-0
没有找到文件。
include/zrtp_iface_cache.h
浏览文件 @
e8a376a8
...
...
@@ -34,8 +34,8 @@ extern "C"
*/
typedef
uint8_t
zrtp_cache_id_t
[
24
];
#define ZRTP_MITMCACHE_ELEM_LENGTH (
sizeof(zrtp_cache_id_t) + sizeof(zrtp_string64_t)
)
#define ZRTP_CACHE_ELEM_LENGTH (
sizeof(zrtp_cache_elem_t) - sizeof(mlist_t)
)
#define ZRTP_MITMCACHE_ELEM_LENGTH (
sizeof(zrtp_cache_id_t) + sizeof(zrtp_string64_t)
)
#define ZRTP_CACHE_ELEM_LENGTH (
sizeof(zrtp_cache_elem_t) - sizeof(mlist_t) - (sizeof(uint32_t)*2)
)
#define ZFONE_CACHE_NAME_LENGTH 256
/**
...
...
@@ -51,10 +51,12 @@ typedef struct zrtp_cache_elem
uint32_t
verified
;
/** Verified flag for the cache value */
uint32_t
lastused_at
;
/** Last usage time-stamp in seconds */
uint32_t
ttl
;
/** Cache TTL since lastused_at in seconds */
uint32_t
secure_since
;
/** Secure since date in seconds. Utility field. Do
e
n't required by libzrtp. */
uint32_t
secure_since
;
/** Secure since date in seconds. Utility field. Don't required by libzrtp. */
char
name
[
ZFONE_CACHE_NAME_LENGTH
];
/** name of the user associated with this cache entry */
uint32_t
name_length
;
/** cache name lengths */
uint32_t
presh_counter
;
/** number of Preshared streams made since last DH echange */
uint32_t
presh_counter
;
/** number of Preshared streams made since last DH exchange */
uint32_t
_index
;
/** cache element index in the cache file */
uint32_t
_is_dirty
;
/** dirty flag means the entry has unsaved changes */
mlist_t
_mlist
;
}
zrtp_cache_elem_t
;
...
...
include/zrtp_types.h
浏览文件 @
e8a376a8
...
...
@@ -359,6 +359,7 @@ struct zrtp_global_t
/** RNG unit initialization flag. */
uint8_t
rand_initialized
;
/** Full path to ZRTP cache file. */
zrtp_string256_t
def_cache_path
;
/** This object is used to protect the shared RNG hash zrtp#rand_ctx */
...
...
projects/gnu/build/test/Makefile.am
浏览文件 @
e8a376a8
...
...
@@ -11,33 +11,47 @@ TOP_SRCDIR=$(top_srcdir)/../..
INCLUDES
=
-I
$(TOP_SRCDIR)
/include
\
-I
$(TOP_SRCDIR)
/include/enterprise
\
-I
$(TOP_SRCDIR)
/.
\
-I
$(TOP_SRCDIR)
/test
\
-I
$(TOP_SRCDIR)
/test/cmockery
\
-I
$(TOP_SRCDIR)
/third_party/bgaes
\
-I
$(TOP_SRCDIR)
/third_party/bnlib
check_PROGRAMS
=
libzrtp_test
#check_PROGRAMS = cache_test libzrtp_test
check_PROGRAMS
=
cache_test
### ZRTP Cache testing
cache_test_SOURCES
=
$(TOP_SRCDIR)
/test/cmockery/cmockery.c
\
$(TOP_SRCDIR)
/test/cache_test.c
cache_test_LDADD
=
../libzrtp.a
$(TOP_SRCDIR)
/third_party/bnlib/libbn.a
-lpthread
### ZRTP high-level test-case
libzrtp_test_SOURCES
=
$(TOP_SRCDIR)
/test/pc/zrtp_test_core.c
\
$(TOP_SRCDIR)
/test/pc/zrtp_test_crypto.c
\
$(TOP_SRCDIR)
/test/pc/zrtp_test_queue.c
\
$(TOP_SRCDIR)
/test/pc/zrtp_test_ui.c
libzrtp_test_LDADD
=
../libzrtp.a
\
$(TOP_SRCDIR)
/third_party/bnlib/libbn.a
-lpthread
libzrtp_test_LDADD
=
../libzrtp.a
$(TOP_SRCDIR)
/third_party/bnlib/libbn.a
-lpthread
SUBDIRS
=
.
check
:
@
echo
""
@
echo
"*========================================================================*"
@
echo
"* starting libZRTP tests *"
@
echo
"*========================================================================*"
@
echo
""
@
./libzrtp_test
@echo
""
@echo
"*========================================================================*"
@echo
"* In case you have a test FAILED send the generated log file *"
@echo
"* with your comment to <zrtp_support@zfoneproject.com>. *"
@echo
"*========================================================================*"
@echo
""
check
:
# @ ./cache_test
# check:
# @echo ""
# @echo "*========================================================================*"
# @echo "* starting libZRTP tests *"
# @echo "*========================================================================*"
# @echo ""
# @./libzrtp_test
#
# @echo ""
# @echo "*========================================================================*"
# @echo "* In case you have a test FAILED send the generated log file *"
# @echo "* with your comment to <zrtp_support@zfoneproject.com>. *"
# @echo "*========================================================================*"
# @echo ""
src/zrtp_iface_cache.c
浏览文件 @
e8a376a8
差异被折叠。
点击展开。
test/cache_test.c
0 → 100644
浏览文件 @
e8a376a8
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <string.h>
#include <stdio.h>
#include "zrtp.h"
#include "cmockery/cmockery.h"
#define TEST_CACHE_PATH "./zrtp_cache_test.dat"
static
zrtp_global_t
g_zrtp_cfg
;
void
cache_setup
()
{
remove
(
TEST_CACHE_PATH
);
ZSTR_SET_EMPTY
(
g_zrtp_cfg
.
def_cache_path
);
/* Configure and Initialize ZRTP cache */
zrtp_zstrcpyc
(
ZSTR_GV
(
g_zrtp_cfg
.
def_cache_path
),
TEST_CACHE_PATH
);
}
void
cache_teardown
()
{
zrtp_def_cache_down
();
}
static
void
init_rs_secret_
(
zrtp_shared_secret_t
*
sec
)
{
ZSTR_SET_EMPTY
(
sec
->
value
);
sec
->
_cachedflag
=
0
;
sec
->
ttl
=
0
;
sec
->
lastused_at
=
0
;
}
/*
* Simply init ZRTP cache with empty or non-existing filer and close it.
* The app should not crash and trigger no errors.
*/
void
cache_init_store_empty_test
()
{
zrtp_status_t
status
;
/* It should NOT crash and return OK. */
status
=
zrtp_def_cache_init
(
&
g_zrtp_cfg
);
assert_int_equal
(
status
,
zrtp_status_ok
);
zrtp_def_cache_down
();
}
/*
* Add few entries to the empty cache, flush it and then load again. Check if
* all the entries were restored successfully.
*/
void
cache_add2empty_test
()
{
zrtp_status_t
status
;
int
intres
;
zrtp_string16_t
zid_my
=
ZSTR_INIT_WITH_CONST_CSTRING
(
"000000000_01"
);
zrtp_string16_t
zid_a
=
ZSTR_INIT_WITH_CONST_CSTRING
(
"000000000_02"
);
zrtp_string16_t
zid_b
=
ZSTR_INIT_WITH_CONST_CSTRING
(
"000000000_03"
);
zrtp_string16_t
zid_c
=
ZSTR_INIT_WITH_CONST_CSTRING
(
"000000000_04"
);
zrtp_string16_t
zid_mitm1
=
ZSTR_INIT_WITH_CONST_CSTRING
(
"000000000_04"
);
zrtp_shared_secret_t
rs_my4a
,
rs_my4b
,
rs_my4c
,
rs_my4mitm1
;
zrtp_shared_secret_t
rs_my4a_r
,
rs_my4b_r
,
rs_my4c_r
,
rs_my4mitm1_r
;
init_rs_secret_
(
&
rs_my4a
);
init_rs_secret_
(
&
rs_my4b
);
init_rs_secret_
(
&
rs_my4c
);
init_rs_secret_
(
&
rs_my4mitm1
);
init_rs_secret_
(
&
rs_my4a_r
);
init_rs_secret_
(
&
rs_my4b_r
);
init_rs_secret_
(
&
rs_my4c_r
);
init_rs_secret_
(
&
rs_my4mitm1_r
);
printf
(
"Open empty cache file for.
\n
"
);
status
=
zrtp_def_cache_init
(
&
g_zrtp_cfg
);
assert_int_equal
(
status
,
zrtp_status_ok
);
/* Test if cache-init does bot corrupt config. */
assert_false
(
strncmp
(
g_zrtp_cfg
.
def_cache_path
.
buffer
,
TEST_CACHE_PATH
,
strlen
(
TEST_CACHE_PATH
)));
/* Add few values into it */
printf
(
"Add few test entries.
\n
"
);
status
=
zrtp_def_cache_put
(
ZSTR_GV
(
zid_my
),
ZSTR_GV
(
zid_a
),
&
rs_my4a
);
assert_int_equal
(
status
,
zrtp_status_ok
);
status
=
zrtp_def_cache_put
(
ZSTR_GV
(
zid_my
),
ZSTR_GV
(
zid_b
),
&
rs_my4b
);
assert_int_equal
(
status
,
zrtp_status_ok
);
status
=
zrtp_def_cache_put_mitm
(
ZSTR_GV
(
zid_my
),
ZSTR_GV
(
zid_mitm1
),
&
rs_my4mitm1
);
assert_int_equal
(
status
,
zrtp_status_ok
);
status
=
zrtp_def_cache_put
(
ZSTR_GV
(
zid_my
),
ZSTR_GV
(
zid_c
),
&
rs_my4c
);
assert_int_equal
(
status
,
zrtp_status_ok
);
/* Close the cache, it should be flushed to the file. */
printf
(
"Close the cache.
\n
"
);
zrtp_def_cache_down
();
/* Test if cache-close does bot corrupt config. */
assert_false
(
strncmp
(
g_zrtp_cfg
.
def_cache_path
.
buffer
,
TEST_CACHE_PATH
,
strlen
(
TEST_CACHE_PATH
)));
/* Now, let's open the cache again and check if all the previously added values were restored successfully */
printf
(
"And open it again, it should contain all the stored values.
\n
"
);
status
=
zrtp_def_cache_init
(
&
g_zrtp_cfg
);
assert_int_equal
(
status
,
zrtp_status_ok
);
status
=
zrtp_def_cache_get
(
ZSTR_GV
(
zid_my
),
ZSTR_GV
(
zid_a
),
&
rs_my4a_r
,
0
);
assert_int_equal
(
status
,
zrtp_status_ok
);
assert_false
(
zrtp_zstrcmp
(
ZSTR_GV
(
rs_my4a_r
.
value
),
ZSTR_GV
(
rs_my4a
.
value
)));
/* Test if cache-close does bot corrupt config. */
assert_false
(
strncmp
(
g_zrtp_cfg
.
def_cache_path
.
buffer
,
TEST_CACHE_PATH
,
strlen
(
TEST_CACHE_PATH
)));
}
int
main
(
void
)
{
const
UnitTest
tests
[]
=
{
//unit_test_setup_teardown(cache_init_store_empty_test, cache_setup, cache_teardown),
unit_test_setup_teardown
(
cache_add2empty_test
,
cache_setup
,
cache_teardown
),
};
return
run_tests
(
tests
);
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论