forked from Mirrors/freeswitch
d2edcad66e
Thanks to Phil Zimmermann for the code and for the license exception we needed to include it. There remains some build system integration work to be done before this code will build properly in the FreeSWITCH tree.
67 lines
1.8 KiB
C
67 lines
1.8 KiB
C
/*
|
|
* 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 <v.krikun at zfoneproject.com>
|
|
*/
|
|
|
|
#include "zrtp.h"
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
void init_mlist(mlist_t* head) {
|
|
head->next = head;
|
|
head->prev = head;
|
|
}
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
static void mlist_insert_node(mlist_t* node, mlist_t* prev, mlist_t* next) {
|
|
next->prev = node;
|
|
node->next = next;
|
|
node->prev = prev;
|
|
prev->next = node;
|
|
}
|
|
|
|
void mlist_insert(mlist_t *prev, mlist_t *node) {
|
|
mlist_insert_node(node, prev->prev, prev);
|
|
}
|
|
|
|
void mlist_add(mlist_t* head, mlist_t* node) {
|
|
mlist_insert_node(node, head, head->next);
|
|
}
|
|
|
|
void mlist_add_tail(mlist_t *head, mlist_t *node) {
|
|
mlist_insert_node(node, head->prev, head);
|
|
}
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
static void mlist_remove(mlist_t* prev, mlist_t* next) {
|
|
next->prev = prev;
|
|
prev->next = next;
|
|
}
|
|
|
|
void mlist_del(mlist_t *node) {
|
|
mlist_remove(node->prev, node->next);
|
|
node->next = node->prev = 0;
|
|
}
|
|
|
|
void mlist_del_tail(mlist_t *node) {
|
|
mlist_remove(node->prev, node->next);
|
|
node->next = node->prev = 0;
|
|
}
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
mlist_t* mlist_get(mlist_t *head) {
|
|
return (head->next != head) ? head->next : 0;
|
|
}
|
|
|
|
mlist_t* mlist_get_tail(mlist_t *head) {
|
|
return (head->prev != head) ? head->prev : 0;
|
|
}
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
int mlist_isempty(mlist_t *head) {
|
|
return (head->next == head);
|
|
}
|