/* * libZRTP SDK library, implements the ZRTP secure VoIP protocol. * Copyright (c) 2006-2009 Philip R. Zimmermann. All rights reserved. * Contact: http://philzimmermann.com * For licensing and other legal details, see the file zrtp_legal.c. * * Viktor Krykun */ #include "zrtp.h" /** libzrtp test elements identifier */ typedef uint32_t zrtp_test_id_t; /** Defines constant for unknown test element identifier */ #define ZRTP_TEST_UNKNOWN_ID 0 /** Default lengths for libzrtp test string buffers */ #define ZRTP_TEST_STR_LEN 128 /** libzrtp test endpoint configuration */ typedef struct { zrtp_config_t zrtp; /** libzrtp global configuration parameters */ unsigned generate_traffic; /** switch On to emulate RTP/RTCP traffic generation. Off by default. */ } zrtp_test_endpoint_cfg_t; /** ZRTP test session parameters*/ typedef struct { zrtp_profile_t zrtp; /** libzrtp session parameters */ unsigned streams_count; /** number of zrtp streams to be attached to the session */ zrtp_signaling_role_t role; /** signaling role, default is ZRTP_SIGNALING_ROLE_UNKNOWN */ unsigned is_enrollment; /** true if enrollment session should be created */ } zrtp_test_session_cfg_t; /** ZRTP test stream info */ typedef struct { zrtp_stream_info_t zrtp; /** libzrtp stream info */ unsigned zrtp_events_queueu[128]; /** list of received zrtp events*/ unsigned zrtp_events_count; /** number of received events */ } zrtp_test_stream_info_t; /** ZRTP test session state snapshot */ typedef struct { zrtp_session_info_t zrtp; /** libzrtp session info*/ zrtp_test_stream_info_t streams[ZRTP_MAX_STREAMS_PER_SESSION]; /** array of attached streams info */ unsigned streams_count; /** number streams attached to the session */ } zrtp_test_session_info_t; /** *ZRTP test channel state */ typedef struct { zrtp_test_stream_info_t left; /** one-leg zrtp stream */ zrtp_test_stream_info_t right; /** second-leg zrtp stream */ unsigned char is_secure; /** enabled when both streams in the channel are secure */ } zrtp_test_channel_info_t; /** * Initialize zrtp test endpoint configuration with default values * @param cfg - endpoint config to initialize */ void zrtp_test_endpoint_config_defaults(zrtp_test_endpoint_cfg_t *cfg); /** * ZRTP test endpoint constructor * One endpoint is created, it starts processing threads and ready to emulate ZRTP exchange. * * @param cfg - endpoint configuration * @param name - endpoint name for debug purposes and cache naming, e.h "Alice", "Bob". * @param id - just created endpoint identifier will be placed here * * @return zrtp_status_ok on success or some of zrtp_status_t error codes on failure */ zrtp_status_t zrtp_test_endpoint_create(zrtp_test_endpoint_cfg_t *cfg, const char *name, zrtp_test_id_t *id); /** * ZRTP test endpoint destructor * zrtp_test_endpoint_destroy() stops processing threads and release all * recurses allocated in zrtp_test_endpoint_create(). * * @param id - endpoint identifier * @return zrtp_status_ok on success or some of zrtp_status_t error codes on failure */ zrtp_status_t zrtp_test_endpoint_destroy(zrtp_test_id_t id); /** * Enables test session config with default values * @param cfg - session config for initialization */ void zrtp_test_session_config_defaults(zrtp_test_session_cfg_t *cfg); /** * Create zrtp test session * * @param endpoint - test endpoint creating endpoint should belong to * @param cfg - session parameters * @param id - created session identifier will be placed here * @return zrtp_status_ok on success or some of zrtp_status_t error codes on failure */ zrtp_status_t zrtp_test_session_create(zrtp_test_id_t endpoint, zrtp_test_session_cfg_t *cfg, zrtp_test_id_t *id); zrtp_status_t zrtp_test_session_destroy(zrtp_test_id_t id); zrtp_status_t zrtp_test_session_get(zrtp_test_id_t id, zrtp_test_session_info_t *info); /** * Get stream Id by it's index in zrtp session * * @param session_id - zrtp test session id where needed stream should be taken * @param idx - stream index * @return found stream id, or ZRTP_TEST_UNKNOWN_ID if idex is out of stream array range */ zrtp_test_id_t zrtp_test_session_get_stream_by_idx(zrtp_test_id_t session_id, unsigned idx); zrtp_status_t zrtp_test_stream_get(zrtp_test_id_t id, zrtp_test_stream_info_t *info); zrtp_status_t zrtp_test_channel_create(zrtp_test_id_t left_stream, zrtp_test_id_t right_stream, zrtp_test_id_t *id); zrtp_status_t zrtp_test_channel_create2(zrtp_test_id_t left_session, zrtp_test_id_t right_session, unsigned stream_idx, zrtp_test_id_t *id); zrtp_status_t zrtp_test_channel_destroy(zrtp_test_id_t id); zrtp_status_t zrtp_test_channel_start(zrtp_test_id_t id); zrtp_status_t zrtp_test_channel_get(zrtp_test_id_t id, zrtp_test_channel_info_t *info); zrtp_stream_t *zrtp_stream_for_test_stream(zrtp_test_id_t stream_id); unsigned zrtp_stream_did_event_receive(zrtp_test_id_t stream_id, unsigned event);