/* * 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 */ /** * \file zrtp_iface_system.h * \brief libzrtp platform-dependent routine */ #ifndef __ZRTP_IFACE_SYSTEM_H__ #define __ZRTP_IFACE_SYSTEM_H__ #include "zrtp_config.h" #include "zrtp_types.h" #if defined(__cplusplus) extern "C" { #endif /*============================================================================*/ /* System wide functions */ /*============================================================================*/ /** * \defgroup zrtp_iface Library Interfaces Overview * * This section describes the requirements for the implementation of each interface function. * Descriptions are divided into groups by function */ /** * \defgroup zrtp_iface_base Basic platform-dependent routine * \ingroup zrtp_iface * \{ */ /** * \brief Time in miliseconds * * libzrtp uses a unix-like time calculation scheme: time since 1/1/1970. */ typedef uint64_t zrtp_time_t; /** * \brief Allocates memory of a defined size * * Allocates \c size bytes and returns a pointer to the allocated memory Allocated memory is not * cleared. * * \param size - number of bytes for allocation * \return * - pointer to the allocated memory if successful. * - NULL if the memory allocation failed. */ extern void* zrtp_sys_alloc(unsigned int size); /** * \brief release memory * * Release the memory space pointed to by \c obj, which was returned by a previous zrtp_sys_alloc() * call. If \c obj is NULL, no operation is performed. * * \param obj - pointer to the released memory */ extern void zrtp_sys_free(void* obj); /** * \brief Memory copying function. * * This function copies \c length bytes from memory area \c src to memory area \c dest. The memory * areas should not overlap. * * \param dest - pointer to the destination buffer * \param src - pointer to the source buffer; * \param length - number of bytes to be copied. * \return * - pointer to the destination buffer (dest) */ extern void* zrtp_memcpy(void* dest, const void* src, unsigned int length); /** * \brief Write a byte to a byte string * * The zrtp_memset() function writes \c n bytes of value \c c (converted to an unsigned char) to the * string \c s. * \return * - first argument */ extern void *zrtp_memset(void *s, int c, unsigned int n); /** * \brief Returns current date and time * * This function should return current unix-like date and time: number of microseconds since * 1.1.1970. */ extern zrtp_time_t zrtp_time_now(); /** \} */ /*============================================================================*/ /* Mutex related interfaces */ /*============================================================================*/ /** * \defgroup zrtp_iface_mutex Synchronization related functions * \ingroup zrtp_iface * \{ */ /** * \brief Initializing the mutex structure * * This function allocates and initializes the mutex referenced by \c mutex with default attributes. * Upon successful initialization, the state of the mutex becomes initialized and unlocked. This * function should create a NON RECURSIVE mutex. (Attempting to relock the mutex causes deadlock) * * \param mutex - out parameter, mutex structure for allocation and initialization * \return: * - zrtp_status_ok if initialization successful; * - zrtp_status_fail if an error occurred. * \sa zrtp_mutex_destroy() */ extern zrtp_status_t zrtp_mutex_init(zrtp_mutex_t** mutex); /** * \brief Deinitializing the mutex structure * * This function destroys the mutex object previously allocated by zrtp_mutex_init(). * * \param mutex - mutex structure for deinitialization. * \return: * - zrtp_status_ok if deinitialization successful; * - zrtp_status_fail if an error occurred. * \sa zrtp_mutex_init() */ extern zrtp_status_t zrtp_mutex_destroy(zrtp_mutex_t* mutex); /** * \brief Mutex locking * * This function locks the mutex object referenced by \c mutex. If the mutex is already locked, the * thread that called it is blocked until the mutex becomes available. This operation returns the * mutex object referenced by the mutex in the locked state with the calling thread as its owner. * * \param mutex - mutex for locking; * \return: * - zrtp_status_ok if successful; * - zrtp_status_fail if an error occurred. */ extern zrtp_status_t zrtp_mutex_lock(zrtp_mutex_t* mutex); /** * \brief Mutex releasing * * This function releases the mutex object referenced by mutex. The way a mutex is released depends * on the mutex's type attribute. If there are threads blocked on the mutex object referenced by * mutex when zrtp_mutex_unlock() is called and the mutex becomes available, the scheduling policy * determines which thread acquires the mutex. * * \param mutex - mutex to release * \return: * - zrtp_status_ok if successful; * - zrtp_status_fail if an error occurred. */ extern zrtp_status_t zrtp_mutex_unlock(zrtp_mutex_t* mutex); /*! \} */ #if defined(__cplusplus) } #endif #endif /* __ZRTP_IFACE_SYSTEM_H__ */