libre
libre copied to clipboard
Toolkit library for asynchronous network IO with protocol stacks including SIP, SDP, RTP, STUN, TURN, ICE, BFCP and DNS.
README
libre - "Generic library for real-time communications with async IO support" Copyright (C) 2010 - 2012 Creytiv.com
Distributed under BSD license
Design goals:
- Portable POSIX source code (ANSI C89 and ISO C99 standard)
- Robust, fast, low memory footprint
- RFC compliance
- IPv4 and IPv6 support
Modules:
name: status: description:
- base64 testing Base-64 encoding/decoding functions
- bfcp unstable The Binary Floor Control Protocol (BFCP)
- conf testing Configuration file parser
- crc32 testing 32-bit CRC defined in ITU V.42
- dbg testing Debug printing
- dns testing DNS resolving (NAPTR, SRV, A)
- fmt testing Formatted printing and regular expression
- hash testing Hashmap table
- hmac testing HMAC: Keyed-Hashing for Message Authentication
- httpauth unstable HTTP-based Authentication (RFC 2617)
- ice unstable Interactive Connectivity Establishment (ICE)
- jbuf testing Jitter buffer
- list stable Sortable doubly-linked list handling
- lock testing Resource locking functions
- main testing Main poll loop
- mbuf stable Linear memory buffers
- md5 stable The MD5 Message-Digest Algorithm (RFC 1321)
- mem stable Memory referencing
- mod testing Run-time module loading
- mqueue testing Thread-safe message queue
- natbd unstable NAT Behavior Discovery using STUN
- net unstable Networking routines
- rtp testing Real-time Transport Protocol
- sa stable Socket Address functions
- sdp unstable Session Description Protocol
- sha testing Secure Hash Standard, NIST, FIPS PUB 180-1
- sip unstable Core SIP library
- sipevent unstable SIP Event framework
- sipreg testing SIP register client
- sipsess unstable SIP Sessions
- stun unstable Session Traversal Utilities for NAT (STUN)
- sys testing System information
- tcp testing TCP transport
- telev testing Telephony Events (RFC 4733)
- tls unstable Transport Layer Security
- tmr stable Timer handling
- turn testing Obtaining Relay Addresses from STUN (TURN)
- udp testing UDP transport
- uri testing Generic URI library
legend: "stable" - Code complete; Stable code and stable API "testing" - Code complete, but API might change "unstable" - Code complete but not completely tested "development" - Code is under development
Features:
- RFC 1321 - The MD5 Message-Digest Algorithm
- RFC 1886 - DNS Extensions to support IP version 6
- RFC 2032 - RTP Payload Format for H.261 Video Streams
- RFC 2617 - HTTP Authentication: Basic and Digest Access Authentication
- RFC 2782 - A DNS RR for Specifying the Location of Services (DNS SRV)
- RFC 2915 - The Naming Authority Pointer (NAPTR) DNS Resource Record
- RFC 3261 - SIP: Session Initiation Protocol
- RFC 3263 - Locating SIP Servers
- RFC 3264 - An Offer/Answer Model with SDP
- RFC 3265 - SIP-Specific Event Notification
- RFC 3327 - SIP Extension Header Field for Registering Non-Adjacent Contacts
- RFC 3428 - SIP Extension for Instant Messaging
- RFC 3489 - STUN - Simple Traversal of UDP Through NATs
- RFC 3515 - The SIP Refer Method
- RFC 3550 - RTP: A Transport Protocol for Real-Time Applications
- RFC 3551 - RTP Profile for Audio and Video Conferences with Minimal Control
- RFC 3555 - MIME Type Registration of RTP Payload Formats
- RFC 3556 - SDP Bandwidth Modifiers for RTCP Bandwidth
- RFC 3581 - An Extension to SIP for Symmetric Response Routing
- RFC 3605 - RTCP attribute in SDP
- RFC 3969 - The IANA URI Parameter Registry for SIP
- RFC 3994 - Indication of Message Composition for Instant Messaging
- RFC 4346 - The TLS Protocol Version 1.1
- RFC 4566 - SDP: Session Description Protocol
- RFC 4582 - The Binary Floor Control Protocol (BFCP)
- RFC 4585 - Extended RTP Profile for RTCP-Based Feedback
- RFC 4733 - RTP Payload for DTMF Digits, Telephony Tones, and Teleph. Signals
- RFC 4961 - Symmetric RTP / RTP Control Protocol (RTCP)
- RFC 5118 - SIP Torture Test Messages for IPv6
- RFC 5245 - Interactive Connectivity Establishment (ICE)
- RFC 5389 - Session Traversal Utilities for NAT (STUN)
- RFC 5626 - Managing Client-Initiated Connections in SIP
- RFC 5761 - Multiplexing RTP Data and Control Packets on a Single Port
- RFC 5766 - Traversal Using Relays around NAT (TURN)
- RFC 5768 - Indicating Support for ICE in SIP
- RFC 5769 - Test vectors for STUN
- RFC 5780 - NAT Behaviour Discovery Using STUN
- RFC 6026 - Correct Transaction Handling for 2xx Resp. to SIP INVITE Requests
- RFC 6156 - TURN Extension for IPv6
- Symmetric RTP
- ITU-T G.711 Appendix I and Appendix II
Supported platforms:
- Linux
- FreeBSD
- OpenBSD
- NetBSD
- Symbian OS
- Solaris
- Windows
- Apple Mac OS X and iOS
- Android
Supported compilers:
- gcc (v2.9x to v4.x)
- gcce
- ms vc2003 compiler
- codewarrior
Feedback:
- Please send feedback to [email protected]
Coding guidelines:
- Use enum for constants where appropriate
- Use const as much as possible (where appropriate)
- Use C99 data types (intN_t, uintN_t, bool)
- Hide data-types in .c files where possible (use struct foo)
- Avoid malloc/free, use mem_alloc/mem_deref instead
- CVS/svn/git tags are NOT allowed in the code!
- Avoid bit-fields in structs which are not portable
- Use dummy handlers for timing-critical callbacks
- return err, return alloced objects as pointer-pointers
- in allocating functions, first arg is always double pointer
- Use POSIX error-codes; EINVAL for invalid args, EBADMSG for parse errors and EPROTO for protocol errors