2016-11-08 15:07:08 +01:00
|
|
|
libre README
|
|
|
|
============
|
2010-11-03 11:34:14 +00:00
|
|
|
|
2016-11-08 15:07:08 +01:00
|
|
|
|
|
|
|
libre is a Generic library for real-time communications with async IO support.
|
2016-02-03 14:28:54 +00:00
|
|
|
Copyright (C) 2010 - 2016 Creytiv.com
|
2010-11-03 11:34:14 +00:00
|
|
|
|
2016-11-08 15:07:08 +01:00
|
|
|
|
|
|
|
[](https://travis-ci.org/creytiv/re)
|
|
|
|
|
|
|
|
|
|
|
|
## Features
|
|
|
|
|
|
|
|
* SIP Stack (RFC 3261)
|
|
|
|
* SDP
|
|
|
|
* RTP and RTCP
|
|
|
|
* SRTP and SRTCP (Secure RTP)
|
|
|
|
* DNS-Client
|
|
|
|
* STUN/TURN/ICE stack
|
|
|
|
* BFCP
|
|
|
|
* HTTP-stack with client/server
|
|
|
|
* Websockets
|
|
|
|
* Jitter-buffer
|
|
|
|
* Async I/O (poll, epoll, select, kqueue)
|
|
|
|
* UDP/TCP/TLS/DTLS transport
|
|
|
|
* JSON parser
|
|
|
|
|
|
|
|
|
|
|
|
## Building
|
|
|
|
|
|
|
|
libre is using GNU makefiles, and OpenSSL development headers must be
|
|
|
|
installed before building.
|
|
|
|
|
|
|
|
|
|
|
|
### Build with debug enabled
|
|
|
|
|
|
|
|
```
|
|
|
|
$ make
|
|
|
|
$ sudo make install
|
|
|
|
$ sudo ldconfig
|
|
|
|
```
|
|
|
|
|
|
|
|
### Build with release
|
|
|
|
|
|
|
|
```
|
|
|
|
$ make RELEASE=1
|
|
|
|
$ sudo make RELEASE=1 install
|
|
|
|
$ sudo ldconfig
|
|
|
|
```
|
|
|
|
|
|
|
|
### Build with clang compiler
|
|
|
|
|
|
|
|
```
|
|
|
|
$ make CC=clang
|
|
|
|
$ sudo make CC=clang install
|
|
|
|
$ sudo ldconfig
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Documentation
|
|
|
|
|
|
|
|
The online documentation generated with doxygen is available in
|
|
|
|
the main [website](http://creytiv.com/doxygen/re-dox/html/)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Examples
|
|
|
|
|
|
|
|
Coding examples are available from the
|
|
|
|
[redemo](http://creytiv.com/pub/redemo-0.4.1.tar.gz) project
|
2010-11-03 11:34:14 +00:00
|
|
|
|
|
|
|
|
2016-11-08 15:07:08 +01:00
|
|
|
## License
|
|
|
|
|
|
|
|
The libre project is using the BSD license.
|
|
|
|
|
|
|
|
|
|
|
|
## Contributing
|
|
|
|
|
|
|
|
Patches can sent via Github
|
|
|
|
[Pull-Requests](https://github.com/creytiv/re/pulls) or to the RE devel
|
|
|
|
[mailing-list](http://lists.creytiv.com/mailman/listinfo/re-devel).
|
|
|
|
Currently we only accept small patches.
|
|
|
|
Please send private feedback to libre [at] creytiv.com
|
|
|
|
|
|
|
|
|
|
|
|
## Design goals
|
2010-11-03 11:34:14 +00:00
|
|
|
|
|
|
|
* Portable POSIX source code (ANSI C89 and ISO C99 standard)
|
|
|
|
* Robust, fast, low memory footprint
|
|
|
|
* RFC compliance
|
|
|
|
* IPv4 and IPv6 support
|
|
|
|
|
|
|
|
|
2016-11-08 15:07:08 +01:00
|
|
|
## Modules
|
2010-11-03 11:34:14 +00:00
|
|
|
|
2016-11-08 15:07:08 +01:00
|
|
|
```
|
2010-11-03 11:34:14 +00:00
|
|
|
name: status: description:
|
|
|
|
|
2014-04-04 12:28:35 +00:00
|
|
|
* aes unstable AES (Advanced Encryption Standard)
|
2010-11-03 11:34:14 +00:00
|
|
|
* base64 testing Base-64 encoding/decoding functions
|
2011-09-06 21:53:53 +00:00
|
|
|
* bfcp unstable The Binary Floor Control Protocol (BFCP)
|
2010-11-03 11:34:14 +00:00
|
|
|
* conf testing Configuration file parser
|
|
|
|
* crc32 testing 32-bit CRC defined in ITU V.42
|
|
|
|
* dbg testing Debug printing
|
2015-01-26 08:46:01 +00:00
|
|
|
* dns stable DNS resolving (NAPTR, SRV, A)
|
2010-11-03 11:34:14 +00:00
|
|
|
* fmt testing Formatted printing and regular expression
|
|
|
|
* hash testing Hashmap table
|
|
|
|
* hmac testing HMAC: Keyed-Hashing for Message Authentication
|
2013-06-08 13:41:56 +00:00
|
|
|
* http unstable HTTP parser (RFC 2616)
|
2014-06-18 18:35:04 +00:00
|
|
|
* httpauth testing HTTP-based Authentication (RFC 2617)
|
2011-03-01 11:11:08 +00:00
|
|
|
* ice unstable Interactive Connectivity Establishment (ICE)
|
2010-11-03 11:34:14 +00:00
|
|
|
* jbuf testing Jitter buffer
|
2015-10-15 06:53:29 +00:00
|
|
|
* json unstable JavaScript Object Notation (JSON)
|
2010-11-03 11:34:14 +00:00
|
|
|
* 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
|
2011-03-01 11:11:08 +00:00
|
|
|
* mqueue testing Thread-safe message queue
|
2014-02-21 20:37:46 +00:00
|
|
|
* msg unstable Generic message component library
|
2010-11-03 11:34:14 +00:00
|
|
|
* natbd unstable NAT Behavior Discovery using STUN
|
2014-06-18 18:35:04 +00:00
|
|
|
* net testing Networking routines
|
2015-08-31 07:50:31 +00:00
|
|
|
* odict unstable Ordered Dictionary
|
2010-11-03 11:34:14 +00:00
|
|
|
* rtp testing Real-time Transport Protocol
|
|
|
|
* sa stable Socket Address functions
|
2014-06-18 18:35:04 +00:00
|
|
|
* sdp testing Session Description Protocol
|
2010-11-03 11:34:14 +00:00
|
|
|
* sha testing Secure Hash Standard, NIST, FIPS PUB 180-1
|
2015-01-26 08:46:01 +00:00
|
|
|
* sip stable Core SIP library
|
2014-06-18 18:35:04 +00:00
|
|
|
* sipevent testing SIP Event framework
|
2015-01-26 08:46:01 +00:00
|
|
|
* sipreg stable SIP register client
|
|
|
|
* sipsess stable SIP Sessions
|
2014-05-05 18:40:06 +00:00
|
|
|
* srtp unstable Secure Real-time Transport Protocol (SRTP)
|
2015-01-26 08:46:01 +00:00
|
|
|
* stun stable Session Traversal Utilities for NAT (STUN)
|
2010-11-03 11:34:14 +00:00
|
|
|
* sys testing System information
|
|
|
|
* tcp testing TCP transport
|
|
|
|
* telev testing Telephony Events (RFC 4733)
|
|
|
|
* tls unstable Transport Layer Security
|
|
|
|
* tmr stable Timer handling
|
2015-01-26 08:46:01 +00:00
|
|
|
* turn stable Obtaining Relay Addresses from STUN (TURN)
|
2010-11-03 11:34:14 +00:00
|
|
|
* udp testing UDP transport
|
|
|
|
* uri testing Generic URI library
|
2014-04-10 11:50:57 +00:00
|
|
|
* websock unstable WebSocket Client and Server
|
2010-11-03 11:34:14 +00:00
|
|
|
|
|
|
|
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
|
2016-11-08 15:07:08 +01:00
|
|
|
```
|
2010-11-03 11:34:14 +00:00
|
|
|
|
|
|
|
|
2016-11-08 15:07:08 +01:00
|
|
|
## Features
|
2010-11-03 11:34:14 +00:00
|
|
|
|
|
|
|
* 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
|
2013-06-08 13:41:56 +00:00
|
|
|
* RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1
|
2010-11-03 11:34:14 +00:00
|
|
|
* 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
|
2011-12-21 14:20:26 +00:00
|
|
|
* RFC 3265 - SIP-Specific Event Notification
|
2010-11-03 11:34:14 +00:00
|
|
|
* 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
|
2011-12-21 14:20:26 +00:00
|
|
|
* RFC 3515 - The SIP Refer Method
|
2010-11-03 11:34:14 +00:00
|
|
|
* 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
|
2014-05-05 18:40:06 +00:00
|
|
|
* RFC 3711 - The Secure Real-time Transport Protocol (SRTP)
|
2010-11-03 11:34:14 +00:00
|
|
|
* 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
|
2011-09-06 11:51:13 +00:00
|
|
|
* RFC 4582 - The Binary Floor Control Protocol (BFCP)
|
2010-11-03 11:34:14 +00:00
|
|
|
* 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)
|
2011-02-25 09:17:21 +00:00
|
|
|
* RFC 5626 - Managing Client-Initiated Connections in SIP
|
2010-12-05 15:44:23 +00:00
|
|
|
* RFC 5761 - Multiplexing RTP Data and Control Packets on a Single Port
|
2010-11-03 11:34:14 +00:00
|
|
|
* 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
|
2011-04-28 16:35:24 +00:00
|
|
|
* RFC 6156 - TURN Extension for IPv6
|
2014-05-05 18:40:06 +00:00
|
|
|
* RFC 6188 - The Use of AES-192 and AES-256 in Secure RTP
|
2014-04-10 11:50:57 +00:00
|
|
|
* RFC 6455 - The WebSocket Protocol
|
2015-10-26 07:17:26 +00:00
|
|
|
* RFC 7159 - JavaScript Object Notation (JSON)
|
2014-12-10 08:23:20 +00:00
|
|
|
* RFC 7350 - DTLS as Transport for STUN
|
2010-11-03 11:34:14 +00:00
|
|
|
* Symmetric RTP
|
2013-02-22 22:11:25 +00:00
|
|
|
* draft-ietf-bfcpbis-rfc4582bis-08
|
2010-11-03 11:34:14 +00:00
|
|
|
|
|
|
|
|
2016-11-08 15:07:08 +01:00
|
|
|
## Supported platforms
|
2010-11-03 11:34:14 +00:00
|
|
|
|
|
|
|
* Linux
|
|
|
|
* FreeBSD
|
|
|
|
* OpenBSD
|
|
|
|
* NetBSD
|
|
|
|
* Solaris
|
|
|
|
* Windows
|
2011-07-23 21:28:15 +00:00
|
|
|
* Apple Mac OS X and iOS
|
|
|
|
* Android
|
2010-11-03 11:34:14 +00:00
|
|
|
|
2016-11-08 15:07:08 +01:00
|
|
|
### Supported versions of C Standard library
|
2010-11-03 11:34:14 +00:00
|
|
|
|
2016-11-08 15:07:08 +01:00
|
|
|
* Android bionic
|
|
|
|
* BSD libc
|
|
|
|
* GNU C Library (glibc)
|
|
|
|
* Windows C Run-Time Libraries (CRT)
|
|
|
|
* uClibc
|
|
|
|
|
|
|
|
|
|
|
|
## Supported compilers:
|
2010-11-03 11:34:14 +00:00
|
|
|
|
|
|
|
* gcc (v2.9x to v4.x)
|
|
|
|
* gcce
|
|
|
|
* ms vc2003 compiler
|
2014-01-05 12:01:12 +00:00
|
|
|
* clang
|
2010-11-03 11:34:14 +00:00
|
|
|
|
|
|
|
|
2016-11-08 15:07:08 +01:00
|
|
|
## Coding guidelines
|
2010-11-03 11:34:14 +00:00
|
|
|
|
|
|
|
* 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
|
2015-01-26 08:46:01 +00:00
|
|
|
|
|
|
|
|
2016-11-08 15:07:08 +01:00
|
|
|
## Transport protocols
|
2015-01-26 08:46:01 +00:00
|
|
|
|
|
|
|
|
2016-11-08 15:07:08 +01:00
|
|
|
```
|
2015-01-26 08:46:01 +00:00
|
|
|
TCP UDP TLS DTLS
|
|
|
|
~~~ ~~~ ~~~ ~~~~
|
|
|
|
|
|
|
|
BFCP - yes - -
|
|
|
|
|
|
|
|
DNS yes yes - -
|
|
|
|
|
|
|
|
HTTP yes n/a yes n/a
|
|
|
|
|
|
|
|
ICE - yes - -
|
|
|
|
|
|
|
|
RTP - yes - -
|
|
|
|
|
|
|
|
RTCP - yes - -
|
|
|
|
|
|
|
|
SIP yes yes yes -
|
|
|
|
|
|
|
|
STUN yes yes yes yes
|
|
|
|
|
|
|
|
TURN yes yes yes yes
|
|
|
|
|
|
|
|
WEBSOCK yes n/a yes n/a
|
2016-11-08 15:07:08 +01:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Related projects
|
|
|
|
|
|
|
|
* [librem](https://github.com/creytiv/rem)
|
|
|
|
* [retest](https://github.com/creytiv/retest)
|
|
|
|
* [baresip](https://github.com/alfredh/baresip)
|
|
|
|
* [restund](http://creytiv.com/restund.html)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## References
|
|
|
|
|
|
|
|
http://creytiv.com/re.html
|
|
|
|
|
|
|
|
https://github.com/creytiv/re
|
|
|
|
|
|
|
|
http://lists.creytiv.com/mailman/listinfo/re-devel
|
|
|
|
|