html/0000755000175000017500000000000014642372355011015 5ustar buildbuildhtml/jibuf_8h.html0000644000175000017500000002764014642372355013412 0ustar buildbuild libosmo-netif: include/osmocom/netif/jibuf.h File Reference
libosmo-netif 1.4.0
Osmocom network interface library
jibuf.h File Reference

Osmocom Jitter Buffer helpers. More...

#include <stdint.h>
#include <stdbool.h>
#include <time.h>
#include <osmocom/core/timer.h>

Go to the source code of this file.

Data Structures

struct  osmo_jibuf
 A structure representing a single instance of a jitter buffer. More...
 

Typedefs

typedef void(* osmo_jibuf_dequeue_cb) (struct msgb *msg, void *data)
 

Functions

struct osmo_jibufosmo_jibuf_alloc (void *talloc_ctx)
 Allocate a new jitter buffer instance. More...
 
void osmo_jibuf_delete (struct osmo_jibuf *jb)
 Destroy a previously allocated jitter buffer instance. More...
 
int osmo_jibuf_enqueue (struct osmo_jibuf *jb, struct msgb *msg)
 Try to enqueue a packet into the jitter buffer. More...
 
bool osmo_jibuf_empty (struct osmo_jibuf *jb)
 Check whether the jitter buffer instance has packets queued or not. More...
 
void osmo_jibuf_set_min_delay (struct osmo_jibuf *jb, uint32_t min_delay)
 Set minimum buffer size for the jitter buffer. More...
 
void osmo_jibuf_set_max_delay (struct osmo_jibuf *jb, uint32_t max_delay)
 Set maximum buffer size for the jitter buffer. More...
 
void osmo_jibuf_enable_skew_compensation (struct osmo_jibuf *jb, bool enable)
 Toggle use of skew detection and compensation mechanism. More...
 
void osmo_jibuf_set_dequeue_cb (struct osmo_jibuf *jb, osmo_jibuf_dequeue_cb dequeue_cb, void *cb_data)
 Set dequeue callback for the jitter buffer. More...
 

Detailed Description

Osmocom Jitter Buffer helpers.

html/navtreeindex0.js0000644000175000017500000002367614642372355014145 0ustar buildbuildvar NAVTREEINDEX0 = { "amr_8h_source.html":[2,0,0,0,0,0], "annotated.html":[1,0], "datagram_8c.html":[0,3,0], "datagram_8h_source.html":[2,0,0,0,0,1], "dir_15662fdf1b5c37dde6a3ed82e5410e57.html":[2,0,0,0,0], "dir_68267d1309a1af8e8297ef4c3efbcdba.html":[2,0,1], "dir_abe9b486a10ccc5afdf8abc29637e0c1.html":[2,0,0,0], "dir_d44c64559bbebec7f509842c48db8b23.html":[2,0,0], "files.html":[2,0], "functions.html":[1,1,0], "functions_vars.html":[1,1,1], "globals.html":[2,1,0], "globals_func.html":[2,1,1], "globals_vars.html":[2,1,2], "group__datagram.html":[0,3], "group__datagram.html#ga01efa7269834a745d80910a64c6f61c0":[0,3,10], "group__datagram.html#ga01fb36f8c19b2b64705d8263f7f53f59":[0,3,6], "group__datagram.html#ga095ce94e65f1607026c37c12e6f5e9c0":[0,3,31], "group__datagram.html#ga0eb580467681e8fa91be35a83a74f132":[0,3,25], "group__datagram.html#ga16d69e998c663cdec0b76560a2d8cfb9":[0,3,14], "group__datagram.html#ga27bf4c1d8e4c30ef7b4ec49665d6fc90":[0,3,24], "group__datagram.html#ga36d7e1f26af3308b51f95e06d1c742d7":[0,3,7], "group__datagram.html#ga46db4acbfc35668e35601338d64364ed":[0,3,4], "group__datagram.html#ga48d7e39656886b52aa176fc1b14c84cf":[0,3,34], "group__datagram.html#ga56ee60c89f1a3bc975ab0ede5b71ff15":[0,3,5], "group__datagram.html#ga5a0f7221b8583aac5153f167c4e2177d":[0,3,17], "group__datagram.html#ga6677ee8d976d2e1bed8e0c01e103c18f":[0,3,23], "group__datagram.html#ga66d6c9d5f0243a4f7ed458c62d8e20dd":[0,3,18], "group__datagram.html#ga6b6ef2f02e3d260f1e84a2ecf8c67b5a":[0,3,22], "group__datagram.html#ga6c843f43db5439f8f0ba38f72dbb1a20":[0,3,32], "group__datagram.html#ga6e4b92b9c7f210d1cb3782425d0bdac0":[0,3,12], "group__datagram.html#ga8d712623df3862e55ad248dc5ecd626c":[0,3,28], "group__datagram.html#ga9180ae9a36a9927d4bdb49cdc5708b1f":[0,3,21], "group__datagram.html#ga94fe94f64f1285715db36eb1f2e9deaa":[0,3,30], "group__datagram.html#gaa6a5fbd5f227d15cefe6b234fefb3b4d":[0,3,19], "group__datagram.html#gaad6f9ca0688cd4a8a95ec6002f52ded5":[0,3,27], "group__datagram.html#gaae58d13a6fd634ebfddd486d0d428c5e":[0,3,9], "group__datagram.html#gac65de108c52dba83b178d6453e9fb545":[0,3,8], "group__datagram.html#gad378ba5cc66ee0c27a277906d8434e31":[0,3,15], "group__datagram.html#gad4638b9943090f5bf1a7b75fa8efde46":[0,3,29], "group__datagram.html#gad7af9f04fe4847b0e2eefe35fa05a8b8":[0,3,11], "group__datagram.html#gadeaa837f3df8382bd7a50e668b9d3a61":[0,3,26], "group__datagram.html#gae2962232548d41621520c6c71da423a5":[0,3,33], "group__datagram.html#gaf21d974e14fa22f910313b240d31d40f":[0,3,20], "group__datagram.html#gaf558e9c2f02216ed95db039ddaf31050":[0,3,13], "group__datagram.html#gafbd947def18d8e34062876433ac05e91":[0,3,16], "group__jibuf.html":[0,0], "group__jibuf.html#ga096e87b2dbdade72c35d51a51fe57839":[0,0,7], "group__jibuf.html#ga20592f230f9d1233752fd318996f2c9d":[0,0,4], "group__jibuf.html#ga3a8213fe8bed42d649fcb1c8d13e23d8":[0,0,9], "group__jibuf.html#ga522165ddc51578436ae2d26691fa7ec0":[0,0,8], "group__jibuf.html#ga5e84571c3348525b6ad647a22cd2581d":[0,0,10], "group__jibuf.html#gabcd63f39049bc4d6b3541a674b78963d":[0,0,11], "group__jibuf.html#gacdac7beaf3d97543718ddfa33123fb7e":[0,0,5], "group__jibuf.html#gae73a3b805b83f453339adeee9cdfaba4":[0,0,6], "group__osmux.html":[0,1], "group__osmux.html#ga08151bad3c12df245d4c0e4f9c4ca966":[0,1,19], "group__osmux.html#ga0d96c8a544e0ff56576615e0b2ac7774":[0,1,18], "group__osmux.html#ga3936e43e881d0992648937417969ead1":[0,1,20], "group__osmux.html#ga41a217bffa1b0ac095c98ab0fab82c25":[0,1,14], "group__osmux.html#ga97187827e1f793f2392e54585343db32":[0,1,17], "group__osmux.html#ga9c7d30c0d7d9bc0caf744799d629d4cc":[0,1,13], "group__osmux.html#ga9faf7e88ba58b39f4fc2df706aa157c0":[0,1,21], "group__osmux.html#gaaac410425f6470396ae9db53ebb8dc44":[0,1,15], "group__osmux.html#gaf654e092ca97dd764f59905a2ed21650":[0,1,12], "group__osmux.html#gafee78ee4522a9caa238301d7b913dfd6":[0,1,16], "group__stream.html":[0,2], "group__stream.html#ga0038e937cf0f36c59e0e3991523219a1":[0,2,21], "group__stream.html#ga0615daa4aac253a3d530f35fddbc68bd":[0,2,13], "group__stream.html#ga06f9743c19068bb720a4949ae8467243":[0,2,19], "group__stream.html#ga090fc3fcd1706b815ef5a729921c100e":[0,2,28], "group__stream.html#ga11d2615f6197f33073ba7245e5ba95ee":[0,2,18], "group__stream.html#ga123b7866ed4985a81246bfede79a8ea9":[0,2,8], "group__stream.html#ga127866794591d16a0eb7244f2fe666ef":[0,2,17], "group__stream.html#ga1754a498abc27577a8e0b3b0f236c05b":[0,2,10], "group__stream.html#ga1903f9aa2e6f9283ebcf20f573b1d970":[0,2,61], "group__stream.html#ga196834d254fd94922d6be91b7b5b1ed3":[0,2,67], "group__stream.html#ga1eea525d4e1e7a24c9c08881994ceb7e":[0,2,52], "group__stream.html#ga21a5f061ca2cb307906a9552abebb075":[0,2,38], "group__stream.html#ga23e5c1799a8225607543de39a56ca449":[0,2,25], "group__stream.html#ga2508987133a93863d2a50103004b0f36":[0,2,60], "group__stream.html#ga2693c0cc5c6222dd9ed42c8c4bf8aec8":[0,2,6], "group__stream.html#ga27052cc04e7f50b71492d4f8aaf7ed61":[0,2,69], "group__stream.html#ga28243be108ed0302b0f5a9d1dfc96b22":[0,2,50], "group__stream.html#ga33ce730fc91ebade9b7188fa220656c6":[0,2,26], "group__stream.html#ga41e8ad2c761aaa00313aa11d1f29a3ed":[0,2,58], "group__stream.html#ga47bbca4f12717db2e6158eefe6310b9b":[0,2,43], "group__stream.html#ga47f18e063f64f22cb74d58d8b7243bed":[0,2,40], "group__stream.html#ga4d83e3cf7fdf7eb354c2015ff9bed98a":[0,2,29], "group__stream.html#ga5e5c4c9aacc1cd1d303c0295018594cb":[0,2,37], "group__stream.html#ga5e94c511d537f63337912bb50fb2dc28":[0,2,24], "group__stream.html#ga5ef0f0c85a52c08e8c10d36a8f44e392":[0,2,55], "group__stream.html#ga603b89074d3e8c0fb44144ab1864f0d4":[0,2,51], "group__stream.html#ga606a53840677f3f5200887dc92f5de4d":[0,2,12], "group__stream.html#ga70420e7c664cc4c4e69ac4d3476e7f53":[0,2,27], "group__stream.html#ga76bbbafd1d8dc9c9ebffd301503b6dd9":[0,2,59], "group__stream.html#ga78d44fbda720218be1700d351691e60a":[0,2,64], "group__stream.html#ga79a09e9c9b8cc98991cd5eebdb41ed57":[0,2,15], "group__stream.html#ga7b8981351a154c357fcefd39c31ad42a":[0,2,48], "group__stream.html#ga7d7b6af7df24e90dc758a088bae6316d":[0,2,49], "group__stream.html#ga8390ce6740e56eb22215e1c5805c95f1":[0,2,66], "group__stream.html#ga86b4b9c8e563f8426d3cdae803e3ec38":[0,2,16], "group__stream.html#ga882acaaa5935422b0e09a2ce8c8019ec":[0,2,46], "group__stream.html#ga8be283e1a143e346b4d6ccf33cbb9b98":[0,2,39], "group__stream.html#ga91d57aa94a370520540d7272af66a23b":[0,2,33], "group__stream.html#ga9629b516297c31f34af48e4630973dab":[0,2,56], "group__stream.html#ga9891663b20714d72f992e44ad1e92eea":[0,2,65], "group__stream.html#ga9cf689935bf6ffac4f86f56219d73c8e":[0,2,42], "group__stream.html#ga9d0dac2f390c660c85fa347765f4f45a":[0,2,11], "group__stream.html#gaa1589994cf6eab27742cafee6b7fb491":[0,2,63], "group__stream.html#gaa196e78db6ca32abb1473566b4f1b04b":[0,2,31], "group__stream.html#gaab1e7ef0ccc88e124c5f7bbb5e46c29c":[0,2,22], "group__stream.html#gaacf415b97e1184baadeee5c60387422b":[0,2,20], "group__stream.html#gaad262988c7ac365566f03843c560f892":[0,2,45], "group__stream.html#gaadabca7d23c52c39e291bf7e05f0055b":[0,2,54], "group__stream.html#gab588bfd88a3cc775875981e2ee66e295":[0,2,23], "group__stream.html#gab8b9f65bebfeb83c6e33d102e9439770":[0,2,32], "group__stream.html#gab98cc1a9428b5ac82fd8255d07563726":[0,2,68], "group__stream.html#gac2c359892ad63309b59a4b402f6a3e81":[0,2,7], "group__stream.html#gac86242c41223c525c770ff7e7515d83e":[0,2,62], "group__stream.html#gacb5d68c2a6a9663f99266c70747bce04":[0,2,47], "group__stream.html#gacece90116484e34540def69b05c66f57":[0,2,53], "group__stream.html#gad1d1817f25694ea126779262cddf4fbd":[0,2,34], "group__stream.html#gad217c1c1b83ac852e090afd49146db19":[0,2,9], "group__stream.html#gad325d97b09c724e830c98d76b890520d":[0,2,44], "group__stream.html#gad4c563e88d269092b0d66f33a4764420":[0,2,35], "group__stream.html#gade74792afe35f31dd2584c888db3dd62":[0,2,36], "group__stream.html#gadef998825a4739660b198151fcee4201":[0,2,57], "group__stream.html#gae2a0ef01097d964c71e38600b4c078d5":[0,2,41], "group__stream.html#gaeb712dc553735736047f9b11d9583baa":[0,2,30], "group__stream.html#gaecd148ae11f2f619aa52dd2900a15827":[0,2,14], "index.html":[], "ipa_8h_source.html":[2,0,0,0,0,2], "ipa__unit_8h_source.html":[2,0,0,0,0,3], "jibuf_8c.html":[0,0,1], "jibuf_8h.html":[0,0,0], "modules.html":[0], "osmux_8c.html":[0,1,1], "osmux_8h.html":[0,1,0], "osmux__input_8c.html":[0,1,2], "osmux__output_8c.html":[0,1,3], "pages.html":[], "prim_8h_source.html":[2,0,0,0,0,6], "rs232_8h_source.html":[2,0,0,0,0,7], "rtp_8h_source.html":[2,0,0,0,0,8], "sctp_8h_source.html":[2,0,0,0,0,9], "stream_8c.html":[0,2,0], "stream_8h_source.html":[2,0,0,0,0,10], "stream__cli_8c.html":[0,2,1], "stream__private_8h_source.html":[2,0,0,0,0,11], "stream__srv_8c.html":[0,2,2], "structamr__hdr.html":[1,0,0], "structamr__hdr__bwe.html":[1,0,1], "structbaudrate2termbits.html":[1,0,2], "structipa__head.html":[1,0,3], "structipa__head__ext.html":[1,0,4], "structosmo__dgram.html":[0,3,3], "structosmo__dgram__rx.html":[0,3,2], "structosmo__dgram__tx.html":[0,3,1], "structosmo__ipa__msgb__cb.html":[1,0,8], "structosmo__ipa__unit.html":[1,0,9], "structosmo__jibuf.html":[0,0,2], "structosmo__jibuf__msgb__cb.html":[0,0,3], "structosmo__prim__pkt__hdr.html":[1,0,12], "structosmo__prim__pkt__hdr.html#aaca814fcecde761d5205ab9e6beb4b2e":[1,0,12,0], "structosmo__prim__pkt__hdr.html#ac227c462fca290539d67d9f21a908e19":[1,0,12,1], "structosmo__prim__srv.html":[1,0,13], "structosmo__prim__srv__link.html":[1,0,14], "structosmo__rs232.html":[1,0,15], "structosmo__rtp__handle.html":[1,0,16], "structosmo__stream__cli.html":[0,2,3], "structosmo__stream__srv.html":[0,2,5], "structosmo__stream__srv__link.html":[0,2,4], "structosmux__circuit.html":[0,1,8], "structosmux__hdr.html":[0,1,4], "structosmux__in__handle.html":[0,1,5], "structosmux__in__req.html":[0,1,9], "structosmux__input__state.html":[0,1,10], "structosmux__link.html":[0,1,7], "structosmux__out__handle.html":[0,1,6], "structosmux__tx__handle.html":[0,1,11], "structrtcp__hdr.html":[1,0,28], "structrtp__hdr.html":[1,0,29], "structrtp__x__hdr.html":[1,0,30], "structsap__ctl__hello__param.html":[1,0,31], "structsap__ctl__prim.html":[1,0,32] }; html/group__osmux.html0000644000175000017500000020075114642372355014436 0ustar buildbuild libosmo-netif: Osmocom Multiplex Protocol
libosmo-netif 1.4.0
Osmocom network interface library
Osmocom Multiplex Protocol

Files

file  osmux.h
 
file  osmux.c
 Osmocom multiplex protocol helpers.
 
file  osmux_input.c
 Osmocom multiplex protocol helpers (input)
 
file  osmux_output.c
 Osmocom multiplex protocol helpers (output)
 

Data Structures

struct  osmux_hdr
 
struct  osmux_in_handle
 
struct  osmux_out_handle
 
struct  osmux_link
 
struct  osmux_circuit
 
struct  osmux_in_req
 
struct  osmux_input_state
 
struct  osmux_tx_handle
 

Macros

#define OSMUX_DEFAULT_PORT   1984
 
#define OSMUX_FT_SIGNAL   0
 
#define OSMUX_FT_VOICE_AMR   1
 
#define OSMUX_FT_DUMMY   2
 
#define OSMUX_MAX_CONCURRENT_CALLS   8
 
#define OSMUX_BATCH_DEFAULT_MAX   1472
 
#define SNPRINTF_BUFFER_SIZE(ret, remain, offset)
 
#define DELTA_RTP_MSG   20000
 
#define DELTA_RTP_TIMESTAMP   160
 
#define LOGMUXLK_(link, lvl, fmt, args ...)
 
#define LOGMUXLK(link, lvl, fmt, args ...)    LOGMUXLK_(link, lvl, " " fmt, ## args)
 
#define LOGMUXCID(link, circuit, lvl, fmt, args ...)
 
#define DELTA_RTP_MSG   20000
 
#define DELTA_RTP_TIMESTAMP   160
 

Typedefs

typedef struct msgb *(* rtp_msgb_alloc_cb_t) (void *rtp_msgb_alloc_priv_data, unsigned int msg_len)
 

Functions

struct osmux_hdr __attribute__ ((packed))
 
static uint8_t * osmux_get_payload (struct osmux_hdr *osmuxh)
 
int osmux_snprintf (char *buf, size_t size, struct msgb *msg)
 
struct osmux_in_handleosmux_xfrm_input_alloc (void *ctx)
 
void osmux_xfrm_input_init (struct osmux_in_handle *h) OSMO_DEPRECATED("Use osmux_xfrm_input_alloc() instead")
 
void osmux_xfrm_input_fini (struct osmux_in_handle *h) OSMO_DEPRECATED("Use talloc_free() instead")
 
void osmux_xfrm_input_set_name (struct osmux_in_handle *h, const char *name)
 
int osmux_xfrm_input_set_batch_factor (struct osmux_in_handle *h, uint8_t batch_factor)
 
void osmux_xfrm_input_set_batch_size (struct osmux_in_handle *h, uint16_t batch_size)
 
void osmux_xfrm_input_set_initial_seqnum (struct osmux_in_handle *h, uint8_t osmux_seqnum)
 
void osmux_xfrm_input_set_deliver_cb (struct osmux_in_handle *h, void(*deliver_cb)(struct msgb *msg, void *data), void *data)
 
void * osmux_xfrm_input_get_deliver_cb_data (struct osmux_in_handle *h)
 
int osmux_xfrm_input_open_circuit (struct osmux_in_handle *h, int ccid, int dummy)
 
void osmux_xfrm_input_close_circuit (struct osmux_in_handle *h, int ccid)
 
int osmux_xfrm_input (struct osmux_in_handle *h, struct msgb *msg, int ccid)
 
void osmux_xfrm_input_deliver (struct osmux_in_handle *h)
 
struct osmux_out_handleosmux_xfrm_output_alloc (void *ctx)
 Allocate a new osmux out handle. More...
 
void osmux_xfrm_output_init (struct osmux_out_handle *h, uint32_t rtp_ssrc) OSMO_DEPRECATED("Use osmux_xfrm_output_alloc() and osmux_xfrm_output_set_rtp_*() instead")
 
void osmux_xfrm_output_init2 (struct osmux_out_handle *h, uint32_t rtp_ssrc, uint8_t rtp_payload_type) OSMO_DEPRECATED("Use osmux_xfrm_output_alloc() and osmux_xfrm_output_set_rtp_*() instead")
 
void osmux_xfrm_output_set_rtp_ssrc (struct osmux_out_handle *h, uint32_t rtp_ssrc)
 Set SSRC of generated RTP packets from Osmux frames. More...
 
void osmux_xfrm_output_set_rtp_pl_type (struct osmux_out_handle *h, uint32_t rtp_payload_type)
 Set Payload Type of generated RTP packets from Osmux frames. More...
 
void osmux_xfrm_output_set_tx_cb (struct osmux_out_handle *h, void(*tx_cb)(struct msgb *msg, void *data), void *data)
 Set transmission callback to call when a generated RTP packet is to be transmitted. More...
 
void osmux_xfrm_output_set_rtp_msgb_alloc_cb (struct osmux_out_handle *h, rtp_msgb_alloc_cb_t cb, void *cb_data)
 Set callback to call when an RTP packet to be generated is to be allocated. More...
 
int osmux_xfrm_output_sched (struct osmux_out_handle *h, struct osmux_hdr *osmuxh)
 Generate RTP packets from osmux frame AMR payload set and schedule them for transmission at appropriate time. More...
 
void osmux_xfrm_output_flush (struct osmux_out_handle *h)
 Flush all scheduled RTP packets still pending to be transmitted. More...
 
struct osmux_hdrosmux_xfrm_output_pull (struct msgb *msg)
 
static uint32_t osmux_get_payload_len (struct osmux_hdr *osmuxh)
 
static int osmux_snprintf_header (char *buf, size_t size, struct osmux_hdr *osmuxh)
 
static int osmux_snprintf_payload (char *buf, size_t size, const uint8_t *payload, int payload_len)
 
static uint32_t osmux_ft_dummy_size (uint8_t amr_ft, uint8_t batch_factor)
 
static int osmux_circuit_enqueue (struct osmux_link *link, struct osmux_circuit *circuit, struct msgb *msg)
 
static void osmux_circuit_dequeue (struct osmux_circuit *circuit, struct msgb *msg)
 
static void osmux_circuit_del_msgs (struct osmux_link *link, struct osmux_circuit *circuit)
 
static int osmux_link_put (struct osmux_link *link, struct osmux_input_state *state)
 
static void osmux_encode_dummy (struct osmux_link *link, struct osmux_input_state *state)
 
static struct msgb * osmux_build_batch (struct osmux_link *link)
 
static void osmux_link_timer_expired (void *data)
 
static int osmux_rtp_amr_payload_len (struct amr_hdr *amrh, uint32_t amr_len)
 
static int osmux_circuit_get_last_stored_amr_ft (struct osmux_circuit *circuit)
 
static struct osmux_circuitosmux_link_find_circuit (struct osmux_link *link, int ccid)
 
static void osmux_link_del_circuit (struct osmux_link *link, struct osmux_circuit *circuit)
 
static int osmux_link_add (struct osmux_link *link, const struct osmux_in_req *req)
 
static int osmux_replay_lost_packets (struct osmux_link *link, const struct osmux_in_req *req)
 
static int osmux_link_handle_rtp_req (struct osmux_link *link, struct osmux_in_req *req)
 
static int osmux_xfrm_input_talloc_destructor (struct osmux_in_handle *h)
 
static struct msgb * osmux_rebuild_rtp (struct osmux_out_handle *h, struct osmux_hdr *osmuxh, void *payload, int payload_len, bool first_pkt)
 
static void osmux_xfrm_output_trigger (void *data)
 
static int osmux_xfrm_output_talloc_destructor (struct osmux_out_handle *h)
 
static void _osmux_xfrm_output_init (struct osmux_out_handle *h, uint32_t rtp_ssrc, uint8_t rtp_payload_type)
 

Variables

struct osmux_in_handle __attribute__
 
static void * osmux_ctx
 
static unsigned int next_default_name_idx = 0
 Allocate a new osmux in handle (osmux source, tx side) More...
 

Detailed Description

This code implements a variety of utility functions related to the OSMUX user-plane multiplexing protocol, an efficient alternative to plain UDP/RTP streams for voice transport in back-haul of cellular networks.

For information about the OSMUX protocol design, please see the OSMUX reference manual at http://ftp.osmocom.org/docs/latest/osmux-reference.pdf

Macro Definition Documentation

◆ LOGMUXCID

#define LOGMUXCID (   link,
  circuit,
  lvl,
  fmt,
  args ... 
)
Value:
LOGMUXLK_(link, lvl, "[CID=%" PRIu8 ",batched=%u/%u] " fmt, \
(circuit)->ccid, (circuit)->nmsgs, (link)->h->batch_factor, ## args)

◆ LOGMUXLK_

#define LOGMUXLK_ (   link,
  lvl,
  fmt,
  args ... 
)
Value:
LOGP(DLMUX, lvl, "[%s,%u/%" PRIu16 "]" fmt, \
(link)->name, (link)->h->batch_size - (link)->remaining_bytes, \
(link)->h->batch_size, \
## args)

◆ SNPRINTF_BUFFER_SIZE

#define SNPRINTF_BUFFER_SIZE (   ret,
  remain,
  offset 
)
Value:
if (ret < 0) \
ret = 0; \
offset += ret; \
if (ret > remain) \
ret = remain; \
remain -= ret;

Function Documentation

◆ osmux_snprintf()

int osmux_snprintf ( char *  buf,
size_t  size,
struct msgb *  msg 
)

Print osmux header fields and payload from msg into buffer buf.

Parameters
[out]bufbuffer to store the output into
[in]lenlength of buf in bytes
[in]msgbmessage buffer containing one or more osmux frames
Returns
the number of characters printed (excluding the null byte used to end output to strings).

If the output was truncated due to this limit, then the return value is the number of characters (excluding the terminating null byte) which would have been written to the final string if enough space had been available.

◆ osmux_xfrm_input()

int osmux_xfrm_input ( struct osmux_in_handle h,
struct msgb *  msg,
int  ccid 
)

osmux_xfrm_input - add RTP message to OSmux batch

Parameters
msgRTP message that you want to batch into one OSmux message

If 0 is returned, this indicates that the message has been batched and the msgb is now owned by the osmux layer. If negative value is returned, an error occurred and the message has been dropped (and freed). If 1 is returned, you have to invoke osmux_xfrm_input_deliver and try again.

The function takes care of releasing the messages in case of error and when building the batch.

◆ osmux_xfrm_output_alloc()

struct osmux_out_handle * osmux_xfrm_output_alloc ( void *  ctx)

Allocate a new osmux out handle.

Parameters
[in]ctxtalloc context to use when allocating the returned struct
Returns
Allocated osmux out handle

This object contains configuration and state to handle a specific CID in incoming network Osmux messages, repackaging the frames for that CID as RTP packets and pushing them up the protocol stack. Returned pointer can be freed with regular talloc_free, queue will be flushed and all internal data will be freed.

◆ osmux_xfrm_output_flush()

void osmux_xfrm_output_flush ( struct osmux_out_handle h)

Flush all scheduled RTP packets still pending to be transmitted.

Parameters
[in]hthe osmux out handle to flush

This function will immediately call the transmit callback for all queued RTP packets, making sure the list ends up empty. It will also stop all internal timers to make sure the osmux_out_handle can be dropped or re-used by calling osmux_xfrm_output on it.

◆ osmux_xfrm_output_sched()

int osmux_xfrm_output_sched ( struct osmux_out_handle h,
struct osmux_hdr osmuxh 
)

Generate RTP packets from osmux frame AMR payload set and schedule them for transmission at appropriate time.

Parameters
[in]hthe osmux out handle handling a specific CID
[in]osmuxhBuffer pointing to osmux frame header structure and AMR payload
Returns
Number of generated RTP packets

The osmux frame passed to this function must be of the type OSMUX_FT_VOICE_AMR. The generated RTP packets are kept into h's internal list and sent to the callback configured through osmux_xfrm_output_set_tx_cb when are ready to be transmitted according to schedule.

◆ osmux_xfrm_output_set_rtp_msgb_alloc_cb()

void osmux_xfrm_output_set_rtp_msgb_alloc_cb ( struct osmux_out_handle h,
rtp_msgb_alloc_cb_t  cb,
void *  cb_data 
)

Set callback to call when an RTP packet to be generated is to be allocated.

Parameters
[in]hthe osmux out handle handling a specific CID
[in]cbUser defined msgb alloc function for generated RTP pkts
[in]cb_dataOpaque data pointer set by user and passed in cb
Returns
msgb structure to be used to fill in generated RTP pkt content

◆ osmux_xfrm_output_set_rtp_pl_type()

void osmux_xfrm_output_set_rtp_pl_type ( struct osmux_out_handle h,
uint32_t  rtp_payload_type 
)

Set Payload Type of generated RTP packets from Osmux frames.

Parameters
[in]hthe osmux out handle handling a specific CID
[in]rtp_payload_typethe RTP Payload Type to set

◆ osmux_xfrm_output_set_rtp_ssrc()

void osmux_xfrm_output_set_rtp_ssrc ( struct osmux_out_handle h,
uint32_t  rtp_ssrc 
)

Set SSRC of generated RTP packets from Osmux frames.

Parameters
[in]hthe osmux out handle handling a specific CID
[in]rtp_ssrcthe RTP SSRC to set

◆ osmux_xfrm_output_set_tx_cb()

void osmux_xfrm_output_set_tx_cb ( struct osmux_out_handle h,
void(*)(struct msgb *msg, void *data)  tx_cb,
void *  data 
)

Set transmission callback to call when a generated RTP packet is to be transmitted.

Parameters
[in]hthe osmux out handle handling a specific CID
[in]osmuxhBuffer pointing to osmux frame header structure and AMR payload
Returns
Number of generated RTP packets

This Function sets the callback called by the interal timer set by osmux_xfrm_out_sched function.

Variable Documentation

◆ next_default_name_idx

unsigned int next_default_name_idx = 0
static

Allocate a new osmux in handle (osmux source, tx side)

Parameters
[in]ctxtalloc context to use when allocating the returned struct
Returns
Allocated osmux in handle

This object contains configuration and state to handle a group of circuits (trunk), receiving RTP packets from the upper layer (API user) and sending batched & trunked Osmux messages containing all the data of those circuits down the stack outgoing network Osmux messages. Returned pointer can be freed with regular talloc_free, all pending messages in queue and all internal data will be freed.

html/jibuf_8c.js0000644000175000017500000000142114642372355013042 0ustar buildbuildvar jibuf_8c = [ [ "osmo_jibuf_alloc", "group__jibuf.html#ga20592f230f9d1233752fd318996f2c9d", null ], [ "osmo_jibuf_delete", "group__jibuf.html#gacdac7beaf3d97543718ddfa33123fb7e", null ], [ "osmo_jibuf_empty", "group__jibuf.html#gae73a3b805b83f453339adeee9cdfaba4", null ], [ "osmo_jibuf_enable_skew_compensation", "group__jibuf.html#ga096e87b2dbdade72c35d51a51fe57839", null ], [ "osmo_jibuf_enqueue", "group__jibuf.html#ga522165ddc51578436ae2d26691fa7ec0", null ], [ "osmo_jibuf_set_dequeue_cb", "group__jibuf.html#ga3a8213fe8bed42d649fcb1c8d13e23d8", null ], [ "osmo_jibuf_set_max_delay", "group__jibuf.html#ga5e84571c3348525b6ad647a22cd2581d", null ], [ "osmo_jibuf_set_min_delay", "group__jibuf.html#gabcd63f39049bc4d6b3541a674b78963d", null ] ];html/osmux__input_8c.html0000644000175000017500000005430714642372355015037 0ustar buildbuild libosmo-netif: src/osmux_input.c File Reference
libosmo-netif 1.4.0
Osmocom network interface library
osmux_input.c File Reference

Osmocom multiplex protocol helpers (input) More...

#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include <osmocom/core/msgb.h>
#include <osmocom/core/timer.h>
#include <osmocom/core/timer_compat.h>
#include <osmocom/core/select.h>
#include <osmocom/core/talloc.h>
#include <osmocom/core/logging.h>
#include <osmocom/netif/amr.h>
#include <osmocom/netif/rtp.h>
#include <osmocom/netif/osmux.h>
#include <arpa/inet.h>

Data Structures

struct  osmux_link
 
struct  osmux_circuit
 
struct  osmux_in_req
 
struct  osmux_input_state
 

Macros

#define DELTA_RTP_MSG   20000
 
#define DELTA_RTP_TIMESTAMP   160
 
#define LOGMUXLK_(link, lvl, fmt, args ...)
 
#define LOGMUXLK(link, lvl, fmt, args ...)    LOGMUXLK_(link, lvl, " " fmt, ## args)
 
#define LOGMUXCID(link, circuit, lvl, fmt, args ...)
 

Functions

static uint32_t osmux_ft_dummy_size (uint8_t amr_ft, uint8_t batch_factor)
 
static int osmux_circuit_enqueue (struct osmux_link *link, struct osmux_circuit *circuit, struct msgb *msg)
 
static void osmux_circuit_dequeue (struct osmux_circuit *circuit, struct msgb *msg)
 
static void osmux_circuit_del_msgs (struct osmux_link *link, struct osmux_circuit *circuit)
 
static int osmux_link_put (struct osmux_link *link, struct osmux_input_state *state)
 
static void osmux_encode_dummy (struct osmux_link *link, struct osmux_input_state *state)
 
static struct msgb * osmux_build_batch (struct osmux_link *link)
 
void osmux_xfrm_input_deliver (struct osmux_in_handle *h)
 
static void osmux_link_timer_expired (void *data)
 
static int osmux_rtp_amr_payload_len (struct amr_hdr *amrh, uint32_t amr_len)
 
static int osmux_circuit_get_last_stored_amr_ft (struct osmux_circuit *circuit)
 
static struct osmux_circuitosmux_link_find_circuit (struct osmux_link *link, int ccid)
 
static void osmux_link_del_circuit (struct osmux_link *link, struct osmux_circuit *circuit)
 
static int osmux_link_add (struct osmux_link *link, const struct osmux_in_req *req)
 
static int osmux_replay_lost_packets (struct osmux_link *link, const struct osmux_in_req *req)
 
static int osmux_link_handle_rtp_req (struct osmux_link *link, struct osmux_in_req *req)
 
int osmux_xfrm_input (struct osmux_in_handle *h, struct msgb *msg, int ccid)
 
static int osmux_xfrm_input_talloc_destructor (struct osmux_in_handle *h)
 
struct osmux_in_handleosmux_xfrm_input_alloc (void *ctx)
 
void osmux_xfrm_input_init (struct osmux_in_handle *h) OSMO_DEPRECATED("Use osmux_xfrm_input_alloc() instead")
 
int osmux_xfrm_input_set_batch_factor (struct osmux_in_handle *h, uint8_t batch_factor)
 
void osmux_xfrm_input_set_batch_size (struct osmux_in_handle *h, uint16_t batch_size)
 
void osmux_xfrm_input_set_initial_seqnum (struct osmux_in_handle *h, uint8_t osmux_seqnum)
 
void osmux_xfrm_input_set_deliver_cb (struct osmux_in_handle *h, void(*deliver_cb)(struct msgb *msg, void *data), void *data)
 
void * osmux_xfrm_input_get_deliver_cb_data (struct osmux_in_handle *h)
 
void osmux_xfrm_input_set_name (struct osmux_in_handle *h, const char *name)
 
int osmux_xfrm_input_open_circuit (struct osmux_in_handle *h, int ccid, int dummy)
 
void osmux_xfrm_input_close_circuit (struct osmux_in_handle *h, int ccid)
 
void osmux_xfrm_input_fini (struct osmux_in_handle *h) OSMO_DEPRECATED("Use talloc_free() instead")
 

Variables

static void * osmux_ctx
 
static unsigned int next_default_name_idx = 0
 Allocate a new osmux in handle (osmux source, tx side) More...
 

Detailed Description

Osmocom multiplex protocol helpers (input)

html/globals_func.html0000644000175000017500000002406514642372355014350 0ustar buildbuild libosmo-netif: Globals
libosmo-netif 1.4.0
Osmocom network interface library
 

- o -

html/structosmo__stream__srv__link.html0000644000175000017500000002272714642372355020056 0ustar buildbuild libosmo-netif: osmo_stream_srv_link Struct Reference
libosmo-netif 1.4.0
Osmocom network interface library
osmo_stream_srv_link Struct Reference

Data Fields

struct osmo_fd ofd
 
char * name
 
char sockname [OSMO_SOCK_NAME_MAXLEN]
 
char * addr [OSMO_STREAM_MAX_ADDRS]
 
uint8_t addrcnt
 
uint16_t port
 
int sk_domain
 
int sk_type
 
uint16_t proto
 
int(* accept_cb )(struct osmo_stream_srv_link *srv, int fd)
 
void * data
 
int flags
 
struct osmo_sock_init2_multiaddr_pars ma_pars
 

The documentation for this struct was generated from the following file:
html/datagram_8h_source.html0000644000175000017500000010021314642372355015437 0ustar buildbuild libosmo-netif: include/osmocom/netif/datagram.h Source File
libosmo-netif 1.4.0
Osmocom network interface library
datagram.h
1#ifndef _OSMO_DGRAM_H_
2#define _OSMO_DGRAM_H_
3
4struct osmo_dgram_tx;
5
6struct osmo_dgram_tx *osmo_dgram_tx_create(void *ctx);
7void osmo_dgram_tx_destroy(struct osmo_dgram_tx *conn);
8
9void osmo_dgram_tx_set_addr(struct osmo_dgram_tx *conn, const char *addr);
10void osmo_dgram_tx_set_port(struct osmo_dgram_tx *conn, uint16_t port);
11void osmo_dgram_tx_set_local_addr(struct osmo_dgram_tx *conn, const char *addr);
12void osmo_dgram_tx_set_local_port(struct osmo_dgram_tx *conn, uint16_t port);
13void osmo_dgram_tx_set_data(struct osmo_dgram_tx *conn, void *data);
14
15int osmo_dgram_tx_open(struct osmo_dgram_tx *conn);
16void osmo_dgram_tx_close(struct osmo_dgram_tx *conn);
17
18void osmo_dgram_tx_send(struct osmo_dgram_tx *conn, struct msgb *msg);
19
20struct osmo_dgram_rx;
21
22struct osmo_dgram_rx *osmo_dgram_rx_create(void *ctx);
23
24void osmo_dgram_rx_set_addr(struct osmo_dgram_rx *conn, const char *addr);
25void osmo_dgram_rx_set_port(struct osmo_dgram_rx *conn, uint16_t port);
26void osmo_dgram_rx_set_read_cb(struct osmo_dgram_rx *conn, int (*read_cb)(struct osmo_dgram_rx *conn));
27void osmo_dgram_rx_destroy(struct osmo_dgram_rx *conn);
28
29int osmo_dgram_rx_open(struct osmo_dgram_rx *conn);
30void osmo_dgram_rx_close(struct osmo_dgram_rx *conn);
31
32int osmo_dgram_rx_recv(struct osmo_dgram_rx *conn, struct msgb *msg);
33
34struct osmo_dgram;
35
36struct osmo_dgram *osmo_dgram_create(void *ctx);
37void osmo_dgram_destroy(struct osmo_dgram *conn);
38
39int osmo_dgram_open(struct osmo_dgram *conn);
40void osmo_dgram_close(struct osmo_dgram *conn);
41
42void osmo_dgram_set_local_addr(struct osmo_dgram *conn, const char *addr);
43void osmo_dgram_set_remote_addr(struct osmo_dgram *conn, const char *addr);
44void osmo_dgram_set_local_port(struct osmo_dgram *conn, uint16_t port);
45void osmo_dgram_set_remote_port(struct osmo_dgram *conn, uint16_t port);
46void osmo_dgram_set_read_cb(struct osmo_dgram *conn, int (*read_cb)(struct osmo_dgram *conn));
47void osmo_dgram_set_data(struct osmo_dgram *conn, void *data);
48void *osmo_dgram_get_data(struct osmo_dgram *conn);
49
50void osmo_dgram_send(struct osmo_dgram *conn, struct msgb *msg);
51int osmo_dgram_recv(struct osmo_dgram *conn, struct msgb *msg);
52
53#endif
void osmo_dgram_rx_close(struct osmo_dgram_rx *conn)
Close the datagram receiver and unregister from select loop Does not destroy the datagram receiver,...
Definition: datagram.c:381
void osmo_dgram_destroy(struct osmo_dgram *conn)
Destroy a Osmocom datagram transceiver.
Definition: datagram.c:445
void osmo_dgram_tx_set_data(struct osmo_dgram_tx *conn, void *data)
Set application private data of the datagram transmitter.
Definition: datagram.c:191
void osmo_dgram_tx_close(struct osmo_dgram_tx *conn)
Close an Osmocom Datagram Transmitter.
Definition: datagram.c:80
int osmo_dgram_rx_recv(struct osmo_dgram_rx *conn, struct msgb *msg)
Receive data via Osmocom datagram receiver.
Definition: datagram.c:261
void osmo_dgram_set_remote_port(struct osmo_dgram *conn, uint16_t port)
Set the remote port to which we transmit.
Definition: datagram.c:482
void * osmo_dgram_get_data(struct osmo_dgram *conn)
Get application private data of the datagram transceiver.
Definition: datagram.c:507
void osmo_dgram_close(struct osmo_dgram *conn)
Close an Osmocom Datagram Transceiver.
Definition: datagram.c:535
void osmo_dgram_tx_set_port(struct osmo_dgram_tx *conn, uint16_t port)
Set the remote port to which we transmit.
Definition: datagram.c:160
struct osmo_dgram * osmo_dgram_create(void *ctx)
Create an Osmocom datagram transceiver (bidirectional)
Definition: datagram.c:419
void osmo_dgram_rx_set_read_cb(struct osmo_dgram_rx *conn, int(*read_cb)(struct osmo_dgram_rx *conn))
Set the read() call-back of the datagram receiver.
Definition: datagram.c:336
void osmo_dgram_set_remote_addr(struct osmo_dgram *conn, const char *addr)
Set the remote address to which we transmit/connect.
Definition: datagram.c:464
void osmo_dgram_send(struct osmo_dgram *conn, struct msgb *msg)
Enqueue data to be sent via an Osmocom datagram transceiver.
Definition: datagram.c:544
void osmo_dgram_set_read_cb(struct osmo_dgram *conn, int(*read_cb)(struct osmo_dgram *conn))
Set the read() call-back of the datagram receiver.
Definition: datagram.c:490
void osmo_dgram_tx_set_local_addr(struct osmo_dgram_tx *conn, const char *addr)
Set the local address from which we transmit.
Definition: datagram.c:171
void osmo_dgram_rx_destroy(struct osmo_dgram_rx *conn)
Destroy the datagram receiver. Releases Memory.
Definition: datagram.c:344
int osmo_dgram_tx_open(struct osmo_dgram_tx *conn)
Open connection of an Osmocom datagram transmitter.
Definition: datagram.c:207
void osmo_dgram_set_local_port(struct osmo_dgram *conn, uint16_t port)
Set the local port to which we bind.
Definition: datagram.c:473
void osmo_dgram_tx_set_addr(struct osmo_dgram_tx *conn, const char *addr)
Set the remote address to which we transmit.
Definition: datagram.c:149
void osmo_dgram_set_data(struct osmo_dgram *conn, void *data)
Set application private data of the datagram transmitter.
Definition: datagram.c:499
void osmo_dgram_tx_destroy(struct osmo_dgram_tx *conn)
Destroy a Osmocom datagram transmitter.
Definition: datagram.c:198
int osmo_dgram_recv(struct osmo_dgram *conn, struct msgb *msg)
Receive data via Osmocom datagram transceiver.
Definition: datagram.c:553
int osmo_dgram_open(struct osmo_dgram *conn)
Open the datagram transceiver. This actually initializes the underlying sockets and binds/connects th...
Definition: datagram.c:515
void osmo_dgram_rx_set_addr(struct osmo_dgram_rx *conn, const char *addr)
Set the local address to which we bind.
Definition: datagram.c:316
void osmo_dgram_tx_send(struct osmo_dgram_tx *conn, struct msgb *msg)
Enqueue data to be sent via an Osmocom datagram transmitter.
Definition: datagram.c:235
struct osmo_dgram_rx * osmo_dgram_rx_create(void *ctx)
Create an Osmocom datagram receiver.
Definition: datagram.c:300
struct osmo_dgram_tx * osmo_dgram_tx_create(void *ctx)
Create an Osmocom datagram transmitter.
Definition: datagram.c:130
void osmo_dgram_tx_set_local_port(struct osmo_dgram_tx *conn, uint16_t port)
Set the local port from which we transmit.
Definition: datagram.c:181
void osmo_dgram_set_local_addr(struct osmo_dgram *conn, const char *addr)
Set the local address to which we bind.
Definition: datagram.c:455
int osmo_dgram_rx_open(struct osmo_dgram_rx *conn)
Open the datagram receiver. This actually initializes the underlying socket and binds it to the confi...
Definition: datagram.c:353
void osmo_dgram_rx_set_port(struct osmo_dgram_rx *conn, uint16_t port)
Set the local port to which we bind.
Definition: datagram.c:326
Definition: datagram.c:248
Definition: datagram.c:64
Definition: datagram.c:394
html/resize.js0000644000175000017500000001261614642372355012662 0ustar buildbuild/* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ function initResizable() { var cookie_namespace = 'doxygen'; var sidenav,navtree,content,header,collapsed,collapsedWidth=0,barWidth=6,desktop_vp=768,titleHeight; function readCookie(cookie) { var myCookie = cookie_namespace+"_"+cookie+"="; if (document.cookie) { var index = document.cookie.indexOf(myCookie); if (index != -1) { var valStart = index + myCookie.length; var valEnd = document.cookie.indexOf(";", valStart); if (valEnd == -1) { valEnd = document.cookie.length; } var val = document.cookie.substring(valStart, valEnd); return val; } } return 0; } function writeCookie(cookie, val, expiration) { if (val==undefined) return; if (expiration == null) { var date = new Date(); date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week expiration = date.toGMTString(); } document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; SameSite=Lax; expires=" + expiration+"; path=/"; } function resizeWidth() { var windowWidth = $(window).width() + "px"; var sidenavWidth = $(sidenav).outerWidth(); content.css({marginLeft:parseInt(sidenavWidth)+"px"}); writeCookie('width',sidenavWidth-barWidth, null); } function restoreWidth(navWidth) { var windowWidth = $(window).width() + "px"; content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); sidenav.css({width:navWidth + "px"}); } function resizeHeight() { var headerHeight = header.outerHeight(); var footerHeight = footer.outerHeight(); var windowHeight = $(window).height(); var contentHeight,navtreeHeight,sideNavHeight; if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ contentHeight = windowHeight - headerHeight - footerHeight; navtreeHeight = contentHeight; sideNavHeight = contentHeight; } else if (page_layout==1) { /* DISABLE_INDEX=YES */ contentHeight = windowHeight - footerHeight; navtreeHeight = windowHeight - headerHeight; sideNavHeight = windowHeight; } content.css({height:contentHeight + "px"}); navtree.css({height:navtreeHeight + "px"}); sidenav.css({height:sideNavHeight + "px"}); var width=$(window).width(); if (width!=collapsedWidth) { if (width=desktop_vp) { if (!collapsed) { collapseExpand(); } } else if (width>desktop_vp && collapsedWidth0) { restoreWidth(0); collapsed=true; } else { var width = readCookie('width'); if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); } collapsed=false; } } header = $("#top"); sidenav = $("#side-nav"); content = $("#doc-content"); navtree = $("#nav-tree"); footer = $("#nav-path"); $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); $(sidenav).resizable({ minWidth: 0 }); $(window).resize(function() { resizeHeight(); }); var device = navigator.userAgent.toLowerCase(); var touch_device = device.match(/(iphone|ipod|ipad|android)/); if (touch_device) { /* wider split bar for touch only devices */ $(sidenav).css({ paddingRight:'20px' }); $('.ui-resizable-e').css({ width:'20px' }); $('#nav-sync').css({ right:'34px' }); barWidth=20; } var width = readCookie('width'); if (width) { restoreWidth(width); } else { resizeWidth(); } resizeHeight(); var url = location.href; var i=url.indexOf("#"); if (i>=0) window.location.hash=url.substr(i); var _preventDefault = function(evt) { evt.preventDefault(); }; $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); $(".ui-resizable-handle").dblclick(collapseExpand); $(window).on('load',resizeHeight); } /* @license-end */ html/structsap__ctl__hello__param.html0000644000175000017500000001201014642372355017567 0ustar buildbuild libosmo-netif: sap_ctl_hello_param Struct Reference
libosmo-netif 1.4.0
Osmocom network interface library
sap_ctl_hello_param Struct Reference

Data Fields

uint32_t sapi
 
uint16_t api_version
 

The documentation for this struct was generated from the following file:
  • src/prim.c
html/dir_68267d1309a1af8e8297ef4c3efbcdba.js0000644000175000017500000000100014642372355017011 0ustar buildbuildvar dir_68267d1309a1af8e8297ef4c3efbcdba = [ [ "datagram.c", "datagram_8c.html", "datagram_8c" ], [ "jibuf.c", "jibuf_8c.html", "jibuf_8c" ], [ "osmux.c", "osmux_8c.html", "osmux_8c" ], [ "osmux_input.c", "osmux__input_8c.html", "osmux__input_8c" ], [ "osmux_output.c", "osmux__output_8c.html", "osmux__output_8c" ], [ "stream.c", "stream_8c.html", null ], [ "stream_cli.c", "stream__cli_8c.html", "stream__cli_8c" ], [ "stream_srv.c", "stream__srv_8c.html", "stream__srv_8c" ] ];html/jibuf_8c.html0000644000175000017500000005421614642372355013404 0ustar buildbuild libosmo-netif: src/jibuf.c File Reference
libosmo-netif 1.4.0
Osmocom network interface library

Osmocom Jitter Buffer helpers. More...

#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include <osmocom/core/msgb.h>
#include <osmocom/core/timer.h>
#include <osmocom/core/talloc.h>
#include <osmocom/core/logging.h>
#include <osmocom/core/utils.h>
#include <osmocom/netif/amr.h>
#include <osmocom/netif/rtp.h>
#include <osmocom/netif/jibuf.h>
#include <arpa/inet.h>

Data Structures

struct  osmo_jibuf_msgb_cb
 

Macros

#define SAMPLES_PER_PKT   160
 
#define SAMPLE_RATE   8000
 
#define JIBUF_DEFAULT_MIN_DELAY_MS   60
 
#define JIBUF_DEFAULT_MAX_DELAY_MS   200
 
#define JIBUF_REFERENCE_TS_FREQ   60
 
#define JIBUF_BUFFER_RECALC_FREQ   40
 
#define JIBUF_ALLOWED_PKT_DROP   3
 
#define JIBUF_ALLOWED_PKT_CONSECUTIVE_DROP   1
 
#define JIBUF_BUFFER_INC_STEP   20
 
#define JIBUF_BUFFER_DEC_STEP   5
 
#define JIBUF_SKEW_WEIGHT   ((double)1/32)
 
#define JIBUF_MSGB_CB(__msgb)   ((struct osmo_jibuf_msgb_cb *)&((__msgb)->cb[0]))
 

Functions

static void ms2timeval (struct timeval *ts, uint32_t ms)
 
static uint32_t timeval2ms (const struct timeval *ts)
 
static int clock_gettime_timeval (clockid_t clk_id, struct timeval *tp)
 
static struct timeval * msgb_scheduled_ts (const struct msgb *msg)
 
static void llist_add_sorted (struct msgb *msg, struct llist_head *msg_list)
 
static void enqueue_pkt (struct osmo_jibuf *jb, struct msgb *msg, bool is_syncpoint)
 
static bool msg_get_marker (struct msgb *msg)
 
static uint16_t msg_get_sequence (struct msgb *msg)
 
static uint32_t msg_get_timestamp (struct msgb *msg)
 
static int32_t samples2ms (int32_t samples)
 
static int calc_pkt_rel_delay (struct osmo_jibuf *jb, struct msgb *msg)
 
static bool msg_is_in_sequence (struct osmo_jibuf *jb, struct msgb *msg)
 
static bool msg_is_syncpoint (struct osmo_jibuf *jb, struct msgb *msg)
 
static void msg_set_as_reference (struct osmo_jibuf *jb, struct msgb *msg)
 
static void dequeue_msg (struct osmo_jibuf *jb, struct msgb *msg)
 
static void timer_expired (void *data)
 
static void recalc_clock_skew (struct osmo_jibuf *jb, int32_t rel_delay)
 
static void recalc_threshold_delay (struct osmo_jibuf *jb)
 
struct osmo_jibufosmo_jibuf_alloc (void *talloc_ctx)
 Allocate a new jitter buffer instance. More...
 
void osmo_jibuf_delete (struct osmo_jibuf *jb)
 Destroy a previously allocated jitter buffer instance. More...
 
int osmo_jibuf_enqueue (struct osmo_jibuf *jb, struct msgb *msg)
 Try to enqueue a packet into the jitter buffer. More...
 
bool osmo_jibuf_empty (struct osmo_jibuf *jb)
 Check whether the jitter buffer instance has packets queued or not. More...
 
void osmo_jibuf_set_min_delay (struct osmo_jibuf *jb, uint32_t min_delay)
 Set minimum buffer size for the jitter buffer. More...
 
void osmo_jibuf_set_max_delay (struct osmo_jibuf *jb, uint32_t max_delay)
 Set maximum buffer size for the jitter buffer. More...
 
void osmo_jibuf_enable_skew_compensation (struct osmo_jibuf *jb, bool enable)
 Toggle use of skew detection and compensation mechanism. More...
 
void osmo_jibuf_set_dequeue_cb (struct osmo_jibuf *jb, osmo_jibuf_dequeue_cb dequeue_cb, void *cb_data)
 Set dequeue callback for the jitter buffer. More...
 

Detailed Description

Osmocom Jitter Buffer helpers.

html/functions_vars.html0000644000175000017500000000767014642372355014760 0ustar buildbuild libosmo-netif: Data Fields - Variables
libosmo-netif 1.4.0
Osmocom network interface library
 
html/menu.js0000644000175000017500000001335214642372355012323 0ustar buildbuild/* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { function makeTree(data,relPath) { var result=''; if ('children' in data) { result+=''; } return result; } var searchBox; if (searchEnabled) { if (serverSide) { searchBox='
'+ '
'+ '
'+ ''+ '
'+ '
'+ '
'+ '
'; } else { searchBox='
'+ ''+ ''+ ''+ ''+ ''+ '' '' '
'; } } $('#main-nav').before('
'+ ''+ ''+ '
'); $('#main-nav').append(makeTree(menudata,relPath)); $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); if (searchBox) { $('#main-menu').append('
  • '); } var $mainMenuState = $('#main-menu-state'); var prevWidth = 0; if ($mainMenuState.length) { function initResizableIfExists() { if (typeof initResizable==='function') initResizable(); } // animate mobile menu $mainMenuState.change(function(e) { var $menu = $('#main-menu'); var options = { duration: 250, step: initResizableIfExists }; if (this.checked) { options['complete'] = function() { $menu.css('display', 'block') }; $menu.hide().slideDown(options); } else { options['complete'] = function() { $menu.css('display', 'none') }; $menu.show().slideUp(options); } }); // set default menu visibility function resetState() { var $menu = $('#main-menu'); var $mainMenuState = $('#main-menu-state'); var newWidth = $(window).outerWidth(); if (newWidth!=prevWidth) { if ($(window).outerWidth()<768) { $mainMenuState.prop('checked',false); $menu.hide(); $('#searchBoxPos1').html(searchBox); $('#searchBoxPos2').hide(); } else { $menu.show(); $('#searchBoxPos1').empty(); $('#searchBoxPos2').html(searchBox); $('#searchBoxPos2').show(); } prevWidth = newWidth; } } $(window).ready(function() { resetState(); initResizableIfExists(); }); $(window).resize(resetState); } $('#main-menu').smartmenus(); } /* @license-end */ html/structbaudrate2termbits.html0000644000175000017500000001174714642372355016605 0ustar buildbuild libosmo-netif: baudrate2termbits Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    baudrate2termbits Struct Reference

    Data Fields

    int rate
     
    int def
     

    The documentation for this struct was generated from the following file:
    • src/rs232.c
    html/tab_b.png0000644000175000017500000000025114642372355012570 0ustar buildbuild‰PNG  IHDR$ÇÇ[pIDATxíÝMƒ EáÇ»ÐÔ¸¸u`âÀ´V0РÆ}:t]DÁ²s¿ä®‚¶ýËu¥ø|’xùî½À>ÿ1»& mÄ8ÜSÙÑxÜLÀUûšÞ²ÄiE–ŠåOs„¢’nxàÒêÓKN²~jIEND®B`‚html/structosmux__circuit.html0000644000175000017500000001665014642372355016214 0ustar buildbuild libosmo-netif: osmux_circuit Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmux_circuit Struct Reference

    Data Fields

    struct llist_head head
     
    int ccid
     
    struct llist_head msg_list
     
    int nmsgs
     
    int dummy
     
    uint8_t seq
     
    int32_t last_transmitted_rtp_seq
     
    uint32_t last_transmitted_rtp_ts
     

    The documentation for this struct was generated from the following file:
    html/structosmo__prim__srv.html0000644000175000017500000001276514642372355016357 0ustar buildbuild libosmo-netif: osmo_prim_srv Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmo_prim_srv Struct Reference

    Data Fields

    void * priv
     
    struct osmo_prim_srv_linklink
     
    struct osmo_stream_srvstream
     

    The documentation for this struct was generated from the following file:
    • src/prim.c
    html/osmux_8c.html0000644000175000017500000001661714642372355013463 0ustar buildbuild libosmo-netif: src/osmux.c File Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmux.c File Reference

    Osmocom multiplex protocol helpers. More...

    #include <stdio.h>
    #include <string.h>
    #include <osmocom/core/msgb.h>
    #include <osmocom/core/timer.h>
    #include <osmocom/core/timer_compat.h>
    #include <osmocom/core/select.h>
    #include <osmocom/core/talloc.h>
    #include <osmocom/core/logging.h>
    #include <osmocom/netif/amr.h>
    #include <osmocom/netif/rtp.h>
    #include <osmocom/netif/osmux.h>
    #include <arpa/inet.h>

    Macros

    #define SNPRINTF_BUFFER_SIZE(ret, remain, offset)
     

    Functions

    static uint32_t osmux_get_payload_len (struct osmux_hdr *osmuxh)
     
    static int osmux_snprintf_header (char *buf, size_t size, struct osmux_hdr *osmuxh)
     
    static int osmux_snprintf_payload (char *buf, size_t size, const uint8_t *payload, int payload_len)
     
    int osmux_snprintf (char *buf, size_t size, struct msgb *msg)
     

    Detailed Description

    Osmocom multiplex protocol helpers.

    html/stream__cli_8c.html0000644000175000017500000011275614642372355014572 0ustar buildbuild libosmo-netif: src/stream_cli.c File Reference
    libosmo-netif 1.4.0
    Osmocom network interface library

    Osmocom stream socket helpers (client side) More...

    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <string.h>
    #include <time.h>
    #include <sys/fcntl.h>
    #include <sys/socket.h>
    #include <sys/ioctl.h>
    #include <arpa/inet.h>
    #include <netinet/in.h>
    #include <netinet/tcp.h>
    #include <osmocom/core/timer.h>
    #include <osmocom/core/select.h>
    #include <osmocom/core/utils.h>
    #include <osmocom/gsm/tlv.h>
    #include <osmocom/core/msgb.h>
    #include <osmocom/core/osmo_io.h>
    #include <osmocom/core/panic.h>
    #include <osmocom/core/logging.h>
    #include <osmocom/core/talloc.h>
    #include <osmocom/core/socket.h>
    #include <osmocom/netif/stream.h>
    #include <osmocom/netif/stream_private.h>
    #include "config.h"
    #include <osmocom/netif/sctp.h>

    Data Structures

    struct  osmo_stream_cli
     

    Macros

    #define LOGSCLI(cli, level, fmt, args...)
     
    #define OSMO_STREAM_CLI_F_RECONF   (1 << 0)
     
    #define OSMO_STREAM_CLI_F_NODELAY   (1 << 1)
     

    Enumerations

    enum  osmo_stream_cli_state {
      STREAM_CLI_STATE_CLOSED , STREAM_CLI_STATE_WAIT_RECONNECT , STREAM_CLI_STATE_CONNECTING , STREAM_CLI_STATE_CONNECTED ,
      STREAM_CLI_STATE_MAX
    }
     

    Functions

    void osmo_stream_cli_close (struct osmo_stream_cli *cli)
     Close an Osmocom Stream Client. More...
     
    void osmo_stream_cli_reconnect (struct osmo_stream_cli *cli)
     Re-connect an Osmocom Stream Client If re-connection is enabled for this client (which is the case unless negative timeout was explicitly set via osmo_stream_cli_set_reconnect_timeout() call), we close any existing connection (if any) and schedule a re-connect timer.
     
    bool osmo_stream_cli_is_connected (struct osmo_stream_cli *cli)
     Check if Osmocom Stream Client is in connected state. More...
     
    static void osmo_stream_cli_close_iofd (struct osmo_stream_cli *cli)
     
    static void osmo_stream_cli_close_ofd (struct osmo_stream_cli *cli)
     
    static int osmo_stream_cli_fd (const struct osmo_stream_cli *cli)
     
    static void osmo_stream_cli_read (struct osmo_stream_cli *cli)
     
    static int osmo_stream_cli_write (struct osmo_stream_cli *cli)
     
    static int _setsockopt_nosigpipe (struct osmo_stream_cli *cli)
     
    static void stream_cli_handle_connecting (struct osmo_stream_cli *cli, int res)
     
    static int osmo_stream_cli_fd_cb (struct osmo_fd *ofd, unsigned int what)
     
    static void cli_timer_cb (void *data)
     
    struct osmo_stream_cliosmo_stream_cli_create (void *ctx)
     Create an Osmocom stream client. More...
     
    static void stream_cli_iofd_read_cb (struct osmo_io_fd *iofd, int res, struct msgb *msg)
     
    static void stream_cli_iofd_write_cb (struct osmo_io_fd *iofd, int res, struct msgb *msg)
     
    void osmo_stream_cli_set_name (struct osmo_stream_cli *cli, const char *name)
     Set a name on the cli object (used during logging) More...
     
    void osmo_stream_cli_set_addr (struct osmo_stream_cli *cli, const char *addr)
     Set the remote address to which we connect. More...
     
    int osmo_stream_cli_set_addrs (struct osmo_stream_cli *cli, const char **addr, size_t addrcnt)
     Set the remote address set to which we connect. Useful for protocols allowing connecting to more than one address (such as SCTP) More...
     
    void osmo_stream_cli_set_port (struct osmo_stream_cli *cli, uint16_t port)
     Set the remote port number to which we connect. More...
     
    void osmo_stream_cli_set_local_port (struct osmo_stream_cli *cli, uint16_t port)
     Set the local port number for the socket (to be bound to) More...
     
    void osmo_stream_cli_set_local_addr (struct osmo_stream_cli *cli, const char *addr)
     Set the local address for the socket (to be bound to) More...
     
    int osmo_stream_cli_set_local_addrs (struct osmo_stream_cli *cli, const char **addr, size_t addrcnt)
     Set the local address set to which we connect. Useful for protocols allowing bind to more than one address (such as SCTP) More...
     
    void osmo_stream_cli_set_proto (struct osmo_stream_cli *cli, uint16_t proto)
     Set the protocol for the stream client socket. More...
     
    int osmo_stream_cli_set_type (struct osmo_stream_cli *cli, int type)
     Set the socket type for the stream server link. More...
     
    int osmo_stream_cli_set_domain (struct osmo_stream_cli *cli, int domain)
     Set the socket type for the stream server link. More...
     
    void osmo_stream_cli_set_reconnect_timeout (struct osmo_stream_cli *cli, int timeout)
     Set the reconnect time of the stream client socket. More...
     
    void osmo_stream_cli_set_data (struct osmo_stream_cli *cli, void *data)
     Set application private data of the stream client socket. More...
     
    void * osmo_stream_cli_get_data (struct osmo_stream_cli *cli)
     Get application private data of the stream client socket. More...
     
    char * osmo_stream_cli_get_sockname (const struct osmo_stream_cli *cli)
     Get the stream client socket description. More...
     
    struct osmo_fd * osmo_stream_cli_get_ofd (struct osmo_stream_cli *cli)
     Get Osmocom File Descriptor of the stream client socket. More...
     
    void osmo_stream_cli_set_connect_cb (struct osmo_stream_cli *cli, int(*connect_cb)(struct osmo_stream_cli *cli))
     Set the call-back function called on connect of the stream client socket. More...
     
    void osmo_stream_cli_set_disconnect_cb (struct osmo_stream_cli *cli, int(*disconnect_cb)(struct osmo_stream_cli *cli))
     Set the call-back function called on disconnect of the stream client socket. More...
     
    void osmo_stream_cli_set_read_cb (struct osmo_stream_cli *cli, int(*read_cb)(struct osmo_stream_cli *cli))
     Set the call-back function called to read from the stream client socket This function will configure osmo_stream_cli to use osmo_ofd internally. More...
     
    void osmo_stream_cli_set_read_cb2 (struct osmo_stream_cli *cli, int(*read_cb)(struct osmo_stream_cli *cli, struct msgb *msg))
     Set the call-back function called to read from the stream client socket This function will configure osmo_stream_cli to use osmo_iofd internally. More...
     
    void osmo_stream_cli_destroy (struct osmo_stream_cli *cli)
     Destroy a Osmocom stream client (includes close) More...
     
    int osmo_stream_cli_open2 (struct osmo_stream_cli *cli, int reconnect)
     DEPRECATED: use osmo_stream_cli_set_reconnect_timeout() or osmo_stream_cli_reconnect() instead! Open connection of an Osmocom stream client. More...
     
    void osmo_stream_cli_set_nodelay (struct osmo_stream_cli *cli, bool nodelay)
     Set the NODELAY socket option to avoid Nagle-like behavior Setting this to nodelay=true will automatically set the NODELAY socket option on any socket established via osmo_stream_cli_open or any re-connect. You have to set this before opening the socket. More...
     
    int osmo_stream_cli_open (struct osmo_stream_cli *cli)
     Open connection of an Osmocom stream client By default the client will automatically reconnect after default timeout. To disable this, use osmo_stream_cli_set_reconnect_timeout() before calling this function. More...
     
    void osmo_stream_cli_send (struct osmo_stream_cli *cli, struct msgb *msg)
     Enqueue data to be sent via an Osmocom stream client. More...
     
    int osmo_stream_cli_recv (struct osmo_stream_cli *cli, struct msgb *msg)
     Receive data via an Osmocom stream client. More...
     
    void osmo_stream_cli_clear_tx_queue (struct osmo_stream_cli *cli)
     
    int osmo_stream_cli_set_param (struct osmo_stream_cli *cli, enum osmo_stream_cli_param par, void *val, size_t val_len)
     

    Variables

    static const struct value_string stream_cli_state_names []
     
    static struct osmo_io_ops osmo_stream_cli_ioops
     

    Detailed Description

    Osmocom stream socket helpers (client side)

    html/splitbar.png0000644000175000017500000000047214642372355013346 0ustar buildbuild‰PNG  IHDRM¸¿IDATxíÝ¡JCa‡ñç(˜ ëƒ%±Ø4 b±È˜Í¶3˜v^Á±˜…ãó–ŽELƒõ…¥•³ ,ÿb;íç{Ã/¼ðÞÀaYÕ¯åóøq:¼º¹›\òIIIIIIIIIIIIIIIIII-Òçl¹›«õ抢è_t/Ï»ã£ÑíYQVõðêäíã÷´×ùY¬Úÿµ§¦ivók¾_íåýÛ£I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$ýC[Vì=ü[„fÆIEND®B`‚html/group__jibuf.js0000644000175000017500000000174714642372355014036 0ustar buildbuildvar group__jibuf = [ [ "jibuf.h", "jibuf_8h.html", null ], [ "jibuf.c", "jibuf_8c.html", null ], [ "osmo_jibuf", "structosmo__jibuf.html", null ], [ "osmo_jibuf_msgb_cb", "structosmo__jibuf__msgb__cb.html", null ], [ "osmo_jibuf_alloc", "group__jibuf.html#ga20592f230f9d1233752fd318996f2c9d", null ], [ "osmo_jibuf_delete", "group__jibuf.html#gacdac7beaf3d97543718ddfa33123fb7e", null ], [ "osmo_jibuf_empty", "group__jibuf.html#gae73a3b805b83f453339adeee9cdfaba4", null ], [ "osmo_jibuf_enable_skew_compensation", "group__jibuf.html#ga096e87b2dbdade72c35d51a51fe57839", null ], [ "osmo_jibuf_enqueue", "group__jibuf.html#ga522165ddc51578436ae2d26691fa7ec0", null ], [ "osmo_jibuf_set_dequeue_cb", "group__jibuf.html#ga3a8213fe8bed42d649fcb1c8d13e23d8", null ], [ "osmo_jibuf_set_max_delay", "group__jibuf.html#ga5e84571c3348525b6ad647a22cd2581d", null ], [ "osmo_jibuf_set_min_delay", "group__jibuf.html#gabcd63f39049bc4d6b3541a674b78963d", null ] ];html/structosmo__prim__srv__link.html0000644000175000017500000001747014642372355017531 0ustar buildbuild libosmo-netif: osmo_prim_srv_link Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmo_prim_srv_link Struct Reference

    Data Fields

    void * priv
     
    char * addr
     
    int log_cat
     
    struct osmo_stream_srv_linkstream
     
    osmo_prim_srv_conn_cb opened_conn_cb
     
    osmo_prim_srv_conn_cb closed_conn_cb
     
    osmo_prim_srv_rx_sapi_version rx_sapi_version_cb
     
    osmo_prim_srv_rx_cb rx_cb
     
    size_t rx_msgb_alloc_len
     

    The documentation for this struct was generated from the following file:
    • src/prim.c
    html/structosmo__jibuf__msgb__cb.html0000644000175000017500000001221514642372355017416 0ustar buildbuild libosmo-netif: osmo_jibuf_msgb_cb Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmo_jibuf_msgb_cb Struct Reference

    Data Fields

    struct timeval ts
     
    unsigned long * old_cb
     

    The documentation for this struct was generated from the following file:
    html/amr_8h_source.html0000644000175000017500000010440714642372355014447 0ustar buildbuild libosmo-netif: include/osmocom/netif/amr.h Source File
    libosmo-netif 1.4.0
    Osmocom network interface library
    amr.h
    1#ifndef _OSMO_AMR_H_
    2#define _OSMO_AMR_H_
    3
    4#include <stddef.h>
    5#include <stdbool.h>
    6#include <stdint.h>
    7
    8#include <osmocom/core/endian.h>
    9
    10/* As defined by RFC3267: Adaptive Multi-Rate (AMR) */
    11
    12/*
    13 * +----------------+-------------------+----------------
    14 * | payload header | table of contents | speech data ...
    15 * +----------------+-------------------+----------------
    16 */
    17
    18/*
    19 * 4.3. Bandwidth-Efficient Mode:
    20 *
    21 * Summary from 4.3.4: Same as Octet aligned (see below) but without padding after header and ToC:
    22 * 0 1
    23 * 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
    24 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    25 * | CMR |F| FT |Q|X X X X X X|
    26 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    27 *
    28 * X means AMR payload (padding in case of FT=NO_DATA).
    29 */
    31#if OSMO_IS_LITTLE_ENDIAN
    32 uint8_t ft_hi:3, /* coding mode highest part */
    33 f:1,
    34 cmr:4; /* Codec Mode Request */
    35 uint8_t data_start:6,
    36 q:1, /* OK (not damaged) at origin? */
    37 ft_lo:1; /* coding mode lowest bit */
    38#elif OSMO_IS_BIG_ENDIAN
    39/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianness.py) */
    40 uint8_t cmr:4, f:1, ft_hi:3;
    41 uint8_t ft_lo:1, q:1, data_start:6;
    42#endif
    43 uint8_t data[0];
    44} __attribute__((packed));
    45
    46/* See diagram above: CMR (4) + F (1) + FT (4) + Q (1) = 10 */
    47#define AMR_HDR_BWE_LEN_BITS 10
    48
    49/*
    50 * 4.4. Octet-aligned Mode:
    51 *
    52 * 4.4.1. The Payload Header:
    53 *
    54 * 0 1 2 3 4 5 6 7
    55 * +-+-+-+-+-+-+-+-+
    56 * | CMR |X X X X|
    57 * +-+-+-+-+-+-+-+-+
    58 *
    59 * According to: 3GPP TS 26.201 "AMR Wideband speech codec; Frame Structure",
    60 * version 5.0.0 (2001-03), 3rd Generation Partnership Project (3GPP):
    61 *
    62 * Possible Frame type / CMR values:
    63 *
    64 * 0-8 for AMR-WB (from 6.60 kbit/s to 23.85 kbit/s)
    65 * 9 (SID) confort noise.
    66 * 10-13 future use.
    67 * 14 means lost speech frame (only available for AMR-WB)
    68 * 15 means no data
    69 *
    70 * 4.4.2. The table of contents:
    71 *
    72 * 0 1 2 3 4 5 6 7
    73 * +-+-+-+-+-+-+-+-+
    74 * |F| FT |Q|X X|
    75 * +-+-+-+-+-+-+-+-+
    76 *
    77 * X means padding.
    78 */
    79
    80struct amr_hdr {
    81#if OSMO_IS_LITTLE_ENDIAN
    82 /* Payload Header */
    83 uint8_t pad1:4,
    84 cmr:4; /* Codec Mode Request */
    85 /* Table of Contents */
    86 uint8_t pad2:2,
    87 q:1, /* OK (not damaged) at origin? */
    88 ft:4, /* coding mode */
    89 f:1; /* followed by another speech frame? */
    90#elif OSMO_IS_BIG_ENDIAN
    91/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianness.py) */
    92 uint8_t cmr:4, pad1:4;
    93 uint8_t f:1, ft:4, q:1, pad2:2;
    94#endif
    95 uint8_t data[0];
    96} __attribute__((packed));
    97
    98static inline void *osmo_amr_get_payload(struct amr_hdr *amrh)
    99{
    100 return (uint8_t *)amrh + sizeof(struct amr_hdr);
    101}
    102
    103/* AMR voice frame type identifiers
    104 * See also 3GPP TS 26.101, Table 1a: Interpretation of Frame Type, Mode
    105 * Indication and Mode Request fields */
    106#define AMR_FT_0 0 /* 4.75 */
    107#define AMR_FT_1 1 /* 5.15 */
    108#define AMR_FT_2 2 /* 5.90 */
    109#define AMR_FT_3 3 /* 6.70 */
    110#define AMR_FT_4 4 /* 7.40 */
    111#define AMR_FT_5 5 /* 7.95 */
    112#define AMR_FT_6 6 /* 10.2 */
    113#define AMR_FT_7 7 /* 12.2 */
    114#define AMR_FT_SID 8 /* AMR SID */
    115#define AMR_FT_GSM_EFR_SID 9 /* GSM-EFR SID */
    116#define AMR_FT_TDMA_EFR_SID 10 /* TDMA-EFR SID */
    117#define AMR_FT_PDC_EFR_SID 11 /* PDC-EFR SID */
    118/* version 16.0.0 Release 16: 12-14 for future use */
    119#define AMR_FT_NO_DATA 15 /* NO_DATA */
    120#define AMR_FT_MAX 16 /* INTERNAL, NO NOT USE OUTSIDE libosmo-netif */
    121
    122/* AMR voice frame length (in bits).
    123 * See also RFC 3267, chapter 3.6.
    124 *
    125 * NOTE: These constants refer to the length of one AMR speech frame-block,
    126 * not counting CMR, TOC. */
    127#define AMR_FT_0_LEN_BITS 95 /* 4.75 */
    128#define AMR_FT_1_LEN_BITS 103 /* 5.15 */
    129#define AMR_FT_2_LEN_BITS 118 /* 5.90 */
    130#define AMR_FT_3_LEN_BITS 134 /* 6.70 */
    131#define AMR_FT_4_LEN_BITS 148 /* 7.40 */
    132#define AMR_FT_5_LEN_BITS 159 /* 7.95 */
    133#define AMR_FT_6_LEN_BITS 204 /* 10.2 */
    134#define AMR_FT_7_LEN_BITS 244 /* 12.2 */
    135#define AMR_FT_SID_LEN_BITS 39 /* SID */
    136#define AMR_FT_GSM_EFR_SID_LEN_BITS 43 /* GSM-EFR SID */
    137#define AMR_FT_TDMA_EFR_SID_LEN_BITS 38 /* TDMA-EFR SID */
    138#define AMR_FT_PDC_EFR_SID_LEN_BITS 37 /* PDC-EFR SID */
    139/* version 16.0.0 Release 16: 12-14 for future use */
    140#define AMR_FT_NO_DATA_LEN_BITS 0 /* NO_DATA */
    141
    142/* AMR voice frame length (in bytes, rounded).
    143 *
    144 * NOTE: These constants refer to the length of one AMR speech frame-block,
    145 * not counting CMR, TOC. */
    146#define AMR_FT_0_LEN ((AMR_FT_0_LEN_BITS+7)/8) /* 4.75 */
    147#define AMR_FT_1_LEN ((AMR_FT_1_LEN_BITS+7)/8) /* 5.15 */
    148#define AMR_FT_2_LEN ((AMR_FT_2_LEN_BITS+7)/8) /* 5.90 */
    149#define AMR_FT_3_LEN ((AMR_FT_3_LEN_BITS+7)/8) /* 6.70 */
    150#define AMR_FT_4_LEN ((AMR_FT_4_LEN_BITS+7)/8) /* 7.40 */
    151#define AMR_FT_5_LEN ((AMR_FT_5_LEN_BITS+7)/8) /* 7.95 */
    152#define AMR_FT_6_LEN ((AMR_FT_6_LEN_BITS+7)/8) /* 10.2 */
    153#define AMR_FT_7_LEN ((AMR_FT_7_LEN_BITS+7)/8) /* 12.2 */
    154#define AMR_FT_SID_LEN ((AMR_FT_SID_LEN_BITS+7)/8) /* SID */
    155#define AMR_FT_GSM_EFR_SID_LEN ((AMR_FT_GSM_EFR_SID_LEN_BITS+7)/8) /* GSM-EFR SID */
    156#define AMR_FT_TDMA_EFR_SID_LEN ((AMR_FT_TDMA_EFR_SID_LEN_BITS+7)/8) /* TDMA-EFR SID */
    157#define AMR_FT_PDC_EFR_SID_LEN ((AMR_FT_PDC_EFR_SID_LEN_BITS+7)/8) /* PDC-EFR SID */
    158/* version 16.0.0 Release 16: 12-14 for future use */
    159#define AMR_FT_NO_DATA_LEN ((AMR_FT_NO_DATA_LEN_BITS+7)/8) /* NO_DATA */
    160
    161int osmo_amr_ft_valid(uint8_t amr_ft);
    162size_t osmo_amr_bytes(uint8_t amr_cmr);
    163size_t osmo_amr_bits(uint8_t amr_ft);
    164
    165bool osmo_amr_is_oa(const uint8_t *payload, unsigned int payload_len);
    166int osmo_amr_oa_to_bwe(uint8_t *payload, unsigned int payload_len);
    167int osmo_amr_bwe_to_oa(uint8_t *payload, unsigned int payload_len,
    168 unsigned int payload_maxlen);
    169int osmo_amr_bwe_to_iuup(uint8_t *payload, unsigned int payload_len);
    170int osmo_amr_iuup_to_bwe(uint8_t *payload, unsigned int payload_len,
    171 unsigned int payload_maxlen);
    172int osmo_amr_bytes_to_ft(size_t bytes);
    173
    174#endif
    Definition: amr.h:30
    Definition: amr.h:80
    html/modules.js0000644000175000017500000000047014642372355013024 0ustar buildbuildvar modules = [ [ "Osmocom Jitter Buffer", "group__jibuf.html", "group__jibuf" ], [ "Osmocom Multiplex Protocol", "group__osmux.html", "group__osmux" ], [ "Osmocom Stream Socket", "group__stream.html", "group__stream" ], [ "Osmocom Datagram Socket", "group__datagram.html", "group__datagram" ] ];html/dir_abe9b486a10ccc5afdf8abc29637e0c1.html0000644000175000017500000001070714642372355017475 0ustar buildbuild libosmo-netif: include/osmocom Directory Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmocom Directory Reference

    Directories

    directory  netif
     
    html/structosmo__prim__pkt__hdr.js0000644000175000017500000000033614642372355016776 0ustar buildbuildvar structosmo__prim__pkt__hdr = [ [ "primitive", "structosmo__prim__pkt__hdr.html#aaca814fcecde761d5205ab9e6beb4b2e", null ], [ "sap", "structosmo__prim__pkt__hdr.html#ac227c462fca290539d67d9f21a908e19", null ] ];html/structrtp__hdr.html0000644000175000017500000001341414642372355014754 0ustar buildbuild libosmo-netif: rtp_hdr Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    rtp_hdr Struct Reference

    Data Fields

    uint16_t sequence
     
    uint32_t timestamp
     
    uint32_t ssrc
     
    uint8_t data [0]
     

    The documentation for this struct was generated from the following file:
    • include/osmocom/netif/rtp.h
    html/stream__cli_8c.js0000644000175000017500000000557714642372355014244 0ustar buildbuildvar stream__cli_8c = [ [ "osmo_stream_cli_close", "group__stream.html#gad217c1c1b83ac852e090afd49146db19", null ], [ "osmo_stream_cli_create", "group__stream.html#ga1754a498abc27577a8e0b3b0f236c05b", null ], [ "osmo_stream_cli_destroy", "group__stream.html#ga9d0dac2f390c660c85fa347765f4f45a", null ], [ "osmo_stream_cli_get_data", "group__stream.html#ga606a53840677f3f5200887dc92f5de4d", null ], [ "osmo_stream_cli_get_ofd", "group__stream.html#ga0615daa4aac253a3d530f35fddbc68bd", null ], [ "osmo_stream_cli_get_sockname", "group__stream.html#gaecd148ae11f2f619aa52dd2900a15827", null ], [ "osmo_stream_cli_is_connected", "group__stream.html#ga79a09e9c9b8cc98991cd5eebdb41ed57", null ], [ "osmo_stream_cli_open", "group__stream.html#ga86b4b9c8e563f8426d3cdae803e3ec38", null ], [ "osmo_stream_cli_open2", "group__stream.html#ga127866794591d16a0eb7244f2fe666ef", null ], [ "osmo_stream_cli_reconnect", "group__stream.html#ga11d2615f6197f33073ba7245e5ba95ee", null ], [ "osmo_stream_cli_recv", "group__stream.html#ga06f9743c19068bb720a4949ae8467243", null ], [ "osmo_stream_cli_send", "group__stream.html#gaacf415b97e1184baadeee5c60387422b", null ], [ "osmo_stream_cli_set_addr", "group__stream.html#ga0038e937cf0f36c59e0e3991523219a1", null ], [ "osmo_stream_cli_set_addrs", "group__stream.html#gaab1e7ef0ccc88e124c5f7bbb5e46c29c", null ], [ "osmo_stream_cli_set_connect_cb", "group__stream.html#gab588bfd88a3cc775875981e2ee66e295", null ], [ "osmo_stream_cli_set_data", "group__stream.html#ga5e94c511d537f63337912bb50fb2dc28", null ], [ "osmo_stream_cli_set_disconnect_cb", "group__stream.html#ga23e5c1799a8225607543de39a56ca449", null ], [ "osmo_stream_cli_set_domain", "group__stream.html#ga33ce730fc91ebade9b7188fa220656c6", null ], [ "osmo_stream_cli_set_local_addr", "group__stream.html#ga70420e7c664cc4c4e69ac4d3476e7f53", null ], [ "osmo_stream_cli_set_local_addrs", "group__stream.html#ga090fc3fcd1706b815ef5a729921c100e", null ], [ "osmo_stream_cli_set_local_port", "group__stream.html#ga4d83e3cf7fdf7eb354c2015ff9bed98a", null ], [ "osmo_stream_cli_set_name", "group__stream.html#gaeb712dc553735736047f9b11d9583baa", null ], [ "osmo_stream_cli_set_nodelay", "group__stream.html#gaa196e78db6ca32abb1473566b4f1b04b", null ], [ "osmo_stream_cli_set_port", "group__stream.html#gab8b9f65bebfeb83c6e33d102e9439770", null ], [ "osmo_stream_cli_set_proto", "group__stream.html#ga91d57aa94a370520540d7272af66a23b", null ], [ "osmo_stream_cli_set_read_cb", "group__stream.html#gad1d1817f25694ea126779262cddf4fbd", null ], [ "osmo_stream_cli_set_read_cb2", "group__stream.html#gad4c563e88d269092b0d66f33a4764420", null ], [ "osmo_stream_cli_set_reconnect_timeout", "group__stream.html#gade74792afe35f31dd2584c888db3dd62", null ], [ "osmo_stream_cli_set_type", "group__stream.html#ga5e5c4c9aacc1cd1d303c0295018594cb", null ] ];html/doc.png0000644000175000017500000000135214642372355012271 0ustar buildbuild‰PNG  IHDRÚ}\ˆ±IDATxíMOS[…Ÿžsúa?-XZ(PD4‚ AWbu`b 77wäHFÆCËÔÂÿà/`vo„ˆAPòq‹P @ ­ûÝè980 îà¤+»§Ýy×^ïZï9SW¹\83g‰3'°Nâçl¹¸_b¯p ïåûÆVÜÖ¡€Ÿ×"¬Ö†X€d]Ðà3“ÉÃÄÌ™xŸ ßMàœ[<çSPkvc—hÈ'…™˜^Åm™hØ7 `Û™¦ èÀåráq›‘œ¾!daeKŸþÆÕ˜:Ì*³_דâèi?I–eP*B7Ÿ¿åô!¹Ýgr6Ër6oKbëþãðôrI”ËTˆüªŒ¨xóö=›ù¢&‰(e+ßóÄkýÇ`ëÁÜb.“¸ÐW×w0¥°jÑzN™¬|©WEãµ¢a¯6[öX†AkÓù*/œ¨‰€ÉY­ ÿV’§–u²jÂ>1W *½·°PGŽzÿ¨/Eg{ ŸÇâaoŠÁVú:è¿™¤1$ôR§W,–ªà¨@ŠË56¾ÀÔÜ-¾,mê¸Î/æè¹– òr5¥T*S(Vf8ö9u’ Õ£w›ùóa=Í<{Ò¡UŒ÷r¯+ÉådDÏF$è°…£é¿`zþ»ÎúöN‘µÜ®0Q3£~_^Ëóâ¯N=ˆvpTà±LžT}ˆîkq†Òm<¼ÎÓ?Zh¿X£ï_þÝ¥[)ƒ `gêÃa_Ô*äÔ2`'=õ´Fÿ2EâÁPú ÷»›l=8‹Wv°%THqÉ¿<"¤ïG¾ÆxH{#ÆÖ«aÔJÕÞ‡—m‹„ çñKsÿàñVŠØ¡°·MâÒ^ TÁ– Ý›r¥ß½ømüÿ_™?ªWÄ°÷#uIEND®B`‚html/datagram_8c.js0000644000175000017500000000575114642372355013535 0ustar buildbuildvar datagram_8c = [ [ "osmo_dgram_close", "group__datagram.html#ga46db4acbfc35668e35601338d64364ed", null ], [ "osmo_dgram_create", "group__datagram.html#ga56ee60c89f1a3bc975ab0ede5b71ff15", null ], [ "osmo_dgram_destroy", "group__datagram.html#ga01fb36f8c19b2b64705d8263f7f53f59", null ], [ "osmo_dgram_get_data", "group__datagram.html#ga36d7e1f26af3308b51f95e06d1c742d7", null ], [ "osmo_dgram_open", "group__datagram.html#gac65de108c52dba83b178d6453e9fb545", null ], [ "osmo_dgram_recv", "group__datagram.html#gaae58d13a6fd634ebfddd486d0d428c5e", null ], [ "osmo_dgram_rx_close", "group__datagram.html#ga01efa7269834a745d80910a64c6f61c0", null ], [ "osmo_dgram_rx_create", "group__datagram.html#gad7af9f04fe4847b0e2eefe35fa05a8b8", null ], [ "osmo_dgram_rx_destroy", "group__datagram.html#ga6e4b92b9c7f210d1cb3782425d0bdac0", null ], [ "osmo_dgram_rx_open", "group__datagram.html#gaf558e9c2f02216ed95db039ddaf31050", null ], [ "osmo_dgram_rx_recv", "group__datagram.html#ga16d69e998c663cdec0b76560a2d8cfb9", null ], [ "osmo_dgram_rx_set_addr", "group__datagram.html#gad378ba5cc66ee0c27a277906d8434e31", null ], [ "osmo_dgram_rx_set_port", "group__datagram.html#gafbd947def18d8e34062876433ac05e91", null ], [ "osmo_dgram_rx_set_read_cb", "group__datagram.html#ga5a0f7221b8583aac5153f167c4e2177d", null ], [ "osmo_dgram_send", "group__datagram.html#ga66d6c9d5f0243a4f7ed458c62d8e20dd", null ], [ "osmo_dgram_set_data", "group__datagram.html#gaa6a5fbd5f227d15cefe6b234fefb3b4d", null ], [ "osmo_dgram_set_local_addr", "group__datagram.html#gaf21d974e14fa22f910313b240d31d40f", null ], [ "osmo_dgram_set_local_port", "group__datagram.html#ga9180ae9a36a9927d4bdb49cdc5708b1f", null ], [ "osmo_dgram_set_read_cb", "group__datagram.html#ga6b6ef2f02e3d260f1e84a2ecf8c67b5a", null ], [ "osmo_dgram_set_remote_addr", "group__datagram.html#ga6677ee8d976d2e1bed8e0c01e103c18f", null ], [ "osmo_dgram_set_remote_port", "group__datagram.html#ga27bf4c1d8e4c30ef7b4ec49665d6fc90", null ], [ "osmo_dgram_tx_close", "group__datagram.html#ga0eb580467681e8fa91be35a83a74f132", null ], [ "osmo_dgram_tx_create", "group__datagram.html#gadeaa837f3df8382bd7a50e668b9d3a61", null ], [ "osmo_dgram_tx_destroy", "group__datagram.html#gaad6f9ca0688cd4a8a95ec6002f52ded5", null ], [ "osmo_dgram_tx_open", "group__datagram.html#ga8d712623df3862e55ad248dc5ecd626c", null ], [ "osmo_dgram_tx_send", "group__datagram.html#gad4638b9943090f5bf1a7b75fa8efde46", null ], [ "osmo_dgram_tx_set_addr", "group__datagram.html#ga94fe94f64f1285715db36eb1f2e9deaa", null ], [ "osmo_dgram_tx_set_data", "group__datagram.html#ga095ce94e65f1607026c37c12e6f5e9c0", null ], [ "osmo_dgram_tx_set_local_addr", "group__datagram.html#ga6c843f43db5439f8f0ba38f72dbb1a20", null ], [ "osmo_dgram_tx_set_local_port", "group__datagram.html#gae2962232548d41621520c6c71da423a5", null ], [ "osmo_dgram_tx_set_port", "group__datagram.html#ga48d7e39656886b52aa176fc1b14c84cf", null ] ];html/ipa__unit_8h_source.html0000644000175000017500000004074214642372355015640 0ustar buildbuild libosmo-netif: include/osmocom/netif/ipa_unit.h Source File
    libosmo-netif 1.4.0
    Osmocom network interface library
    ipa_unit.h
    1#ifndef _IPA_UNIT_H_
    2#define _IPA_UNIT_H_
    3
    4struct osmo_ipa_unit;
    5
    6struct osmo_ipa_unit *osmo_ipa_unit_alloc(size_t datalen);
    7void osmo_ipa_unit_free(struct osmo_ipa_unit *unit);
    8
    9void *osmo_ipa_unit_get_data(struct osmo_ipa_unit *unit);
    10
    11void osmo_ipa_unit_set_site_id(struct osmo_ipa_unit *unit, uint16_t site_id);
    12void osmo_ipa_unit_set_bts_id(struct osmo_ipa_unit *unit, uint16_t bts_id);
    13void osmo_ipa_unit_set_trx_id(struct osmo_ipa_unit *unit, uint16_t trx_id);
    14void osmo_ipa_unit_set_unit_name(struct osmo_ipa_unit *unit, const char *name);
    15void osmo_ipa_unit_set_unit_hwvers(struct osmo_ipa_unit *unit, const char *vers);
    16void osmo_ipa_unit_set_unit_swvers(struct osmo_ipa_unit *unit, const char *vers);
    17void osmo_ipa_unit_set_unit_mac_addr(struct osmo_ipa_unit *unit, uint8_t *addr);
    18void osmo_ipa_unit_set_unit_loc1(struct osmo_ipa_unit *unit, const char *loc);
    19void osmo_ipa_unit_set_unit_loc2(struct osmo_ipa_unit *unit, const char *loc);
    20void osmo_ipa_unit_set_unit_serno(struct osmo_ipa_unit *unit, const char *serno);
    21
    22uint16_t osmo_ipa_unit_get_site_id(struct osmo_ipa_unit *unit);
    23uint16_t osmo_ipa_unit_get_bts_id(struct osmo_ipa_unit *unit);
    24uint16_t osmo_ipa_unit_get_trx_id(struct osmo_ipa_unit *unit);
    25const char *osmo_ipa_unit_get_unit_name(struct osmo_ipa_unit *unit);
    26const char *osmo_ipa_unit_get_unit_hwvers(struct osmo_ipa_unit *unit);
    27const char *osmo_ipa_unit_get_unit_swvers(struct osmo_ipa_unit *unit);
    28uint8_t *osmo_ipa_unit_get_unit_mac_addr(struct osmo_ipa_unit *unit);
    29const char *osmo_ipa_unit_get_unit_loc1(struct osmo_ipa_unit *unit);
    30const char *osmo_ipa_unit_get_unit_loc2(struct osmo_ipa_unit *unit);
    31const char *osmo_ipa_unit_get_unit_serno(struct osmo_ipa_unit *unit);
    32
    33int osmo_ipa_unit_snprintf(char *buf, size_t size, struct osmo_ipa_unit *unit);
    34int osmo_ipa_unit_snprintf_mac_addr(char *buf, size_t size, struct osmo_ipa_unit *unit);
    35int osmo_ipa_unit_snprintf_name(char *buf, size_t size, struct osmo_ipa_unit *unit);
    36int osmo_ipa_unit_snprintf_loc1(char *buf, size_t size, struct osmo_ipa_unit *unit);
    37int osmo_ipa_unit_snprintf_loc2(char *buf, size_t size, struct osmo_ipa_unit *unit);
    38int osmo_ipa_unit_snprintf_hwvers(char *buf, size_t size, struct osmo_ipa_unit *unit);
    39int osmo_ipa_unit_snprintf_swvers(char *buf, size_t size, struct osmo_ipa_unit *unit);
    40int osmo_ipa_unit_snprintf_swvers(char *buf, size_t size, struct osmo_ipa_unit *unit);
    41int osmo_ipa_unit_snprintf_serno(char *buf, size_t size, struct osmo_ipa_unit *unit);
    42
    43struct osmo_ipa_unit *osmo_ipa_unit_find(struct llist_head *list, uint16_t site_id, uint16_t bts_id);
    44void osmo_ipa_unit_add(struct llist_head *list, struct osmo_ipa_unit *unit);
    45
    46#endif /* _IPA_UNIT_H_ */
    Definition: ipa_unit.c:27
    html/tab_s.png0000644000175000017500000000027014642372355012612 0ustar buildbuild‰PNG  IHDR$ÇÇ[IDATxíÝ ‚@@Ñ£?Q…¤"š¢%¦I‘—Šf–6[´HÃäQƒ<Þâõþ]ždr Í’s?ˆO=Ñññw'ÌF‡Ž íðö-~rÃ[œèŠ­ì¬mƒÖ¬ƒݯнŠÕF)Yº% §`nÌ,9B ™’©!ÑŒ\ý<Å#üîî•IEND®B`‚html/stream__srv_8c.html0000644000175000017500000011470014642372355014624 0ustar buildbuild libosmo-netif: src/stream_srv.c File Reference
    libosmo-netif 1.4.0
    Osmocom network interface library

    Osmocom stream socket helpers (server side) More...

    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <string.h>
    #include <time.h>
    #include <sys/fcntl.h>
    #include <sys/socket.h>
    #include <sys/ioctl.h>
    #include <arpa/inet.h>
    #include <netinet/in.h>
    #include <netinet/tcp.h>
    #include <osmocom/core/timer.h>
    #include <osmocom/core/select.h>
    #include <osmocom/core/utils.h>
    #include <osmocom/gsm/tlv.h>
    #include <osmocom/core/msgb.h>
    #include <osmocom/core/osmo_io.h>
    #include <osmocom/core/panic.h>
    #include <osmocom/core/logging.h>
    #include <osmocom/core/talloc.h>
    #include <osmocom/core/socket.h>
    #include <osmocom/netif/stream.h>
    #include <osmocom/netif/stream_private.h>
    #include "config.h"
    #include <osmocom/netif/sctp.h>

    Data Structures

    struct  osmo_stream_srv_link
     
    struct  osmo_stream_srv
     

    Macros

    #define LOGSLNK(link, level, fmt, args...)
     
    #define LOGSSRV(srv, level, fmt, args...)
     
    #define OSMO_STREAM_SRV_F_RECONF   (1 << 0)
     
    #define OSMO_STREAM_SRV_F_NODELAY   (1 << 1)
     
    #define OSMO_STREAM_SRV_F_FLUSH_DESTROY   (1 << 0)
     

    Functions

    static int _setsockopt_nosigpipe (struct osmo_stream_srv_link *link, int new_fd)
     
    static int osmo_stream_srv_link_ofd_cb (struct osmo_fd *ofd, unsigned int what)
     
    struct osmo_stream_srv_linkosmo_stream_srv_link_create (void *ctx)
     Create an Osmocom Stream Server Link A Stream Server Link is the listen()+accept() "parent" to individual Stream Servers. More...
     
    void osmo_stream_srv_link_set_name (struct osmo_stream_srv_link *link, const char *name)
     Set a name on the srv_link object (used during logging) More...
     
    void osmo_stream_srv_link_set_nodelay (struct osmo_stream_srv_link *link, bool nodelay)
     Set the NODELAY socket option to avoid Nagle-like behavior Setting this to nodelay=true will automatically set the NODELAY socket option on any socket established via this server link, before calling the accept_cb() More...
     
    void osmo_stream_srv_link_set_addr (struct osmo_stream_srv_link *link, const char *addr)
     Set the local address to which we bind. More...
     
    int osmo_stream_srv_link_set_addrs (struct osmo_stream_srv_link *link, const char **addr, size_t addrcnt)
     Set the local address set to which we bind. Useful for protocols allowing bind on more than one address (such as SCTP) More...
     
    void osmo_stream_srv_link_set_port (struct osmo_stream_srv_link *link, uint16_t port)
     Set the local port number to which we bind. More...
     
    void osmo_stream_srv_link_set_proto (struct osmo_stream_srv_link *link, uint16_t proto)
     Set the protocol for the stream server link. More...
     
    int osmo_stream_srv_link_set_type (struct osmo_stream_srv_link *link, int type)
     Set the socket type for the stream server link. More...
     
    int osmo_stream_srv_link_set_domain (struct osmo_stream_srv_link *link, int domain)
     Set the socket type for the stream server link. More...
     
    void osmo_stream_srv_link_set_data (struct osmo_stream_srv_link *link, void *data)
     Set application private data of the stream server link. More...
     
    void * osmo_stream_srv_link_get_data (struct osmo_stream_srv_link *link)
     Get application private data of the stream server link. More...
     
    char * osmo_stream_srv_link_get_sockname (const struct osmo_stream_srv_link *link)
     Get description of the stream server link e. g. 127.0.0.1:1234. More...
     
    struct osmo_fd * osmo_stream_srv_link_get_ofd (struct osmo_stream_srv_link *link)
     Get Osmocom File Descriptor of the stream server link. More...
     
    void osmo_stream_srv_link_set_accept_cb (struct osmo_stream_srv_link *link, int(*accept_cb)(struct osmo_stream_srv_link *link, int fd))
     Set the accept() call-back of the stream server link. More...
     
    void osmo_stream_srv_link_destroy (struct osmo_stream_srv_link *link)
     Destroy the stream server link. Closes + Releases Memory. More...
     
    int osmo_stream_srv_link_open (struct osmo_stream_srv_link *link)
     Open the stream server link. This actually initializes the underlying socket and binds it to the configured ip/port. More...
     
    bool osmo_stream_srv_link_is_opened (const struct osmo_stream_srv_link *link)
     Check whether the stream server link is opened. More...
     
    void osmo_stream_srv_link_close (struct osmo_stream_srv_link *link)
     Close the stream server link and unregister from select loop Does not destroy the server link, merely closes it! More...
     
    int osmo_stream_srv_link_set_param (struct osmo_stream_srv_link *link, enum osmo_stream_srv_link_param par, void *val, size_t val_len)
     
    static void stream_srv_iofd_read_cb (struct osmo_io_fd *iofd, int res, struct msgb *msg)
     
    static void stream_srv_iofd_write_cb (struct osmo_io_fd *iofd, int res, struct msgb *msg)
     
    static int osmo_stream_srv_read (struct osmo_stream_srv *conn)
     
    static void osmo_stream_srv_write (struct osmo_stream_srv *conn)
     
    static int osmo_stream_srv_cb (struct osmo_fd *ofd, unsigned int what)
     
    struct osmo_stream_srvosmo_stream_srv_create (void *ctx, struct osmo_stream_srv_link *link, int fd, int(*read_cb)(struct osmo_stream_srv *conn), int(*closed_cb)(struct osmo_stream_srv *conn), void *data)
     Create a Stream Server inside the specified link. More...
     
    struct osmo_stream_srvosmo_stream_srv_create2 (void *ctx, struct osmo_stream_srv_link *link, int fd, void *data)
     Create a Stream Server inside the specified link. More...
     
    void osmo_stream_srv_set_name (struct osmo_stream_srv *conn, const char *name)
     Set a name on the srv object (used during logging) More...
     
    void osmo_stream_srv_set_read_cb (struct osmo_stream_srv *conn, int(*read_cb)(struct osmo_stream_srv *conn, struct msgb *msg))
     Set the call-back function when data was read from the stream server socket Only for osmo_stream_srv created with osmo_stream_srv_create2() More...
     
    void osmo_stream_srv_set_closed_cb (struct osmo_stream_srv *conn, int(*closed_cb)(struct osmo_stream_srv *conn))
     Set the call-back function called when the stream server socket was closed. More...
     
    void osmo_stream_srv_set_flush_and_destroy (struct osmo_stream_srv *conn)
     Prepare to send out all pending messages on the connection's Tx queue and then automatically destroy the stream with osmo_stream_srv_destroy(). This function disables queuing of new messages on the connection and also disables reception of new messages on the connection. More...
     
    void osmo_stream_srv_set_data (struct osmo_stream_srv *conn, void *data)
     Set application private data of the stream server. More...
     
    void osmo_stream_srv_set_segmentation_cb (struct osmo_stream_srv *conn, int(*segmentation_cb)(struct msgb *msg))
     Set the segmentation callback for target osmo_stream_srv structure. The connection has to have been established prior to calling this function. More...
     
    void * osmo_stream_srv_get_data (struct osmo_stream_srv *conn)
     Get application private data of the stream server. More...
     
    struct osmo_fd * osmo_stream_srv_get_ofd (struct osmo_stream_srv *conn)
     Get Osmocom File Descriptor of the stream server. More...
     
    struct osmo_stream_srv_linkosmo_stream_srv_get_master (struct osmo_stream_srv *conn)
     Get the master (Link) from a Stream Server. More...
     
    void osmo_stream_srv_destroy (struct osmo_stream_srv *conn)
     Destroy given Stream Server This function closes the Stream Server socket, unregisters from select loop, invokes the connection's closed_cb() callback to allow API users to clean up any associated state they have for this connection, and then de-allocates associated memory. More...
     
    void osmo_stream_srv_send (struct osmo_stream_srv *conn, struct msgb *msg)
     Enqueue data to be sent via an Osmocom stream server. More...
     
    int osmo_stream_srv_recv (struct osmo_stream_srv *conn, struct msgb *msg)
     Receive data via Osmocom stream server. More...
     
    void osmo_stream_srv_clear_tx_queue (struct osmo_stream_srv *conn)
     

    Variables

    static struct osmo_io_ops srv_ioops
     

    Detailed Description

    Osmocom stream socket helpers (server side)

    html/globals_vars.html0000644000175000017500000000743314642372355014370 0ustar buildbuild libosmo-netif: Globals
    libosmo-netif 1.4.0
    Osmocom network interface library
     
    html/doxygen.css0000644000175000017500000010161414642372355013207 0ustar buildbuild/* The standard CSS for doxygen 1.9.4 */ body, table, div, p, dl { font: 400 14px/22px Roboto,sans-serif; } p.reference, p.definition { font: 400 14px/22px Roboto,sans-serif; } /* @group Heading Levels */ h1.groupheader { font-size: 150%; } .title { font: 400 14px/28px Roboto,sans-serif; font-size: 150%; font-weight: bold; margin: 10px 2px; } h2.groupheader { border-bottom: 1px solid #879ECB; color: #354C7B; font-size: 150%; font-weight: normal; margin-top: 1.75em; padding-top: 8px; padding-bottom: 4px; width: 100%; } h3.groupheader { font-size: 100%; } h1, h2, h3, h4, h5, h6 { -webkit-transition: text-shadow 0.5s linear; -moz-transition: text-shadow 0.5s linear; -ms-transition: text-shadow 0.5s linear; -o-transition: text-shadow 0.5s linear; transition: text-shadow 0.5s linear; margin-right: 15px; } h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { text-shadow: 0 0 15px cyan; } dt { font-weight: bold; } ul.multicol { -moz-column-gap: 1em; -webkit-column-gap: 1em; column-gap: 1em; -moz-column-count: 3; -webkit-column-count: 3; column-count: 3; } p.startli, p.startdd { margin-top: 2px; } th p.starttd, th p.intertd, th p.endtd { font-size: 100%; font-weight: 700; } p.starttd { margin-top: 0px; } p.endli { margin-bottom: 0px; } p.enddd { margin-bottom: 4px; } p.endtd { margin-bottom: 2px; } p.interli { } p.interdd { } p.intertd { } /* @end */ caption { font-weight: bold; } span.legend { font-size: 70%; text-align: center; } h3.version { font-size: 90%; text-align: center; } div.navtab { border-right: 1px solid #A3B4D7; padding-right: 15px; text-align: right; line-height: 110%; } div.navtab table { border-spacing: 0; } td.navtab { padding-right: 6px; padding-left: 6px; } td.navtabHL { background-image: url('tab_a.png'); background-repeat:repeat-x; padding-right: 6px; padding-left: 6px; } td.navtabHL a, td.navtabHL a:visited { color: #fff; text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); } a.navtab { font-weight: bold; } div.qindex{ text-align: center; width: 100%; line-height: 140%; font-size: 130%; color: #A0A0A0; } dt.alphachar{ font-size: 180%; font-weight: bold; } .alphachar a{ color: black; } .alphachar a:hover, .alphachar a:visited{ text-decoration: none; } .classindex dl { padding: 25px; column-count:1 } .classindex dd { display:inline-block; margin-left: 50px; width: 90%; line-height: 1.15em; } .classindex dl.odd { background-color: #F8F9FC; } @media(min-width: 1120px) { .classindex dl { column-count:2 } } @media(min-width: 1320px) { .classindex dl { column-count:3 } } /* @group Link Styling */ a { color: #3D578C; font-weight: normal; text-decoration: none; } .contents a:visited { color: #4665A2; } a:hover { text-decoration: underline; } .contents a.qindexHL:visited { color: #FFFFFF; } a.el { font-weight: bold; } a.elRef { } a.code, a.code:visited, a.line, a.line:visited { color: #4665A2; } a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { color: #4665A2; } a.code.hl_class { /* style for links to class names in code snippets */ } a.code.hl_struct { /* style for links to struct names in code snippets */ } a.code.hl_union { /* style for links to union names in code snippets */ } a.code.hl_interface { /* style for links to interface names in code snippets */ } a.code.hl_protocol { /* style for links to protocol names in code snippets */ } a.code.hl_category { /* style for links to category names in code snippets */ } a.code.hl_exception { /* style for links to exception names in code snippets */ } a.code.hl_service { /* style for links to service names in code snippets */ } a.code.hl_singleton { /* style for links to singleton names in code snippets */ } a.code.hl_concept { /* style for links to concept names in code snippets */ } a.code.hl_namespace { /* style for links to namespace names in code snippets */ } a.code.hl_package { /* style for links to package names in code snippets */ } a.code.hl_define { /* style for links to macro names in code snippets */ } a.code.hl_function { /* style for links to function names in code snippets */ } a.code.hl_variable { /* style for links to variable names in code snippets */ } a.code.hl_typedef { /* style for links to typedef names in code snippets */ } a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } a.code.hl_friend { /* style for links to friend names in code snippets */ } a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } a.code.hl_property { /* style for links to property names in code snippets */ } a.code.hl_event { /* style for links to event names in code snippets */ } a.code.hl_sequence { /* style for links to sequence names in code snippets */ } a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } /* @end */ dl.el { margin-left: -1cm; } ul { overflow: visible; } #side-nav ul { overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ } #main-nav ul { overflow: visible; /* reset ul rule for the navigation bar drop down lists */ } .fragment { text-align: left; direction: ltr; overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ overflow-y: hidden; } pre.fragment { border: 1px solid #C4CFE5; background-color: #FBFCFD; padding: 4px 6px; margin: 4px 8px 4px 2px; overflow: auto; word-wrap: break-word; font-size: 9pt; line-height: 125%; font-family: monospace, fixed; font-size: 105%; } div.fragment { padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ margin: 4px 8px 4px 2px; background-color: #FBFCFD; border: 1px solid #C4CFE5; } div.line { font-family: monospace, fixed; font-size: 13px; min-height: 13px; line-height: 1.0; text-wrap: unrestricted; white-space: -moz-pre-wrap; /* Moz */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ white-space: pre-wrap; /* CSS3 */ word-wrap: break-word; /* IE 5.5+ */ text-indent: -53px; padding-left: 53px; padding-bottom: 0px; margin: 0px; -webkit-transition-property: background-color, box-shadow; -webkit-transition-duration: 0.5s; -moz-transition-property: background-color, box-shadow; -moz-transition-duration: 0.5s; -ms-transition-property: background-color, box-shadow; -ms-transition-duration: 0.5s; -o-transition-property: background-color, box-shadow; -o-transition-duration: 0.5s; transition-property: background-color, box-shadow; transition-duration: 0.5s; } div.line:after { content:"\000A"; white-space: pre; } div.line.glow { background-color: cyan; box-shadow: 0 0 10px cyan; } span.lineno { padding-right: 4px; margin-right: 9px; text-align: right; border-right: 2px solid #0F0; background-color: #E8E8E8; white-space: pre; } span.lineno a { background-color: #D8D8D8; } span.lineno a:hover { background-color: #C8C8C8; } .lineno { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } div.ah, span.ah { background-color: black; font-weight: bold; color: #FFFFFF; margin-bottom: 3px; margin-top: 3px; padding: 0.2em; border: solid thin #333; border-radius: 0.5em; -webkit-border-radius: .5em; -moz-border-radius: .5em; box-shadow: 2px 2px 3px #999; -webkit-box-shadow: 2px 2px 3px #999; -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); } div.classindex ul { list-style: none; padding-left: 0; } div.classindex span.ai { display: inline-block; } div.groupHeader { margin-left: 16px; margin-top: 12px; font-weight: bold; } div.groupText { margin-left: 16px; font-style: italic; } body { background-color: white; color: black; margin: 0; } div.contents { margin-top: 10px; margin-left: 12px; margin-right: 8px; } td.indexkey { background-color: #EBEFF6; font-weight: bold; border: 1px solid #C4CFE5; margin: 2px 0px 2px 0; padding: 2px 10px; white-space: nowrap; vertical-align: top; } td.indexvalue { background-color: #EBEFF6; border: 1px solid #C4CFE5; padding: 2px 10px; margin: 2px 0px; } tr.memlist { background-color: #EEF1F7; } p.formulaDsp { text-align: center; } img.formulaDsp { } img.formulaInl, img.inline { vertical-align: middle; } div.center { text-align: center; margin-top: 0px; margin-bottom: 0px; padding: 0px; } div.center img { border: 0px; } address.footer { text-align: right; padding-right: 12px; } img.footer { border: 0px; vertical-align: middle; } .compoundTemplParams { color: #4665A2; font-size: 80%; line-height: 120%; } /* @group Code Colorization */ span.keyword { color: #008000 } span.keywordtype { color: #604020 } span.keywordflow { color: #e08000 } span.comment { color: #800000 } span.preprocessor { color: #806020 } span.stringliteral { color: #002080 } span.charliteral { color: #008080 } span.vhdldigit { color: #ff00ff } span.vhdlchar { color: #000000 } span.vhdlkeyword { color: #700070 } span.vhdllogic { color: #ff0000 } blockquote { background-color: #F7F8FB; border-left: 2px solid #9CAFD4; margin: 0 24px 0 4px; padding: 0 12px 0 16px; } blockquote.DocNodeRTL { border-left: 0; border-right: 2px solid #9CAFD4; margin: 0 4px 0 24px; padding: 0 16px 0 12px; } /* @end */ /* .search { color: #003399; font-weight: bold; } form.search { margin-bottom: 0px; margin-top: 0px; } input.search { font-size: 75%; color: #000080; font-weight: normal; background-color: #e8eef2; } */ td.tiny { font-size: 75%; } .dirtab { padding: 4px; border-collapse: collapse; border: 1px solid #A3B4D7; } th.dirtab { background: #EBEFF6; font-weight: bold; } hr { height: 0px; border: none; border-top: 1px solid #4A6AAA; } hr.footer { height: 1px; } /* @group Member Descriptions */ table.memberdecls { border-spacing: 0px; padding: 0px; } .memberdecls td, .fieldtable tr { -webkit-transition-property: background-color, box-shadow; -webkit-transition-duration: 0.5s; -moz-transition-property: background-color, box-shadow; -moz-transition-duration: 0.5s; -ms-transition-property: background-color, box-shadow; -ms-transition-duration: 0.5s; -o-transition-property: background-color, box-shadow; -o-transition-duration: 0.5s; transition-property: background-color, box-shadow; transition-duration: 0.5s; } .memberdecls td.glow, .fieldtable tr.glow { background-color: cyan; box-shadow: 0 0 15px cyan; } .mdescLeft, .mdescRight, .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight, .memTemplParams { background-color: #F9FAFC; border: none; margin: 4px; padding: 1px 0 0 8px; } .mdescLeft, .mdescRight { padding: 0px 8px 4px 8px; color: #555; } .memSeparator { border-bottom: 1px solid #DEE4F0; line-height: 1px; margin: 0px; padding: 0px; } .memItemLeft, .memTemplItemLeft { white-space: nowrap; } .memItemRight, .memTemplItemRight { width: 100%; } .memTemplParams { color: #4665A2; white-space: nowrap; font-size: 80%; } /* @end */ /* @group Member Details */ /* Styles for detailed member documentation */ .memtitle { padding: 8px; border-top: 1px solid #A8B8D9; border-left: 1px solid #A8B8D9; border-right: 1px solid #A8B8D9; border-top-right-radius: 4px; border-top-left-radius: 4px; margin-bottom: -1px; background-image: url('nav_f.png'); background-repeat: repeat-x; background-color: #E2E8F2; line-height: 1.25; font-weight: 300; float:left; } .permalink { font-size: 65%; display: inline-block; vertical-align: middle; } .memtemplate { font-size: 80%; color: #4665A2; font-weight: normal; margin-left: 9px; } .memnav { background-color: #EBEFF6; border: 1px solid #A3B4D7; text-align: center; margin: 2px; margin-right: 15px; padding: 2px; } .mempage { width: 100%; } .memitem { padding: 0; margin-bottom: 10px; margin-right: 5px; -webkit-transition: box-shadow 0.5s linear; -moz-transition: box-shadow 0.5s linear; -ms-transition: box-shadow 0.5s linear; -o-transition: box-shadow 0.5s linear; transition: box-shadow 0.5s linear; display: table !important; width: 100%; } .memitem.glow { box-shadow: 0 0 15px cyan; } .memname { font-weight: 400; margin-left: 6px; } .memname td { vertical-align: bottom; } .memproto, dl.reflist dt { border-top: 1px solid #A8B8D9; border-left: 1px solid #A8B8D9; border-right: 1px solid #A8B8D9; padding: 6px 0px 6px 0px; color: #253555; font-weight: bold; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); background-color: #DFE5F1; /* opera specific markup */ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); border-top-right-radius: 4px; /* firefox specific markup */ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; -moz-border-radius-topright: 4px; /* webkit specific markup */ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -webkit-border-top-right-radius: 4px; } .overload { font-family: "courier new",courier,monospace; font-size: 65%; } .memdoc, dl.reflist dd { border-bottom: 1px solid #A8B8D9; border-left: 1px solid #A8B8D9; border-right: 1px solid #A8B8D9; padding: 6px 10px 2px 10px; background-color: #FBFCFD; border-top-width: 0; background-image:url('nav_g.png'); background-repeat:repeat-x; background-color: #FFFFFF; /* opera specific markup */ border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); /* firefox specific markup */ -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; /* webkit specific markup */ -webkit-border-bottom-left-radius: 4px; -webkit-border-bottom-right-radius: 4px; -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); } dl.reflist dt { padding: 5px; } dl.reflist dd { margin: 0px 0px 10px 0px; padding: 5px; } .paramkey { text-align: right; } .paramtype { white-space: nowrap; } .paramname { color: #602020; white-space: nowrap; } .paramname em { font-style: normal; } .paramname code { line-height: 14px; } .params, .retval, .exception, .tparams { margin-left: 0px; padding-left: 0px; } .params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { font-weight: bold; vertical-align: top; } .params .paramtype, .tparams .paramtype { font-style: italic; vertical-align: top; } .params .paramdir, .tparams .paramdir { font-family: "courier new",courier,monospace; vertical-align: top; } table.mlabels { border-spacing: 0px; } td.mlabels-left { width: 100%; padding: 0px; } td.mlabels-right { vertical-align: bottom; padding: 0px; white-space: nowrap; } span.mlabels { margin-left: 8px; } span.mlabel { background-color: #728DC1; border-top:1px solid #5373B4; border-left:1px solid #5373B4; border-right:1px solid #C4CFE5; border-bottom:1px solid #C4CFE5; text-shadow: none; color: white; margin-right: 4px; padding: 2px 3px; border-radius: 3px; font-size: 7pt; white-space: nowrap; vertical-align: middle; } /* @end */ /* these are for tree view inside a (index) page */ div.directory { margin: 10px 0px; border-top: 1px solid #9CAFD4; border-bottom: 1px solid #9CAFD4; width: 100%; } .directory table { border-collapse:collapse; } .directory td { margin: 0px; padding: 0px; vertical-align: top; } .directory td.entry { white-space: nowrap; padding-right: 6px; padding-top: 3px; } .directory td.entry a { outline:none; } .directory td.entry a img { border: none; } .directory td.desc { width: 100%; padding-left: 6px; padding-right: 6px; padding-top: 3px; border-left: 1px solid rgba(0,0,0,0.05); } .directory tr.even { padding-left: 6px; background-color: #F7F8FB; } .directory img { vertical-align: -30%; } .directory .levels { white-space: nowrap; width: 100%; text-align: right; font-size: 9pt; } .directory .levels span { cursor: pointer; padding-left: 2px; padding-right: 2px; color: #3D578C; } .arrow { color: #9CAFD4; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; cursor: pointer; font-size: 80%; display: inline-block; width: 16px; height: 22px; } .icon { font-family: Arial, Helvetica; font-weight: bold; font-size: 12px; height: 14px; width: 16px; display: inline-block; background-color: #728DC1; color: white; text-align: center; border-radius: 4px; margin-left: 2px; margin-right: 2px; } .icona { width: 24px; height: 22px; display: inline-block; } .iconfopen { width: 24px; height: 18px; margin-bottom: 4px; background-image:url('folderopen.png'); background-position: 0px -4px; background-repeat: repeat-y; vertical-align:top; display: inline-block; } .iconfclosed { width: 24px; height: 18px; margin-bottom: 4px; background-image:url('folderclosed.png'); background-position: 0px -4px; background-repeat: repeat-y; vertical-align:top; display: inline-block; } .icondoc { width: 24px; height: 18px; margin-bottom: 4px; background-image:url('doc.png'); background-position: 0px -4px; background-repeat: repeat-y; vertical-align:top; display: inline-block; } table.directory { font: 400 14px Roboto,sans-serif; } /* @end */ div.dynheader { margin-top: 8px; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } address { font-style: normal; color: #2A3D61; } table.doxtable caption { caption-side: top; } table.doxtable { border-collapse:collapse; margin-top: 4px; margin-bottom: 4px; } table.doxtable td, table.doxtable th { border: 1px solid #2D4068; padding: 3px 7px 2px; } table.doxtable th { background-color: #374F7F; color: #FFFFFF; font-size: 110%; padding-bottom: 4px; padding-top: 5px; } table.fieldtable { /*width: 100%;*/ margin-bottom: 10px; border: 1px solid #A8B8D9; border-spacing: 0px; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); } .fieldtable td, .fieldtable th { padding: 3px 7px 2px; } .fieldtable td.fieldtype, .fieldtable td.fieldname { white-space: nowrap; border-right: 1px solid #A8B8D9; border-bottom: 1px solid #A8B8D9; vertical-align: top; } .fieldtable td.fieldname { padding-top: 3px; } .fieldtable td.fielddoc { border-bottom: 1px solid #A8B8D9; /*width: 100%;*/ } .fieldtable td.fielddoc p:first-child { margin-top: 0px; } .fieldtable td.fielddoc p:last-child { margin-bottom: 2px; } .fieldtable tr:last-child td { border-bottom: none; } .fieldtable th { background-image:url('nav_f.png'); background-repeat:repeat-x; background-color: #E2E8F2; font-size: 90%; color: #253555; padding-bottom: 4px; padding-top: 5px; text-align:left; font-weight: 400; -moz-border-radius-topleft: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-left-radius: 4px; -webkit-border-top-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom: 1px solid #A8B8D9; } .tabsearch { top: 0px; left: 10px; height: 36px; background-image: url('tab_b.png'); z-index: 101; overflow: hidden; font-size: 13px; } .navpath ul { font-size: 11px; background-image:url('tab_b.png'); background-repeat:repeat-x; background-position: 0 -5px; height:30px; line-height:30px; color:#8AA0CC; border:solid 1px #C2CDE4; overflow:hidden; margin:0px; padding:0px; } .navpath li { list-style-type:none; float:left; padding-left:10px; padding-right:15px; background-image:url('bc_s.png'); background-repeat:no-repeat; background-position:right; color:#364D7C; } .navpath li.navelem a { height:32px; display:block; text-decoration: none; outline: none; color: #283A5D; font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); text-decoration: none; } .navpath li.navelem a:hover { color:#6884BD; } .navpath li.footer { list-style-type:none; float:right; padding-left:10px; padding-right:15px; background-image:none; background-repeat:no-repeat; background-position:right; color:#364D7C; font-size: 8pt; } div.summary { float: right; font-size: 8pt; padding-right: 5px; width: 50%; text-align: right; } div.summary a { white-space: nowrap; } table.classindex { margin: 10px; white-space: nowrap; margin-left: 3%; margin-right: 3%; width: 94%; border: 0; border-spacing: 0; padding: 0; } div.ingroups { font-size: 8pt; width: 50%; text-align: left; } div.ingroups a { white-space: nowrap; } div.header { background-image:url('nav_h.png'); background-repeat:repeat-x; background-color: #F9FAFC; margin: 0px; border-bottom: 1px solid #C4CFE5; } div.headertitle { padding: 5px 5px 5px 10px; } .PageDocRTL-title div.headertitle { text-align: right; direction: rtl; } dl { padding: 0 0 0 0; } /* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ dl.section { margin-left: 0px; padding-left: 0px; } dl.section.DocNodeRTL { margin-right: 0px; padding-right: 0px; } dl.note { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #D0C000; } dl.note.DocNodeRTL { margin-left: 0; padding-left: 0; border-left: 0; margin-right: -7px; padding-right: 3px; border-right: 4px solid; border-color: #D0C000; } dl.warning, dl.attention { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #FF0000; } dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { margin-left: 0; padding-left: 0; border-left: 0; margin-right: -7px; padding-right: 3px; border-right: 4px solid; border-color: #FF0000; } dl.pre, dl.post, dl.invariant { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #00D000; } dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { margin-left: 0; padding-left: 0; border-left: 0; margin-right: -7px; padding-right: 3px; border-right: 4px solid; border-color: #00D000; } dl.deprecated { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #505050; } dl.deprecated.DocNodeRTL { margin-left: 0; padding-left: 0; border-left: 0; margin-right: -7px; padding-right: 3px; border-right: 4px solid; border-color: #505050; } dl.todo { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #00C0E0; } dl.todo.DocNodeRTL { margin-left: 0; padding-left: 0; border-left: 0; margin-right: -7px; padding-right: 3px; border-right: 4px solid; border-color: #00C0E0; } dl.test { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #3030E0; } dl.test.DocNodeRTL { margin-left: 0; padding-left: 0; border-left: 0; margin-right: -7px; padding-right: 3px; border-right: 4px solid; border-color: #3030E0; } dl.bug { margin-left: -7px; padding-left: 3px; border-left: 4px solid; border-color: #C08050; } dl.bug.DocNodeRTL { margin-left: 0; padding-left: 0; border-left: 0; margin-right: -7px; padding-right: 3px; border-right: 4px solid; border-color: #C08050; } dl.section dd { margin-bottom: 6px; } #projectrow { height: 56px; } #projectlogo { text-align: center; vertical-align: bottom; border-collapse: separate; } #projectlogo img { border: 0px none; } #projectalign { vertical-align: middle; padding-left: 0.5em; } #projectname { font: 200% Tahoma, Arial,sans-serif; margin: 0px; padding: 2px 0px; } #projectbrief { font: 90% Tahoma, Arial,sans-serif; margin: 0px; padding: 0px; } #projectnumber { font: 50% Tahoma, Arial,sans-serif; margin: 0px; padding: 0px; } #titlearea { padding: 0px; margin: 0px; width: 100%; border-bottom: 1px solid #5373B4; } .image { text-align: center; } .dotgraph { text-align: center; } .mscgraph { text-align: center; } .plantumlgraph { text-align: center; } .diagraph { text-align: center; } .caption { font-weight: bold; } div.zoom { border: 1px solid #90A5CE; } dl.citelist { margin-bottom:50px; } dl.citelist dt { color:#334975; float:left; font-weight:bold; margin-right:10px; padding:5px; text-align:right; width:52px; } dl.citelist dd { margin:2px 0 2px 72px; padding:5px 0; } div.toc { padding: 14px 25px; background-color: #F4F6FA; border: 1px solid #D8DFEE; border-radius: 7px 7px 7px 7px; float: right; height: auto; margin: 0 8px 10px 10px; width: 200px; } .PageDocRTL-title div.toc { float: left !important; text-align: right; } div.toc li { background: url("bdwn.png") no-repeat scroll 0 5px transparent; font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; margin-top: 5px; padding-left: 10px; padding-top: 2px; } .PageDocRTL-title div.toc li { background-position-x: right !important; padding-left: 0 !important; padding-right: 10px; } div.toc h3 { font: bold 12px/1.2 Arial,FreeSans,sans-serif; color: #4665A2; border-bottom: 0 none; margin: 0; } div.toc ul { list-style: none outside none; border: medium none; padding: 0px; } div.toc li.level1 { margin-left: 0px; } div.toc li.level2 { margin-left: 15px; } div.toc li.level3 { margin-left: 30px; } div.toc li.level4 { margin-left: 45px; } span.emoji { /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; */ } span.obfuscator { display: none; } .PageDocRTL-title div.toc li.level1 { margin-left: 0 !important; margin-right: 0; } .PageDocRTL-title div.toc li.level2 { margin-left: 0 !important; margin-right: 15px; } .PageDocRTL-title div.toc li.level3 { margin-left: 0 !important; margin-right: 30px; } .PageDocRTL-title div.toc li.level4 { margin-left: 0 !important; margin-right: 45px; } .inherit_header { font-weight: bold; color: gray; cursor: pointer; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .inherit_header td { padding: 6px 0px 2px 5px; } .inherit { display: none; } tr.heading h2 { margin-top: 12px; margin-bottom: 4px; } /* tooltip related style info */ .ttc { position: absolute; display: none; } #powerTip { cursor: default; /*white-space: nowrap;*/ background-color: white; border: 1px solid gray; border-radius: 4px 4px 4px 4px; box-shadow: 1px 1px 7px gray; display: none; font-size: smaller; max-width: 80%; opacity: 0.9; padding: 1ex 1em 1em; position: absolute; z-index: 2147483647; } #powerTip div.ttdoc { color: grey; font-style: italic; } #powerTip div.ttname a { font-weight: bold; } #powerTip div.ttname { font-weight: bold; } #powerTip div.ttdeci { color: #006318; } #powerTip div { margin: 0px; padding: 0px; font: 12px/16px Roboto,sans-serif; } #powerTip:before, #powerTip:after { content: ""; position: absolute; margin: 0px; } #powerTip.n:after, #powerTip.n:before, #powerTip.s:after, #powerTip.s:before, #powerTip.w:after, #powerTip.w:before, #powerTip.e:after, #powerTip.e:before, #powerTip.ne:after, #powerTip.ne:before, #powerTip.se:after, #powerTip.se:before, #powerTip.nw:after, #powerTip.nw:before, #powerTip.sw:after, #powerTip.sw:before { border: solid transparent; content: " "; height: 0; width: 0; position: absolute; } #powerTip.n:after, #powerTip.s:after, #powerTip.w:after, #powerTip.e:after, #powerTip.nw:after, #powerTip.ne:after, #powerTip.sw:after, #powerTip.se:after { border-color: rgba(255, 255, 255, 0); } #powerTip.n:before, #powerTip.s:before, #powerTip.w:before, #powerTip.e:before, #powerTip.nw:before, #powerTip.ne:before, #powerTip.sw:before, #powerTip.se:before { border-color: rgba(128, 128, 128, 0); } #powerTip.n:after, #powerTip.n:before, #powerTip.ne:after, #powerTip.ne:before, #powerTip.nw:after, #powerTip.nw:before { top: 100%; } #powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { border-top-color: #FFFFFF; border-width: 10px; margin: 0px -10px; } #powerTip.n:before { border-top-color: #808080; border-width: 11px; margin: 0px -11px; } #powerTip.n:after, #powerTip.n:before { left: 50%; } #powerTip.nw:after, #powerTip.nw:before { right: 14px; } #powerTip.ne:after, #powerTip.ne:before { left: 14px; } #powerTip.s:after, #powerTip.s:before, #powerTip.se:after, #powerTip.se:before, #powerTip.sw:after, #powerTip.sw:before { bottom: 100%; } #powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { border-bottom-color: #FFFFFF; border-width: 10px; margin: 0px -10px; } #powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { border-bottom-color: #808080; border-width: 11px; margin: 0px -11px; } #powerTip.s:after, #powerTip.s:before { left: 50%; } #powerTip.sw:after, #powerTip.sw:before { right: 14px; } #powerTip.se:after, #powerTip.se:before { left: 14px; } #powerTip.e:after, #powerTip.e:before { left: 100%; } #powerTip.e:after { border-left-color: #FFFFFF; border-width: 10px; top: 50%; margin-top: -10px; } #powerTip.e:before { border-left-color: #808080; border-width: 11px; top: 50%; margin-top: -11px; } #powerTip.w:after, #powerTip.w:before { right: 100%; } #powerTip.w:after { border-right-color: #FFFFFF; border-width: 10px; top: 50%; margin-top: -10px; } #powerTip.w:before { border-right-color: #808080; border-width: 11px; top: 50%; margin-top: -11px; } @media print { #top { display: none; } #side-nav { display: none; } #nav-path { display: none; } body { overflow:visible; } h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } .summary { display: none; } .memitem { page-break-inside: avoid; } #doc-content { margin-left:0 !important; height:auto !important; width:auto !important; overflow:inherit; display:inline; } } /* @group Markdown */ table.markdownTable { border-collapse:collapse; margin-top: 4px; margin-bottom: 4px; } table.markdownTable td, table.markdownTable th { border: 1px solid #2D4068; padding: 3px 7px 2px; } table.markdownTable tr { } th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { background-color: #374F7F; color: #FFFFFF; font-size: 110%; padding-bottom: 4px; padding-top: 5px; } th.markdownTableHeadLeft, td.markdownTableBodyLeft { text-align: left } th.markdownTableHeadRight, td.markdownTableBodyRight { text-align: right } th.markdownTableHeadCenter, td.markdownTableBodyCenter { text-align: center } .DocNodeRTL { text-align: right; direction: rtl; } .DocNodeLTR { text-align: left; direction: ltr; } table.DocNodeRTL { width: auto; margin-right: 0; margin-left: auto; } table.DocNodeLTR { width: auto; margin-right: auto; margin-left: 0; } code.JavaDocCode { direction:ltr; } tt, code, kbd, samp { display: inline-block; direction:ltr; } /* @end */ u { text-decoration: underline; } html/globals.html0000644000175000017500000002460014642372355013330 0ustar buildbuild libosmo-netif: Globals
    libosmo-netif 1.4.0
    Osmocom network interface library
    Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:

    - n -

    - o -

    html/structosmux__in__handle.html0000644000175000017500000002030714642372355016624 0ustar buildbuild libosmo-netif: osmux_in_handle Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmux_in_handle Struct Reference

    Data Fields

    uint8_t osmux_seq
     
    uint8_t batch_factor
     
    uint16_t batch_size
     
    struct {
       uint32_t   input_rtp_msgs
     
       uint32_t   output_osmux_msgs
     
       uint64_t   input_rtp_bytes
     
       uint64_t   output_osmux_bytes
     
    stats
     
    void(* deliver )(struct msgb *msg, void *data)
     
    void * data
     
    char * internal_data
     

    The documentation for this struct was generated from the following file:
    html/annotated_dup.js0000644000175000017500000000401614642372355014201 0ustar buildbuildvar annotated_dup = [ [ "amr_hdr", "structamr__hdr.html", null ], [ "amr_hdr_bwe", "structamr__hdr__bwe.html", null ], [ "baudrate2termbits", "structbaudrate2termbits.html", null ], [ "ipa_head", "structipa__head.html", null ], [ "ipa_head_ext", "structipa__head__ext.html", null ], [ "osmo_dgram", "structosmo__dgram.html", null ], [ "osmo_dgram_rx", "structosmo__dgram__rx.html", null ], [ "osmo_dgram_tx", "structosmo__dgram__tx.html", null ], [ "osmo_ipa_msgb_cb", "structosmo__ipa__msgb__cb.html", null ], [ "osmo_ipa_unit", "structosmo__ipa__unit.html", null ], [ "osmo_jibuf", "structosmo__jibuf.html", null ], [ "osmo_jibuf_msgb_cb", "structosmo__jibuf__msgb__cb.html", null ], [ "osmo_prim_pkt_hdr", "structosmo__prim__pkt__hdr.html", "structosmo__prim__pkt__hdr" ], [ "osmo_prim_srv", "structosmo__prim__srv.html", null ], [ "osmo_prim_srv_link", "structosmo__prim__srv__link.html", null ], [ "osmo_rs232", "structosmo__rs232.html", null ], [ "osmo_rtp_handle", "structosmo__rtp__handle.html", null ], [ "osmo_stream_cli", "structosmo__stream__cli.html", null ], [ "osmo_stream_srv", "structosmo__stream__srv.html", null ], [ "osmo_stream_srv_link", "structosmo__stream__srv__link.html", null ], [ "osmux_circuit", "structosmux__circuit.html", null ], [ "osmux_hdr", "structosmux__hdr.html", null ], [ "osmux_in_handle", "structosmux__in__handle.html", null ], [ "osmux_in_req", "structosmux__in__req.html", null ], [ "osmux_input_state", "structosmux__input__state.html", null ], [ "osmux_link", "structosmux__link.html", null ], [ "osmux_out_handle", "structosmux__out__handle.html", null ], [ "osmux_tx_handle", "structosmux__tx__handle.html", null ], [ "rtcp_hdr", "structrtcp__hdr.html", null ], [ "rtp_hdr", "structrtp__hdr.html", null ], [ "rtp_x_hdr", "structrtp__x__hdr.html", null ], [ "sap_ctl_hello_param", "structsap__ctl__hello__param.html", null ], [ "sap_ctl_prim", "structsap__ctl__prim.html", null ] ];html/datagram_8c.html0000644000175000017500000007724614642372355014075 0ustar buildbuild libosmo-netif: src/datagram.c File Reference
    libosmo-netif 1.4.0
    Osmocom network interface library

    Osmocom datagram socket helpers. More...

    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <string.h>
    #include <time.h>
    #include <sys/fcntl.h>
    #include <sys/socket.h>
    #include <sys/ioctl.h>
    #include <arpa/inet.h>
    #include <netinet/in.h>
    #include <osmocom/core/linuxlist.h>
    #include <osmocom/core/select.h>
    #include <osmocom/core/utils.h>
    #include <osmocom/gsm/tlv.h>
    #include <osmocom/core/msgb.h>
    #include <osmocom/core/logging.h>
    #include <osmocom/core/talloc.h>
    #include <osmocom/core/socket.h>
    #include <osmocom/netif/datagram.h>

    Data Structures

    struct  osmo_dgram_tx
     
    struct  osmo_dgram_rx
     
    struct  osmo_dgram
     

    Macros

    #define OSMO_DGRAM_CLI_F_RECONF   (1 << 0)
     
    #define OSMO_DGRAM_RX_F_RECONF   (1 << 0)
     

    Functions

    void osmo_dgram_tx_close (struct osmo_dgram_tx *conn)
     Close an Osmocom Datagram Transmitter. More...
     
    static int osmo_dgram_tx_write (struct osmo_dgram_tx *conn)
     
    static int osmo_dgram_tx_fd_cb (struct osmo_fd *ofd, unsigned int what)
     
    struct osmo_dgram_txosmo_dgram_tx_create (void *ctx)
     Create an Osmocom datagram transmitter. More...
     
    void osmo_dgram_tx_set_addr (struct osmo_dgram_tx *conn, const char *addr)
     Set the remote address to which we transmit. More...
     
    void osmo_dgram_tx_set_port (struct osmo_dgram_tx *conn, uint16_t port)
     Set the remote port to which we transmit. More...
     
    void osmo_dgram_tx_set_local_addr (struct osmo_dgram_tx *conn, const char *addr)
     Set the local address from which we transmit. More...
     
    void osmo_dgram_tx_set_local_port (struct osmo_dgram_tx *conn, uint16_t port)
     Set the local port from which we transmit. More...
     
    void osmo_dgram_tx_set_data (struct osmo_dgram_tx *conn, void *data)
     Set application private data of the datagram transmitter. More...
     
    void osmo_dgram_tx_destroy (struct osmo_dgram_tx *conn)
     Destroy a Osmocom datagram transmitter. More...
     
    int osmo_dgram_tx_open (struct osmo_dgram_tx *conn)
     Open connection of an Osmocom datagram transmitter. More...
     
    void osmo_dgram_tx_send (struct osmo_dgram_tx *conn, struct msgb *msg)
     Enqueue data to be sent via an Osmocom datagram transmitter. More...
     
    int osmo_dgram_rx_recv (struct osmo_dgram_rx *conn, struct msgb *msg)
     Receive data via Osmocom datagram receiver. More...
     
    static void osmo_dgram_rx_read (struct osmo_dgram_rx *conn)
     
    static int osmo_dgram_rx_cb (struct osmo_fd *ofd, unsigned int what)
     
    struct osmo_dgram_rxosmo_dgram_rx_create (void *ctx)
     Create an Osmocom datagram receiver. More...
     
    void osmo_dgram_rx_set_addr (struct osmo_dgram_rx *conn, const char *addr)
     Set the local address to which we bind. More...
     
    void osmo_dgram_rx_set_port (struct osmo_dgram_rx *conn, uint16_t port)
     Set the local port to which we bind. More...
     
    void osmo_dgram_rx_set_read_cb (struct osmo_dgram_rx *conn, int(*read_cb)(struct osmo_dgram_rx *conn))
     Set the read() call-back of the datagram receiver. More...
     
    void osmo_dgram_rx_destroy (struct osmo_dgram_rx *conn)
     Destroy the datagram receiver. Releases Memory. More...
     
    int osmo_dgram_rx_open (struct osmo_dgram_rx *conn)
     Open the datagram receiver. This actually initializes the underlying socket and binds it to the configured ip/port. More...
     
    void osmo_dgram_rx_close (struct osmo_dgram_rx *conn)
     Close the datagram receiver and unregister from select loop Does not destroy the datagram receiver, merely closes it! More...
     
    static int dgram_rx_cb (struct osmo_dgram_rx *rx)
     
    struct osmo_dgramosmo_dgram_create (void *ctx)
     Create an Osmocom datagram transceiver (bidirectional) More...
     
    void osmo_dgram_destroy (struct osmo_dgram *conn)
     Destroy a Osmocom datagram transceiver. More...
     
    void osmo_dgram_set_local_addr (struct osmo_dgram *conn, const char *addr)
     Set the local address to which we bind. More...
     
    void osmo_dgram_set_remote_addr (struct osmo_dgram *conn, const char *addr)
     Set the remote address to which we transmit/connect. More...
     
    void osmo_dgram_set_local_port (struct osmo_dgram *conn, uint16_t port)
     Set the local port to which we bind. More...
     
    void osmo_dgram_set_remote_port (struct osmo_dgram *conn, uint16_t port)
     Set the remote port to which we transmit. More...
     
    void osmo_dgram_set_read_cb (struct osmo_dgram *conn, int(*read_cb)(struct osmo_dgram *conn))
     Set the read() call-back of the datagram receiver. More...
     
    void osmo_dgram_set_data (struct osmo_dgram *conn, void *data)
     Set application private data of the datagram transmitter. More...
     
    void * osmo_dgram_get_data (struct osmo_dgram *conn)
     Get application private data of the datagram transceiver. More...
     
    int osmo_dgram_open (struct osmo_dgram *conn)
     Open the datagram transceiver. This actually initializes the underlying sockets and binds/connects them to the configured ips/ports. More...
     
    void osmo_dgram_close (struct osmo_dgram *conn)
     Close an Osmocom Datagram Transceiver. More...
     
    void osmo_dgram_send (struct osmo_dgram *conn, struct msgb *msg)
     Enqueue data to be sent via an Osmocom datagram transceiver. More...
     
    int osmo_dgram_recv (struct osmo_dgram *conn, struct msgb *msg)
     Receive data via Osmocom datagram transceiver. More...
     

    Detailed Description

    Osmocom datagram socket helpers.

    html/dir_15662fdf1b5c37dde6a3ed82e5410e57.html0000644000175000017500000001723714642372355017215 0ustar buildbuild libosmo-netif: include/osmocom/netif Directory Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    netif Directory Reference

    Files

    file  amr.h [code]
     
    file  datagram.h [code]
     
    file  ipa.h [code]
     
    file  ipa_unit.h [code]
     
    file  jibuf.h [code]
     Osmocom Jitter Buffer helpers.
     
    file  osmux.h [code]
     
    file  prim.h [code]
     
    file  rs232.h [code]
     
    file  rtp.h [code]
     
    file  sctp.h [code]
     
    file  stream.h [code]
     
    file  stream_private.h [code]
     
    html/doxygen.svg0000644000175000017500000003602614642372355013222 0ustar buildbuild html/sync_off.png0000644000175000017500000000152514642372355013334 0ustar buildbuild‰PNG  IHDRàw=øIDATxíÝKhTWÀñÿä1I&3™8M¦Iš™†I3Ú©b$cÌ I1V1±-(Tö±±Ð.* t!‚K[¥Ä¥ˆ„¨´f£`l(øl©"Y”¤6ÆgÌTú}·sgîܹ ±d{8?æ̹÷;çÜuíÚ`:!±F¬¢BäŠ?Å°Äm'yÊÅ>ÑlU¯½üý‰è_‹?€Œê ]€Y(ŠNñ±8fý1°Öqún-eâ¨øtºmâÈ Ó0}b›ù%·©µ×Œ®=Ÿ0´³?Š1sŸ‹0€¯8À‘;_ ‹W|%\ Zð— >舽ln¨p©.aÇ{ )t;Ú b nŸš¯›65°¢¡2çÅÔ?Žž>Oдàuönm¤¢Ì`×­Z¬WjC~>‘Ö¾0+á {{©fÝ×Mæ·æÅ•ìÙ¼˜` Ý›%uA6´½ÅÆö¨Á,]k¢ÄW¼™u±›]‹ˆ7§¯iòh€ ¶¶¬ÏÖu1 ló —Ҷ̺–:ÞÍ\ÄcãÏxøhR²Êè‡Qt$¿ß§¨ ª fdºü<4BÿÙ[•f¸d7=.Mé9/—éªÃëù/ÿO Üaàò}€,‘j?Ÿõ.5Úšm?œÿŸ®ŽXÿ2¬#¸d píæ(£?cÛú¼!½›a1¥Þ—ŽòØ©ܾ7dÔK:‚ùÒ‰ì)Ê3‚Ü™àÌà]€,±H€µ+køöäu<|`·LhC7¹ÔeÍ Ÿ×Ÿ˜tÜ‹ óH$^2%l.êaeÐäýE”ÌÉ|ÅÜìî‰Ýsä }¸ýDû^hzé~ðR›¦Ã¡¿]|#ü¯@×—Ö‡[k¹–<|š(Ç*€Ý¹dÇtMé:Ýñø«Ø,êÅû¢]”' øXÓ_nò¡Æ|Øý /c§fžâOIEND®B`‚html/stream__private_8h_source.html0000644000175000017500000002157414642372355017057 0ustar buildbuild libosmo-netif: include/osmocom/netif/stream_private.h Source File
    libosmo-netif 1.4.0
    Osmocom network interface library
    stream_private.h
    1#pragma once
    2
    3#include <stdbool.h>
    4#include <stdint.h>
    5
    6#include <osmocom/core/socket.h>
    7
    8#include "config.h"
    9
    10#ifdef HAVE_LIBSCTP
    11#include <netinet/sctp.h>
    12 #define OSMO_STREAM_MAX_ADDRS OSMO_SOCK_MAX_ADDRS
    13 /*
    14 * Platforms that don't have MSG_NOSIGNAL (which disables SIGPIPE)
    15 * usually have SO_NOSIGPIPE (set via setsockopt).
    16 */
    17 #ifndef MSG_NOSIGNAL
    18 #define MSG_NOSIGNAL 0
    19 #endif
    20#else
    21 #define OSMO_STREAM_MAX_ADDRS 1
    22#endif
    23
    28enum osmo_stream_mode {
    29 OSMO_STREAM_MODE_UNKNOWN,
    30 OSMO_STREAM_MODE_OSMO_FD,
    31 OSMO_STREAM_MODE_OSMO_IO,
    32};
    33
    34int stream_sctp_sock_activate_events(int fd);
    35int stream_setsockopt_nodelay(int fd, int proto, int on);
    36int stream_sctp_recvmsg_wrapper(int fd, struct msgb *msg, const char *log_pfx);
    37
    html/tab_h.png0000644000175000017500000000026114642372355012577 0ustar buildbuild‰PNG  IHDR$ÇÇ[xIDATxíÝMÁ@†áž~¥ÜÆÎ’Evˆ¿"!•²‘d*×rGq=Š{¼ßSݧçë­ÓÉHÇ uO^õø[À_‡¢ãXvyËþÒ±=·VCffææ{°öŠó´Rçœ%_õçÿŽ¢ö·°Çrug¶(?gh\i>|sIEND®B`‚html/group__datagram.js0000644000175000017500000000631514642372355014513 0ustar buildbuildvar group__datagram = [ [ "datagram.c", "datagram_8c.html", null ], [ "osmo_dgram_tx", "structosmo__dgram__tx.html", null ], [ "osmo_dgram_rx", "structosmo__dgram__rx.html", null ], [ "osmo_dgram", "structosmo__dgram.html", null ], [ "osmo_dgram_close", "group__datagram.html#ga46db4acbfc35668e35601338d64364ed", null ], [ "osmo_dgram_create", "group__datagram.html#ga56ee60c89f1a3bc975ab0ede5b71ff15", null ], [ "osmo_dgram_destroy", "group__datagram.html#ga01fb36f8c19b2b64705d8263f7f53f59", null ], [ "osmo_dgram_get_data", "group__datagram.html#ga36d7e1f26af3308b51f95e06d1c742d7", null ], [ "osmo_dgram_open", "group__datagram.html#gac65de108c52dba83b178d6453e9fb545", null ], [ "osmo_dgram_recv", "group__datagram.html#gaae58d13a6fd634ebfddd486d0d428c5e", null ], [ "osmo_dgram_rx_close", "group__datagram.html#ga01efa7269834a745d80910a64c6f61c0", null ], [ "osmo_dgram_rx_create", "group__datagram.html#gad7af9f04fe4847b0e2eefe35fa05a8b8", null ], [ "osmo_dgram_rx_destroy", "group__datagram.html#ga6e4b92b9c7f210d1cb3782425d0bdac0", null ], [ "osmo_dgram_rx_open", "group__datagram.html#gaf558e9c2f02216ed95db039ddaf31050", null ], [ "osmo_dgram_rx_recv", "group__datagram.html#ga16d69e998c663cdec0b76560a2d8cfb9", null ], [ "osmo_dgram_rx_set_addr", "group__datagram.html#gad378ba5cc66ee0c27a277906d8434e31", null ], [ "osmo_dgram_rx_set_port", "group__datagram.html#gafbd947def18d8e34062876433ac05e91", null ], [ "osmo_dgram_rx_set_read_cb", "group__datagram.html#ga5a0f7221b8583aac5153f167c4e2177d", null ], [ "osmo_dgram_send", "group__datagram.html#ga66d6c9d5f0243a4f7ed458c62d8e20dd", null ], [ "osmo_dgram_set_data", "group__datagram.html#gaa6a5fbd5f227d15cefe6b234fefb3b4d", null ], [ "osmo_dgram_set_local_addr", "group__datagram.html#gaf21d974e14fa22f910313b240d31d40f", null ], [ "osmo_dgram_set_local_port", "group__datagram.html#ga9180ae9a36a9927d4bdb49cdc5708b1f", null ], [ "osmo_dgram_set_read_cb", "group__datagram.html#ga6b6ef2f02e3d260f1e84a2ecf8c67b5a", null ], [ "osmo_dgram_set_remote_addr", "group__datagram.html#ga6677ee8d976d2e1bed8e0c01e103c18f", null ], [ "osmo_dgram_set_remote_port", "group__datagram.html#ga27bf4c1d8e4c30ef7b4ec49665d6fc90", null ], [ "osmo_dgram_tx_close", "group__datagram.html#ga0eb580467681e8fa91be35a83a74f132", null ], [ "osmo_dgram_tx_create", "group__datagram.html#gadeaa837f3df8382bd7a50e668b9d3a61", null ], [ "osmo_dgram_tx_destroy", "group__datagram.html#gaad6f9ca0688cd4a8a95ec6002f52ded5", null ], [ "osmo_dgram_tx_open", "group__datagram.html#ga8d712623df3862e55ad248dc5ecd626c", null ], [ "osmo_dgram_tx_send", "group__datagram.html#gad4638b9943090f5bf1a7b75fa8efde46", null ], [ "osmo_dgram_tx_set_addr", "group__datagram.html#ga94fe94f64f1285715db36eb1f2e9deaa", null ], [ "osmo_dgram_tx_set_data", "group__datagram.html#ga095ce94e65f1607026c37c12e6f5e9c0", null ], [ "osmo_dgram_tx_set_local_addr", "group__datagram.html#ga6c843f43db5439f8f0ba38f72dbb1a20", null ], [ "osmo_dgram_tx_set_local_port", "group__datagram.html#gae2962232548d41621520c6c71da423a5", null ], [ "osmo_dgram_tx_set_port", "group__datagram.html#ga48d7e39656886b52aa176fc1b14c84cf", null ] ];html/folderopen.png0000644000175000017500000000112514642372355013657 0ustar buildbuild‰PNG  IHDRÚ}\ˆIDATxí]?oÓPÿ9iš4i°;ii“¶‰ZŠ‰‘‰ÀÀ7`bèÔÙ¬Øù,HìU'ô$*Tµ]‚T¡DPÚÄ6wÏ}‰;¡C; a¿ÓߟûÝïîž¼jAÀ­InSþ}€9H“ÓŽ|?íÁ÷ =_ÊÆŠ­†¥Àue*;¯YEäsYäæB¢Ÿ¿þÄ—£sÙ½½ÙŒ† É«›©ÀYÇq !GÇ¿v̇¹ÑØ®š °Œ‚ÔF¹}q¥b]÷7í·0)Úd›¾ÿð-èº}Pfä£ÖY{4™ÑÂ@}úæôñ2ÛüÔ—ñúåNŒI‚ÁǃcçÁº%£¬UŠ°I³mc±ô˜å¼ÔÆüÈ>é¸xþt9Æ$µý OæVE*õU´Ì‚ç#ž×ˆ•ïûr@l$øPÿrHaaÇ¥ ²›dZ®rè‘ãqI„o¼øT\Ž,tªj2FAxv-LŸp׌p TÄI/ \¥sfí½; jViTƒèú¤o^cpÅü¼ûû»Ïb]”€¢¤<†aþÕœ²“ßÓ˜y“£§9:Œîù+À³€ñà,E žf³6éNˆÄE£KU}Ü^;¶ØnZ¢uß­US4— ѬëbížN¶.Úk¦ØjTÄöº%µªâ i¯VÄÊÝò§™ Èù¸)ùÿG€™òºJ@T x”IEND®B`‚html/osmux_8h.html0000644000175000017500000006060314642372355013462 0ustar buildbuild libosmo-netif: include/osmocom/netif/osmux.h File Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    #include <osmocom/core/endian.h>
    #include <osmocom/core/timer.h>
    #include <osmocom/core/msgb.h>

    Go to the source code of this file.

    Data Structures

    struct  osmux_hdr
     
    struct  osmux_in_handle
     
    struct  osmux_out_handle
     

    Macros

    #define OSMUX_DEFAULT_PORT   1984
     
    #define OSMUX_FT_SIGNAL   0
     
    #define OSMUX_FT_VOICE_AMR   1
     
    #define OSMUX_FT_DUMMY   2
     
    #define OSMUX_CID_MAX   255 /* determined by circuit_id */
     
    #define OSMUX_MAX_CONCURRENT_CALLS   8
     
    #define OSMUX_BATCH_DEFAULT_MAX   1472
     

    Typedefs

    typedef struct msgb *(* rtp_msgb_alloc_cb_t) (void *rtp_msgb_alloc_priv_data, unsigned int msg_len)
     

    Functions

    struct osmux_hdr __attribute__ ((packed))
     
    static uint8_t * osmux_get_payload (struct osmux_hdr *osmuxh)
     
    int osmux_snprintf (char *buf, size_t size, struct msgb *msg)
     
    struct osmux_in_handleosmux_xfrm_input_alloc (void *ctx)
     
    void osmux_xfrm_input_init (struct osmux_in_handle *h) OSMO_DEPRECATED("Use osmux_xfrm_input_alloc() instead")
     
    void osmux_xfrm_input_fini (struct osmux_in_handle *h) OSMO_DEPRECATED("Use talloc_free() instead")
     
    void osmux_xfrm_input_set_name (struct osmux_in_handle *h, const char *name)
     
    int osmux_xfrm_input_set_batch_factor (struct osmux_in_handle *h, uint8_t batch_factor)
     
    void osmux_xfrm_input_set_batch_size (struct osmux_in_handle *h, uint16_t batch_size)
     
    void osmux_xfrm_input_set_initial_seqnum (struct osmux_in_handle *h, uint8_t osmux_seqnum)
     
    void osmux_xfrm_input_set_deliver_cb (struct osmux_in_handle *h, void(*deliver_cb)(struct msgb *msg, void *data), void *data)
     
    void * osmux_xfrm_input_get_deliver_cb_data (struct osmux_in_handle *h)
     
    int osmux_xfrm_input_open_circuit (struct osmux_in_handle *h, int ccid, int dummy)
     
    void osmux_xfrm_input_close_circuit (struct osmux_in_handle *h, int ccid)
     
    int osmux_xfrm_input (struct osmux_in_handle *h, struct msgb *msg, int ccid)
     
    void osmux_xfrm_input_deliver (struct osmux_in_handle *h)
     
    struct osmux_out_handleosmux_xfrm_output_alloc (void *ctx)
     Allocate a new osmux out handle. More...
     
    void osmux_xfrm_output_init (struct osmux_out_handle *h, uint32_t rtp_ssrc) OSMO_DEPRECATED("Use osmux_xfrm_output_alloc() and osmux_xfrm_output_set_rtp_*() instead")
     
    void osmux_xfrm_output_init2 (struct osmux_out_handle *h, uint32_t rtp_ssrc, uint8_t rtp_payload_type) OSMO_DEPRECATED("Use osmux_xfrm_output_alloc() and osmux_xfrm_output_set_rtp_*() instead")
     
    void osmux_xfrm_output_set_rtp_ssrc (struct osmux_out_handle *h, uint32_t rtp_ssrc)
     Set SSRC of generated RTP packets from Osmux frames. More...
     
    void osmux_xfrm_output_set_rtp_pl_type (struct osmux_out_handle *h, uint32_t rtp_payload_type)
     Set Payload Type of generated RTP packets from Osmux frames. More...
     
    void osmux_xfrm_output_set_tx_cb (struct osmux_out_handle *h, void(*tx_cb)(struct msgb *msg, void *data), void *data)
     Set transmission callback to call when a generated RTP packet is to be transmitted. More...
     
    void osmux_xfrm_output_set_rtp_msgb_alloc_cb (struct osmux_out_handle *h, rtp_msgb_alloc_cb_t cb, void *cb_data)
     Set callback to call when an RTP packet to be generated is to be allocated. More...
     
    int osmux_xfrm_output_sched (struct osmux_out_handle *h, struct osmux_hdr *osmuxh)
     Generate RTP packets from osmux frame AMR payload set and schedule them for transmission at appropriate time. More...
     
    void osmux_xfrm_output_flush (struct osmux_out_handle *h)
     Flush all scheduled RTP packets still pending to be transmitted. More...
     
    struct osmux_hdrosmux_xfrm_output_pull (struct msgb *msg)
     

    Variables

    uint8_t seq
     
    uint8_t circuit_id
     
    uint8_t data [0]
     
    struct osmux_in_handle __attribute__
     

    Detailed Description

    Osmocom multiplex protocol helpers

    html/jibuf_8h_source.html0000644000175000017500000004213414642372355014765 0ustar buildbuild libosmo-netif: include/osmocom/netif/jibuf.h Source File
    libosmo-netif 1.4.0
    Osmocom network interface library
    jibuf.h
    Go to the documentation of this file.
    1#pragma once
    2
    3#include <stdint.h>
    4#include <stdbool.h>
    5#include <time.h>
    6
    7#include <osmocom/core/timer.h>
    8
    17typedef void (*osmo_jibuf_dequeue_cb)(struct msgb *msg, void *data);
    18
    20struct osmo_jibuf {
    21 void *talloc_ctx;
    22 bool started;
    23 struct osmo_timer_list timer;
    24 struct llist_head msg_list; /* sorted by output ts */
    25 uint32_t min_delay; /* in msec */
    26 uint32_t max_delay; /* in msec */
    27 uint32_t threshold_delay; /* in msec */
    28
    29 osmo_jibuf_dequeue_cb dequeue_cb;
    30 void *dequeue_cb_data;
    31
    32 /* number of pkt drops since we last changed the buffer size */
    33 uint32_t last_dropped;
    34 uint32_t consecutive_drops;
    35
    36 uint32_t ref_rx_ts;
    37 uint32_t ref_tx_ts;
    38 uint16_t ref_tx_seq;
    39
    40 struct timeval last_enqueue_time;
    41 struct timeval next_dequeue_time;
    42
    43 bool skew_enabled;
    44 int32_t skew_us; /* src clock skew, in usec */
    45
    46 struct {
    47 uint32_t total_enqueued;
    48 uint64_t total_dropped;
    49 } stats;
    50};
    51
    52
    53struct osmo_jibuf *osmo_jibuf_alloc(void *talloc_ctx);
    54
    55void osmo_jibuf_delete(struct osmo_jibuf *jb);
    56
    57int osmo_jibuf_enqueue(struct osmo_jibuf *jb, struct msgb *msg);
    58
    59bool osmo_jibuf_empty(struct osmo_jibuf *jb);
    60
    61void osmo_jibuf_set_min_delay(struct osmo_jibuf *jb, uint32_t min_delay);
    62void osmo_jibuf_set_max_delay(struct osmo_jibuf *jb, uint32_t max_delay);
    63
    64void osmo_jibuf_enable_skew_compensation(struct osmo_jibuf *jb, bool enable);
    65
    66void osmo_jibuf_set_dequeue_cb(struct osmo_jibuf *jb, osmo_jibuf_dequeue_cb dequeue_cb, void* cb_data);
    67
    void osmo_jibuf_enable_skew_compensation(struct osmo_jibuf *jb, bool enable)
    Toggle use of skew detection and compensation mechanism.
    Definition: jibuf.c:449
    struct osmo_jibuf * osmo_jibuf_alloc(void *talloc_ctx)
    Allocate a new jitter buffer instance.
    Definition: jibuf.c:298
    void osmo_jibuf_set_dequeue_cb(struct osmo_jibuf *jb, osmo_jibuf_dequeue_cb dequeue_cb, void *cb_data)
    Set dequeue callback for the jitter buffer.
    Definition: jibuf.c:460
    int osmo_jibuf_enqueue(struct osmo_jibuf *jb, struct msgb *msg)
    Try to enqueue a packet into the jitter buffer.
    Definition: jibuf.c:342
    void osmo_jibuf_set_max_delay(struct osmo_jibuf *jb, uint32_t max_delay)
    Set maximum buffer size for the jitter buffer.
    Definition: jibuf.c:437
    void osmo_jibuf_set_min_delay(struct osmo_jibuf *jb, uint32_t min_delay)
    Set minimum buffer size for the jitter buffer.
    Definition: jibuf.c:427
    void osmo_jibuf_delete(struct osmo_jibuf *jb)
    Destroy a previously allocated jitter buffer instance.
    Definition: jibuf.c:320
    bool osmo_jibuf_empty(struct osmo_jibuf *jb)
    Check whether the jitter buffer instance has packets queued or not.
    Definition: jibuf.c:418
    A structure representing a single instance of a jitter buffer.
    Definition: jibuf.h:20
    html/structosmux__in__req.html0000644000175000017500000001547114642372355016166 0ustar buildbuild libosmo-netif: osmux_in_req Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmux_in_req Struct Reference

    Data Fields

    struct osmux_circuitcircuit
     
    struct msgb * msg
     
    struct rtp_hdrrtph
     
    uint32_t rtp_payload_len
     
    struct amr_hdramrh
     
    int amr_payload_len
     

    The documentation for this struct was generated from the following file:
    html/navtreedata.js0000644000175000017500000000407714642372355013661 0ustar buildbuild/* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ var NAVTREE = [ [ "libosmo-netif", "index.html", [ [ "Modules", "modules.html", "modules" ], [ "Data Structures", "annotated.html", [ [ "Data Structures", "annotated.html", "annotated_dup" ], [ "Data Fields", "functions.html", [ [ "All", "functions.html", null ], [ "Variables", "functions_vars.html", null ] ] ] ] ], [ "Files", "files.html", [ [ "File List", "files.html", "files_dup" ], [ "Globals", "globals.html", [ [ "All", "globals.html", null ], [ "Functions", "globals_func.html", null ], [ "Variables", "globals_vars.html", null ] ] ] ] ] ] ] ]; var NAVTREEINDEX = [ "amr_8h_source.html" ]; var SYNCONMSG = 'click to disable panel synchronisation'; var SYNCOFFMSG = 'click to enable panel synchronisation';html/nav_h.png0000644000175000017500000000014214642372355012613 0ustar buildbuild‰PNG  IHDR ,é@)IDATxíÝA @BQ­³šÛ›Ð¢Žáà) )ëý éaÅèÜ¿Æo‡RlÐßIEND®B`‚html/structrtp__x__hdr.html0000644000175000017500000001202214642372355015434 0ustar buildbuild libosmo-netif: rtp_x_hdr Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    rtp_x_hdr Struct Reference

    Data Fields

    uint16_t by_profile
     
    uint16_t length
     

    The documentation for this struct was generated from the following file:
    • include/osmocom/netif/rtp.h
    html/dir_abe9b486a10ccc5afdf8abc29637e0c1.js0000644000175000017500000000022414642372355017136 0ustar buildbuildvar dir_abe9b486a10ccc5afdf8abc29637e0c1 = [ [ "netif", "dir_15662fdf1b5c37dde6a3ed82e5410e57.html", "dir_15662fdf1b5c37dde6a3ed82e5410e57" ] ];html/rs232_8h_source.html0000644000175000017500000002114714642372355014542 0ustar buildbuild libosmo-netif: include/osmocom/netif/rs232.h Source File
    libosmo-netif 1.4.0
    Osmocom network interface library
    rs232.h
    1#ifndef _OSMO_RS232_H_
    2#define _OSMO_RS232_H_
    3
    4struct osmo_rs232;
    5
    6struct osmo_rs232 *osmo_rs232_create(void *ctx);
    7
    8void osmo_rs232_set_serial_port(struct osmo_rs232 *, const char *serial_port);
    9void osmo_rs232_set_delay_us(struct osmo_rs232 *, int delay_us);
    10void osmo_rs232_set_baudrate(struct osmo_rs232 *, int baudrate);
    11void osmo_rs232_set_read_cb(struct osmo_rs232 *r, int (*read_cb)(struct osmo_rs232 *r));
    12
    13int osmo_rs232_open(struct osmo_rs232 *r);
    14
    15int osmo_rs232_read(struct osmo_rs232 *r, struct msgb *msg);
    16int osmo_rs232_write(struct osmo_rs232 *r, struct msgb *msg);
    17
    18void osmo_rs232_close(struct osmo_rs232 *r);
    19void osmo_rs232_destroy(struct osmo_rs232 *r);
    20
    21#endif /* _OSMO_RS232_H_ */
    Definition: rs232.c:42
    html/rtp_8h_source.html0000644000175000017500000004433314642372355014476 0ustar buildbuild libosmo-netif: include/osmocom/netif/rtp.h Source File
    libosmo-netif 1.4.0
    Osmocom network interface library
    rtp.h
    1#ifndef _OSMO_RTP_H_
    2#define _OSMO_RTP_H_
    3
    4#include <osmocom/core/endian.h>
    5
    6/* RTP header as defined by RFC 3550 */
    7struct rtp_hdr {
    8#if OSMO_IS_LITTLE_ENDIAN
    9 uint8_t csrc_count:4,
    10 extension:1,
    11 padding:1,
    12 version:2;
    13 uint8_t payload_type:7,
    14 marker:1;
    15#elif OSMO_IS_BIG_ENDIAN
    16/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianness.py) */
    17 uint8_t version:2, padding:1, extension:1, csrc_count:4;
    18 uint8_t marker:1, payload_type:7;
    19#endif
    20 uint16_t sequence;
    21 uint32_t timestamp;
    22 uint32_t ssrc;
    23 uint8_t data[0];
    24} __attribute__((packed));
    25
    26#define RTP_VERSION 2
    27
    28/* 5.3.1 RTP Header Extension
    29 *
    30 * If the X bit in the RTP header is one, a variable-length header
    31 * extension MUST be appended to the RTP header, following the CSRC list
    32 * if present. The header extension contains a 16-bit length field that
    33 * counts the number of 32-bit words in the extension, excluding the
    34 * four-octet extension header (therefore zero is a valid length). Only
    35 * a single extension can be appended to the RTP data header.
    36 */
    37struct rtp_x_hdr {
    38 uint16_t by_profile;
    39 uint16_t length;
    40} __attribute__((packed));
    41
    42/* RTPC header. */
    43struct rtcp_hdr {
    44 uint8_t byte0;
    45 uint8_t type;
    46 uint16_t length;
    47} __attribute__((packed));
    48
    49/* XXX: RFC specifies that MTU should used, add generic function to obtain
    50 existing MTU. */
    51#define RTP_MSGB_SIZE 1500
    52
    53
    54struct msgb;
    55
    56struct osmo_rtp_handle *osmo_rtp_handle_create(void *ctx);
    57void osmo_rtp_handle_free(struct osmo_rtp_handle *h);
    58
    59int osmo_rtp_handle_tx_set_sequence(struct osmo_rtp_handle *h, uint16_t seq);
    60int osmo_rtp_handle_tx_set_ssrc(struct osmo_rtp_handle *h, uint32_t ssrc);
    61int osmo_rtp_handle_tx_set_timestamp(struct osmo_rtp_handle *h, uint32_t timestamp);
    62
    63struct rtp_hdr *osmo_rtp_get_hdr(struct msgb *msg);
    64void *osmo_rtp_get_payload(struct rtp_hdr *rtph, struct msgb *msg, uint32_t *plen);
    65
    66struct msgb *osmo_rtp_build(struct osmo_rtp_handle *h, uint8_t payload_type, uint32_t payload_len, const void *data, uint32_t duration);
    67
    68int osmo_rtp_snprintf(char *buf, size_t size, struct msgb *msg);
    69
    70/* supported RTP payload types. */
    71#define RTP_PT_RTCP 72 /* RFC 3551: 72-76 for RTCP */
    72
    73#define RTP_PT_GSM_FULL 3
    74#define RTP_PT_GSM_FULL_PAYLOAD_LEN 33
    75#define RTP_PT_GSM_FULL_DURATION 160 /* in samples. */
    76
    77#define RTP_PT_GSM_HALF 96
    78
    79#define RTP_PT_GSM_EFR 97
    80#define RTP_PT_GSM_EFR_PAYLOAD_LEN 31
    81#define RTP_PT_GSM_EFR_DURATION 160 /* in samples. */
    82
    83#define RTP_PT_AMR 98
    84
    85#define RTP_PT_CSDATA 120 /* 3GPP TS 48.103 table 5.4.2.2.1 */
    86
    87#endif
    Definition: rtp.c:37
    Definition: rtp.h:43
    Definition: rtp.h:7
    Definition: rtp.h:37
    html/structsap__ctl__prim.html0000644000175000017500000001332414642372355016125 0ustar buildbuild libosmo-netif: sap_ctl_prim Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    sap_ctl_prim Struct Reference

    Data Fields

    struct osmo_prim_hdr hdr
     
    union {
       struct sap_ctl_hello_param   hello_req
     
       struct sap_ctl_hello_param   hello_cnf
     
    u
     

    The documentation for this struct was generated from the following file:
    • src/prim.c
    html/menudata.js0000644000175000017500000000375414642372355013162 0ustar buildbuild/* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ var menudata={children:[ {text:"Main Page",url:"index.html"}, {text:"Modules",url:"modules.html"}, {text:"Data Structures",url:"annotated.html",children:[ {text:"Data Structures",url:"annotated.html"}, {text:"Data Fields",url:"functions.html",children:[ {text:"All",url:"functions.html"}, {text:"Variables",url:"functions_vars.html"}]}]}, {text:"Files",url:"files.html",children:[ {text:"File List",url:"files.html"}, {text:"Globals",url:"globals.html",children:[ {text:"All",url:"globals.html",children:[ {text:"n",url:"globals.html#index_n"}, {text:"o",url:"globals.html#index_o"}]}, {text:"Functions",url:"globals_func.html",children:[ {text:"o",url:"globals_func.html#index_o"}]}, {text:"Variables",url:"globals_vars.html"}]}]}]} html/navtree.js0000644000175000017500000003653514642372355013033 0ustar buildbuild/* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ var navTreeSubIndices = new Array(); var arrowDown = '▼'; var arrowRight = '►'; function getData(varName) { var i = varName.lastIndexOf('/'); var n = i>=0 ? varName.substring(i+1) : varName; return eval(n.replace(/\-/g,'_')); } function stripPath(uri) { return uri.substring(uri.lastIndexOf('/')+1); } function stripPath2(uri) { var i = uri.lastIndexOf('/'); var s = uri.substring(i+1); var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); return m ? uri.substring(i-6) : s; } function hashValue() { return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,''); } function hashUrl() { return '#'+hashValue(); } function pathName() { return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, ''); } function localStorageSupported() { try { return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem; } catch(e) { return false; } } function storeLink(link) { if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { window.localStorage.setItem('navpath',link); } } function deleteLink() { if (localStorageSupported()) { window.localStorage.setItem('navpath',''); } } function cachedLink() { if (localStorageSupported()) { return window.localStorage.getItem('navpath'); } else { return ''; } } function getScript(scriptName,func,show) { var head = document.getElementsByTagName("head")[0]; var script = document.createElement('script'); script.id = scriptName; script.type = 'text/javascript'; script.onload = func; script.src = scriptName+'.js'; head.appendChild(script); } function createIndent(o,domNode,node,level) { var level=-1; var n = node; while (n.parentNode) { level++; n=n.parentNode; } if (node.childrenData) { var imgNode = document.createElement("span"); imgNode.className = 'arrow'; imgNode.style.paddingLeft=(16*level).toString()+'px'; imgNode.innerHTML=arrowRight; node.plus_img = imgNode; node.expandToggle = document.createElement("a"); node.expandToggle.href = "javascript:void(0)"; node.expandToggle.onclick = function() { if (node.expanded) { $(node.getChildrenUL()).slideUp("fast"); node.plus_img.innerHTML=arrowRight; node.expanded = false; } else { expandNode(o, node, false, false); } } node.expandToggle.appendChild(imgNode); domNode.appendChild(node.expandToggle); } else { var span = document.createElement("span"); span.className = 'arrow'; span.style.width = 16*(level+1)+'px'; span.innerHTML = ' '; domNode.appendChild(span); } } var animationInProgress = false; function gotoAnchor(anchor,aname,updateLocation) { var pos, docContent = $('#doc-content'); var ancParent = $(anchor.parent()); if (ancParent.hasClass('memItemLeft') || ancParent.hasClass('memtitle') || ancParent.hasClass('fieldname') || ancParent.hasClass('fieldtype') || ancParent.is(':header')) { pos = ancParent.position().top; } else if (anchor.position()) { pos = anchor.position().top; } if (pos) { var dist = Math.abs(Math.min( pos-docContent.offset().top, docContent[0].scrollHeight- docContent.height()-docContent.scrollTop())); animationInProgress=true; docContent.animate({ scrollTop: pos + docContent.scrollTop() - docContent.offset().top },Math.max(50,Math.min(500,dist)),function(){ if (updateLocation) window.location.href=aname; animationInProgress=false; }); } } function newNode(o, po, text, link, childrenData, lastNode) { var node = new Object(); node.children = Array(); node.childrenData = childrenData; node.depth = po.depth + 1; node.relpath = po.relpath; node.isLast = lastNode; node.li = document.createElement("li"); po.getChildrenUL().appendChild(node.li); node.parentNode = po; node.itemDiv = document.createElement("div"); node.itemDiv.className = "item"; node.labelSpan = document.createElement("span"); node.labelSpan.className = "label"; createIndent(o,node.itemDiv,node,0); node.itemDiv.appendChild(node.labelSpan); node.li.appendChild(node.itemDiv); var a = document.createElement("a"); node.labelSpan.appendChild(a); node.label = document.createTextNode(text); node.expanded = false; a.appendChild(node.label); if (link) { var url; if (link.substring(0,1)=='^') { url = link.substring(1); link = url; } else { url = node.relpath+link; } a.className = stripPath(link.replace('#',':')); if (link.indexOf('#')!=-1) { var aname = '#'+link.split('#')[1]; var srcPage = stripPath(pathName()); var targetPage = stripPath(link.split('#')[0]); a.href = srcPage!=targetPage ? url : "javascript:void(0)"; a.onclick = function(){ storeLink(link); if (!$(a).parent().parent().hasClass('selected')) { $('.item').removeClass('selected'); $('.item').removeAttr('id'); $(a).parent().parent().addClass('selected'); $(a).parent().parent().attr('id','selected'); } var anchor = $(aname); gotoAnchor(anchor,aname,true); }; } else { a.href = url; a.onclick = function() { storeLink(link); } } } else { if (childrenData != null) { a.className = "nolink"; a.href = "javascript:void(0)"; a.onclick = node.expandToggle.onclick; } } node.childrenUL = null; node.getChildrenUL = function() { if (!node.childrenUL) { node.childrenUL = document.createElement("ul"); node.childrenUL.className = "children_ul"; node.childrenUL.style.display = "none"; node.li.appendChild(node.childrenUL); } return node.childrenUL; }; return node; } function showRoot() { var headerHeight = $("#top").height(); var footerHeight = $("#nav-path").height(); var windowHeight = $(window).height() - headerHeight - footerHeight; (function (){ // retry until we can scroll to the selected item try { var navtree=$('#nav-tree'); navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); } catch (err) { setTimeout(arguments.callee, 0); } })(); } function expandNode(o, node, imm, showRoot) { if (node.childrenData && !node.expanded) { if (typeof(node.childrenData)==='string') { var varName = node.childrenData; getScript(node.relpath+varName,function(){ node.childrenData = getData(varName); expandNode(o, node, imm, showRoot); }, showRoot); } else { if (!node.childrenVisited) { getNode(o, node); } $(node.getChildrenUL()).slideDown("fast"); node.plus_img.innerHTML = arrowDown; node.expanded = true; } } } function glowEffect(n,duration) { n.addClass('glow').delay(duration).queue(function(next){ $(this).removeClass('glow');next(); }); } function highlightAnchor() { var aname = hashUrl(); var anchor = $(aname); if (anchor.parent().attr('class')=='memItemLeft'){ var rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); glowEffect(rows.children(),300); // member without details } else if (anchor.parent().attr('class')=='fieldname'){ glowEffect(anchor.parent().parent(),1000); // enum value } else if (anchor.parent().attr('class')=='fieldtype'){ glowEffect(anchor.parent().parent(),1000); // struct field } else if (anchor.parent().is(":header")) { glowEffect(anchor.parent(),1000); // section header } else { glowEffect(anchor.next(),1000); // normal member } } function selectAndHighlight(hash,n) { var a; if (hash) { var link=stripPath(pathName())+':'+hash.substring(1); a=$('.item a[class$="'+link+'"]'); } if (a && a.length) { a.parent().parent().addClass('selected'); a.parent().parent().attr('id','selected'); highlightAnchor(); } else if (n) { $(n.itemDiv).addClass('selected'); $(n.itemDiv).attr('id','selected'); } var topOffset=5; if (typeof page_layout!=='undefined' && page_layout==1) { topOffset+=$('#top').outerHeight(); } if ($('#nav-tree-contents .item:first').hasClass('selected')) { topOffset+=25; } $('#nav-sync').css('top',topOffset+'px'); showRoot(); } function showNode(o, node, index, hash) { if (node && node.childrenData) { if (typeof(node.childrenData)==='string') { var varName = node.childrenData; getScript(node.relpath+varName,function(){ node.childrenData = getData(varName); showNode(o,node,index,hash); },true); } else { if (!node.childrenVisited) { getNode(o, node); } $(node.getChildrenUL()).css({'display':'block'}); node.plus_img.innerHTML = arrowDown; node.expanded = true; var n = node.children[o.breadcrumbs[index]]; if (index+11) hash = '#'+parts[1].replace(/[^\w\-]/g,''); else hash=''; } if (hash.match(/^#l\d+$/)) { var anchor=$('a[name='+hash.substring(1)+']'); glowEffect(anchor.parent(),1000); // line number hash=''; // strip line number anchors } var url=root+hash; var i=-1; while (NAVTREEINDEX[i+1]<=url) i++; if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index if (navTreeSubIndices[i]) { gotoNode(o,i,root,hash,relpath) } else { getScript(relpath+'navtreeindex'+i,function(){ navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); if (navTreeSubIndices[i]) { gotoNode(o,i,root,hash,relpath); } },true); } } function showSyncOff(n,relpath) { n.html(''); } function showSyncOn(n,relpath) { n.html(''); } function toggleSyncButton(relpath) { var navSync = $('#nav-sync'); if (navSync.hasClass('sync')) { navSync.removeClass('sync'); showSyncOff(navSync,relpath); storeLink(stripPath2(pathName())+hashUrl()); } else { navSync.addClass('sync'); showSyncOn(navSync,relpath); deleteLink(); } } var loadTriggered = false; var readyTriggered = false; var loadObject,loadToRoot,loadUrl,loadRelPath; $(window).on('load',function(){ if (readyTriggered) { // ready first navTo(loadObject,loadToRoot,loadUrl,loadRelPath); showRoot(); } loadTriggered=true; }); function initNavTree(toroot,relpath) { var o = new Object(); o.toroot = toroot; o.node = new Object(); o.node.li = document.getElementById("nav-tree-contents"); o.node.childrenData = NAVTREE; o.node.children = new Array(); o.node.childrenUL = document.createElement("ul"); o.node.getChildrenUL = function() { return o.node.childrenUL; }; o.node.li.appendChild(o.node.childrenUL); o.node.depth = 0; o.node.relpath = relpath; o.node.expanded = false; o.node.isLast = true; o.node.plus_img = document.createElement("span"); o.node.plus_img.className = 'arrow'; o.node.plus_img.innerHTML = arrowRight; if (localStorageSupported()) { var navSync = $('#nav-sync'); if (cachedLink()) { showSyncOff(navSync,relpath); navSync.removeClass('sync'); } else { showSyncOn(navSync,relpath); } navSync.click(function(){ toggleSyncButton(relpath); }); } if (loadTriggered) { // load before ready navTo(o,toroot,hashUrl(),relpath); showRoot(); } else { // ready before load loadObject = o; loadToRoot = toroot; loadUrl = hashUrl(); loadRelPath = relpath; readyTriggered=true; } $(window).bind('hashchange', function(){ if (window.location.hash && window.location.hash.length>1){ var a; if ($(location).attr('hash')){ var clslink=stripPath(pathName())+':'+hashValue(); a=$('.item a[class$="'+clslink.replace(/ libosmo-netif: osmo_dgram_rx Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmo_dgram_rx Struct Reference

    Data Fields

    struct osmo_fd ofd
     
    char * addr
     
    uint16_t port
     
    int(* cb )(struct osmo_dgram_rx *conn)
     
    void * data
     
    unsigned int flags
     

    The documentation for this struct was generated from the following file:
    html/tab_a.png0000644000175000017500000000021614642372355012570 0ustar buildbuild‰PNG  IHDR$ÇÇ[UIDATxíK €0C'o¤(Šˆ[Žà%Üxÿ#Ù©­ç ùÁöó¦W¦e# 3t I 3+¼øEã~\D½9¯Ûàè’wM·¿öÿ}Yõ_êA4Yžã}IEND®B`‚html/structamr__hdr.html0000644000175000017500000001120014642372355014715 0ustar buildbuild libosmo-netif: amr_hdr Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    amr_hdr Struct Reference

    Data Fields

    uint8_t data [0]
     

    The documentation for this struct was generated from the following file:
    • include/osmocom/netif/amr.h
    html/bc_s.png0000644000175000017500000000124414642372355012432 0ustar buildbuild‰PNG  IHDR€_ kIDATxíËkQÆϹÉ̤I&“¦mš&156*nÄ…”ܸR,4 +Hµ(U­b”ª1‚ŠˆJ.º(E·mßúhëJmKS'C›(‚èäÑ…¤ï &äÖþ ‡ïrÎåü3gö(z÷ýÒ&_9ó}’ÕŸ@‰mÚu ` Øh`ñ÷Ô¯  „ú&·ññ×Ù~“½—Üò‡ÎÝÑM4¸%‰3²§?Êêh)€ÿù™\ÄYi>Jb @gûßiÞˆú²Ñkg§ãê\è½­šEUæv+?E€î"pæÖÛB\ƒY&ðØó$vM+ê’Dn¼)}òþ:§Xoâ ƒ3ŠÚ¯'¯¿.‚fÁ0ìuŠ9òLýj€f6¸%«3Gf”Ô#Ôsm(,ùÃk*Ê’³Jª…¯¼JË¢o䆔¼u_~ °r]%%mnu]z°r5[ÍÆ°«Úò•Xeµ’†Iù<ÈèÐÅg@IÔÚÞàµë3‚:/<JÇ’ÐQ) ñ¹…tÚß÷(Mû\63éCgl!ýí;ÿ¸4Ùhâñ=÷Zë29­w’ÝÒ´·ˆV;ÊL3ƒj&7©·º½÷a!I†)ëë$-öÇÓú³›‹7tIV¾VàñÔübf¨8¡ÈƒB<﫵imnÿœÈ‡„ lߣù‡ÛD —#É5“­'Æ4?쬲øM’™›°»g¬‚|5Åçµ½GNdÓÐr|ô”Ã&„ì"7+'³@ 5‡Gâž‘Ç…âɬ^;õã–.3Òr"ý_R³¿Â@²oI¾å$IEND®B`‚html/structipa__head__ext.html0000644000175000017500000001203414642372355016060 0ustar buildbuild libosmo-netif: ipa_head_ext Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    ipa_head_ext Struct Reference

    Data Fields

    uint8_t proto
     
    uint8_t data [0]
     

    The documentation for this struct was generated from the following file:
    • include/osmocom/netif/ipa.h
    html/dir_68267d1309a1af8e8297ef4c3efbcdba.html0000644000175000017500000001642314642372355017360 0ustar buildbuild libosmo-netif: src Directory Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    src Directory Reference

    Files

    file  datagram.c
     Osmocom datagram socket helpers.
     
    file  jibuf.c
     Osmocom Jitter Buffer helpers.
     
    file  osmux.c
     Osmocom multiplex protocol helpers.
     
    file  osmux_input.c
     Osmocom multiplex protocol helpers (input)
     
    file  osmux_output.c
     Osmocom multiplex protocol helpers (output)
     
    file  stream.c
     Osmocom stream socket helpers.
     
    file  stream_cli.c
     Osmocom stream socket helpers (client side)
     
    file  stream_srv.c
     Osmocom stream socket helpers (server side)
     
    html/files_dup.js0000644000175000017500000000033714642372355013330 0ustar buildbuildvar files_dup = [ [ "include", "dir_d44c64559bbebec7f509842c48db8b23.html", "dir_d44c64559bbebec7f509842c48db8b23" ], [ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ] ];html/index.html0000644000175000017500000000737514642372355013026 0ustar buildbuild libosmo-netif: Main Page
    libosmo-netif 1.4.0
    Osmocom network interface library
    libosmo-netif Documentation
    html/structosmux__input__state.html0000644000175000017500000001633114642372355017244 0ustar buildbuild libosmo-netif: osmux_input_state Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmux_input_state Struct Reference

    Data Fields

    struct msgb * out_msg
     
    struct msgb * msg
     
    struct rtp_hdrrtph
     
    struct amr_hdramrh
     
    uint32_t amr_payload_len
     
    struct osmux_circuitcircuit
     
    int add_osmux_hdr
     

    The documentation for this struct was generated from the following file:
    html/sync_on.png0000644000175000017500000000151514642372355013175 0ustar buildbuild‰PNG  IHDRàw=øIDATxíÝ_HTYÀñï8ã¤ó§i§4-g6ÆËÕ&kQ)¨Ô!Š0ÒURKÚ…„ê¡/»PEÁ>ìK-+KÁ²Ñ.Y”¾dEPaA‰ø°¥¶›ZSÓïÜ;3wºŠ–¯—߯gfîïœsçœWKÇñ.€ÉøD­¨a‘'¬âq_ôˆk¢ÀŒ ÀDŽøQ´ÄïC¨¶åñÏÿgÅ ñ 0„Y‚:qZ¦Á)~õâ€èLý0HVñ× žz-¿‰C“%¨g¦˜6€é8%Úõ¬ëwêÙUÏ¿˜ª³Ä }? ?€·3ÀÀž©Š À”K• @hà a±ðaÇæUe‹ sù~ë2²ì“&Ú&B*AÄljæºììi*˨,Ëçí»÷oÆ£T”,d[˜¼3-*ÁÀ…>å‡Ë çLÉŸçfk˜Ò éw#*AEjKUy>ûšËÉõ&{µ¢8—m5Ki¬ jjƒD*¿NŽÖigwÃ7Dª’mz骹úKÛ¾±ˆ¶M!æ¤ÍkÐ?šoý¬_åÓlXí#Ò~–¸¬ê×ÒÑXŠÓ‘ùRÙ*Eû‚ՂדðEÜ;6«e"Q(²Ù=–¿Ezæ5Kؼָ_ 1òzBªJë ±XŒì96åªjL^7{ùãJÑ÷1½i@%8'7M©_\Qœ#ÓUŒËñýÿyõ Wo Éx8¼s¥v¯ªì|×SnÜ q_m Ýé î>bèÕí[JX,½4[Tú{R£ë¼ôˆ¾þa€tÝjjzzÅ'ÅìȶiIžŽòwÏs ¡€—ÕKøõâC^ŽŒ˜Y­¨µÉ%6¨´êˆº]vÛðhâ½iWv–hôëê°Ò¨¾'æÌ‚·ñ|[ßìúÅ^€YrD=<ýDû]äÇ÷s€Ïõ‹8™ºCì? À ¨—t4õá©Ž¡Jã‡W‹É± îr¼cjMɘìx| šE©øNÔ‰œøA¢þ«–€Z¼ñ‡jó î#™§¢¢4gIEND®B`‚html/navtree.css0000644000175000017500000000407414642372355013200 0ustar buildbuild#nav-tree .children_ul { margin:0; padding:4px; } #nav-tree ul { list-style:none outside none; margin:0px; padding:0px; } #nav-tree li { white-space:nowrap; margin:0px; padding:0px; } #nav-tree .plus { margin:0px; } #nav-tree .selected { background-image: url('tab_a.png'); background-repeat:repeat-x; color: #fff; text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); } #nav-tree img { margin:0px; padding:0px; border:0px; vertical-align: middle; } #nav-tree a { text-decoration:none; padding:0px; margin:0px; outline:none; } #nav-tree .label { margin:0px; padding:0px; font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; } #nav-tree .label a { padding:2px; } #nav-tree .selected a { text-decoration:none; color:#fff; } #nav-tree .children_ul { margin:0px; padding:0px; } #nav-tree .item { margin:0px; padding:0px; } #nav-tree { padding: 0px 0px; background-color: #FAFAFF; font-size:14px; overflow:auto; } #doc-content { overflow:auto; display:block; padding:0px; margin:0px; -webkit-overflow-scrolling : touch; /* iOS 5+ */ } #side-nav { padding:0 6px 0 0; margin: 0px; display:block; position: absolute; left: 0px; width: 250px; overflow : hidden; } .ui-resizable .ui-resizable-handle { display:block; } .ui-resizable-e { background-image:url("splitbar.png"); background-size:100%; background-repeat:repeat-y; background-attachment: scroll; cursor:ew-resize; height:100%; right:0; top:0; width:6px; } .ui-resizable-handle { display:none; font-size:0.1px; position:absolute; z-index:1; } #nav-tree-contents { margin: 6px 0px 0px 0px; } #nav-tree { background-image:url('nav_h.png'); background-repeat:repeat-x; background-color: #F9FAFC; -webkit-overflow-scrolling : touch; /* iOS 5+ */ } #nav-sync { position:absolute; top:5px; right:24px; z-index:0; } #nav-sync img { opacity:0.3; } #nav-sync img:hover { opacity:0.9; } @media print { #nav-tree { display: none; } div.ui-resizable-handle { display: none; position: relative; } } html/classes.html0000644000175000017500000001612614642372355013346 0ustar buildbuild libosmo-netif: Data Structure Index
    libosmo-netif 1.4.0
    Osmocom network interface library
    html/group__osmux.js0000644000175000017500000000324214642372355014102 0ustar buildbuildvar group__osmux = [ [ "osmux.h", "osmux_8h.html", null ], [ "osmux.c", "osmux_8c.html", null ], [ "osmux_input.c", "osmux__input_8c.html", null ], [ "osmux_output.c", "osmux__output_8c.html", null ], [ "osmux_hdr", "structosmux__hdr.html", null ], [ "osmux_in_handle", "structosmux__in__handle.html", null ], [ "osmux_out_handle", "structosmux__out__handle.html", null ], [ "osmux_link", "structosmux__link.html", null ], [ "osmux_circuit", "structosmux__circuit.html", null ], [ "osmux_in_req", "structosmux__in__req.html", null ], [ "osmux_input_state", "structosmux__input__state.html", null ], [ "osmux_tx_handle", "structosmux__tx__handle.html", null ], [ "osmux_snprintf", "group__osmux.html#gaf654e092ca97dd764f59905a2ed21650", null ], [ "osmux_xfrm_input", "group__osmux.html#ga9c7d30c0d7d9bc0caf744799d629d4cc", null ], [ "osmux_xfrm_output_alloc", "group__osmux.html#ga41a217bffa1b0ac095c98ab0fab82c25", null ], [ "osmux_xfrm_output_flush", "group__osmux.html#gaaac410425f6470396ae9db53ebb8dc44", null ], [ "osmux_xfrm_output_sched", "group__osmux.html#gafee78ee4522a9caa238301d7b913dfd6", null ], [ "osmux_xfrm_output_set_rtp_msgb_alloc_cb", "group__osmux.html#ga97187827e1f793f2392e54585343db32", null ], [ "osmux_xfrm_output_set_rtp_pl_type", "group__osmux.html#ga0d96c8a544e0ff56576615e0b2ac7774", null ], [ "osmux_xfrm_output_set_rtp_ssrc", "group__osmux.html#ga08151bad3c12df245d4c0e4f9c4ca966", null ], [ "osmux_xfrm_output_set_tx_cb", "group__osmux.html#ga3936e43e881d0992648937417969ead1", null ], [ "next_default_name_idx", "group__osmux.html#ga9faf7e88ba58b39f4fc2df706aa157c0", null ] ];html/dynsections.js0000644000175000017500000001054414642372355013721 0ustar buildbuild/* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ function toggleVisibility(linkObj) { var base = $(linkObj).attr('id'); var summary = $('#'+base+'-summary'); var content = $('#'+base+'-content'); var trigger = $('#'+base+'-trigger'); var src=$(trigger).attr('src'); if (content.is(':visible')===true) { content.hide(); summary.show(); $(linkObj).addClass('closed').removeClass('opened'); $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); } else { content.show(); summary.hide(); $(linkObj).removeClass('closed').addClass('opened'); $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); } return false; } function updateStripes() { $('table.directory tr'). removeClass('even').filter(':visible:even').addClass('even'); } function toggleLevel(level) { $('table.directory tr').each(function() { var l = this.id.split('_').length-1; var i = $('#img'+this.id.substring(3)); var a = $('#arr'+this.id.substring(3)); if (lli>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#666;-webkit-transition:all 0.25s;transition:all 0.25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px, 1px, 1px, 1px)}#main-menu-state:not(:checked)~#main-menu{display:none}#main-menu-state:checked~#main-menu{display:block}@media (min-width: 768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked)~#main-menu{display:block}}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} html/dir_d44c64559bbebec7f509842c48db8b23.html0000644000175000017500000000762614642372355017227 0ustar buildbuild libosmo-netif: include Directory Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    include Directory Reference
    html/prim_8h_source.html0000644000175000017500000004111014642372355014626 0ustar buildbuild libosmo-netif: include/osmocom/netif/prim.h Source File
    libosmo-netif 1.4.0
    Osmocom network interface library
    prim.h
    1/* (C) 2021 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
    2 * Author: Pau Espin Pedrol <pespin@sysmocom.de>
    3 * All Rights Reserved
    4 *
    5 * This program is free software; you can redistribute it and/or modify
    6 * it under the terms of the GNU Affero General Public License as published by
    7 * the Free Software Foundation; either version 3 of the License, or
    8 * (at your option) any later version.
    9 *
    10 * This program is distributed in the hope that it will be useful,
    11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
    12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    13 * GNU Affero General Public License for more details.
    14 *
    15 * You should have received a copy of the GNU Affero General Public License
    16 * along with this program. If not, see <http://www.gnu.org/lienses/>.
    17 *
    18 */
    19#pragma once
    20
    21#include <stdint.h>
    22
    23#include <osmocom/core/prim.h>
    24#include <osmocom/core/select.h>
    25#include <osmocom/core/linuxlist.h>
    26
    28struct osmo_prim_srv;
    29
    30typedef int (*osmo_prim_srv_conn_cb)(struct osmo_prim_srv *prim_srv);
    32typedef int (*osmo_prim_srv_rx_cb)(struct osmo_prim_srv *prim_srv, struct osmo_prim_hdr *oph);
    33
    41typedef int (*osmo_prim_srv_rx_sapi_version)(struct osmo_prim_srv *prim_srv, uint32_t sapi, uint16_t rem_version);
    42
    43struct osmo_prim_hdr *osmo_prim_msgb_alloc(unsigned int sap, unsigned int primitive,
    44 enum osmo_prim_operation operation, size_t alloc_len);
    45
    46struct osmo_prim_srv_link *osmo_prim_srv_link_alloc(void *ctx);
    47void osmo_prim_srv_link_free(struct osmo_prim_srv_link *prim_link);
    48int osmo_prim_srv_link_set_addr(struct osmo_prim_srv_link *prim_link, const char *path);
    49const char *osmo_prim_srv_link_get_addr(struct osmo_prim_srv_link *prim_link);
    50void osmo_prim_srv_link_set_priv(struct osmo_prim_srv_link *prim_link, void *priv);
    51void *osmo_prim_srv_link_get_priv(const struct osmo_prim_srv_link *prim_link);
    52void osmo_prim_srv_link_set_log_category(struct osmo_prim_srv_link *prim_link, int log_cat);
    53void osmo_prim_srv_link_set_opened_conn_cb(struct osmo_prim_srv_link *prim_link, osmo_prim_srv_conn_cb opened_conn_cb);
    54void osmo_prim_srv_link_set_closed_conn_cb(struct osmo_prim_srv_link *prim_link, osmo_prim_srv_conn_cb closed_conn_cb);
    55void osmo_prim_srv_link_set_rx_sapi_version_cb(struct osmo_prim_srv_link *prim_link, osmo_prim_srv_rx_sapi_version rx_sapi_version_cb);
    56void osmo_prim_srv_link_set_rx_cb(struct osmo_prim_srv_link *prim_link, osmo_prim_srv_rx_cb rx_cb);
    57void osmo_prim_srv_link_set_rx_msgb_alloc_len(struct osmo_prim_srv_link *prim_link, size_t alloc_len);
    58int osmo_prim_srv_link_open(struct osmo_prim_srv_link *prim_link);
    59
    60int osmo_prim_srv_send(struct osmo_prim_srv *prim_srv, struct msgb *msg);
    61struct osmo_prim_srv_link *osmo_prim_srv_get_link(struct osmo_prim_srv *prims_srv);
    62void osmo_prim_srv_set_priv(struct osmo_prim_srv *prim_srv, void *priv);
    63void *osmo_prim_srv_get_priv(const struct osmo_prim_srv *prim_srv);
    64void osmo_prim_srv_close(struct osmo_prim_srv *prim_srv);
    Definition: prim.c:90
    html/dir_15662fdf1b5c37dde6a3ed82e5410e57.js0000644000175000017500000000121214642372355016647 0ustar buildbuildvar dir_15662fdf1b5c37dde6a3ed82e5410e57 = [ [ "amr.h", "amr_8h_source.html", null ], [ "datagram.h", "datagram_8h_source.html", null ], [ "ipa.h", "ipa_8h_source.html", null ], [ "ipa_unit.h", "ipa__unit_8h_source.html", null ], [ "jibuf.h", "jibuf_8h.html", "jibuf_8h" ], [ "osmux.h", "osmux_8h.html", "osmux_8h" ], [ "prim.h", "prim_8h_source.html", null ], [ "rs232.h", "rs232_8h_source.html", null ], [ "rtp.h", "rtp_8h_source.html", null ], [ "sctp.h", "sctp_8h_source.html", null ], [ "stream.h", "stream_8h_source.html", null ], [ "stream_private.h", "stream__private_8h_source.html", null ] ];html/structosmo__rtp__handle.html0000644000175000017500000001330614642372355016626 0ustar buildbuild libosmo-netif: osmo_rtp_handle Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmo_rtp_handle Struct Reference

    Data Fields

    struct {
       uint16_t   sequence
     
       uint32_t   timestamp
     
       uint32_t   ssrc
     
       struct timeval   last_tv
     
    tx
     

    The documentation for this struct was generated from the following file:
    • src/rtp.c
    html/structosmo__rs232.html0000644000175000017500000001655014642372355015226 0ustar buildbuild libosmo-netif: osmo_rs232 Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmo_rs232 Struct Reference

    Data Fields

    struct osmo_fd ofd
     
    struct llist_head tx_queue
     
    struct {
       int(*   read )(struct osmo_rs232 *)
     
    cb
     
    struct osmo_timer_list tx_timer
     
    struct {
       char   serial_port [PATH_MAX]
     
       int   baudrate
     
       unsigned int   delay_us
     
    cfg
     

    The documentation for this struct was generated from the following file:
    • src/rs232.c
    html/structipa__head.html0000644000175000017500000001260614642372355015046 0ustar buildbuild libosmo-netif: ipa_head Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    ipa_head Struct Reference

    Data Fields

    uint16_t len
     
    uint8_t proto
     
    uint8_t data [0]
     

    The documentation for this struct was generated from the following file:
    • include/osmocom/netif/ipa.h
    html/osmux_8h_source.html0000644000175000017500000010045514642372355015042 0ustar buildbuild libosmo-netif: include/osmocom/netif/osmux.h Source File
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmux.h
    Go to the documentation of this file.
    1#ifndef _OSMUX_H_
    2#define _OSMUX_H_
    3
    4#include <osmocom/core/endian.h>
    5#include <osmocom/core/timer.h>
    6#include <osmocom/core/msgb.h>
    7
    16#define OSMUX_DEFAULT_PORT 1984
    17
    18/* OSmux header:
    19 *
    20 * rtp_m (1 bit): RTP M field (RFC3550, RFC4867)
    21 * ft (2 bits): 0=signalling, 1=voice, 2=dummy
    22 * ctr (3 bits): Number of batched AMR payloads (starting 0)
    23 * amr_f (1 bit): AMR F field (RFC3267)
    24 * amr_q (1 bit): AMR Q field (RFC3267)
    25 * seq (8 bits): Combination of RTP timestamp and seq. number
    26 * circuit_id (8 bits): Circuit ID, ie. Call identifier.
    27 * amr_ft (4 bits): AMR FT field (RFC3267)
    28 * amr_cmr (4 bits): AMR CMT field (RFC3267)
    29 */
    30
    31#define OSMUX_FT_SIGNAL 0
    32#define OSMUX_FT_VOICE_AMR 1
    33#define OSMUX_FT_DUMMY 2
    34
    35struct osmux_hdr {
    36#if OSMO_IS_LITTLE_ENDIAN
    37 uint8_t amr_q:1,
    38 amr_f:1,
    39 ctr:3,
    40 ft:2,
    41 rtp_m:1;
    42#elif OSMO_IS_BIG_ENDIAN
    43/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianness.py) */
    44 uint8_t rtp_m:1, ft:2, ctr:3, amr_f:1, amr_q:1;
    45#endif
    46 uint8_t seq;
    47#define OSMUX_CID_MAX 255 /* determined by circuit_id */
    48 uint8_t circuit_id;
    49#if OSMO_IS_LITTLE_ENDIAN
    50 uint8_t amr_cmr:4,
    51 amr_ft:4;
    52#elif OSMO_IS_BIG_ENDIAN
    53/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianness.py) */
    54 uint8_t amr_ft:4, amr_cmr:4;
    55#endif
    56 uint8_t data[0];
    57} __attribute__((packed));
    58
    59/* one to handle all existing RTP flows */
    61 /* Initial Osmux seqnum for each circuit, set during osmux_xfrm_input_open_circuit() */
    62 uint8_t osmux_seq;
    63 uint8_t batch_factor;
    64 uint16_t batch_size;
    65
    66 struct {
    67 uint32_t input_rtp_msgs;
    68 uint32_t output_osmux_msgs;
    69 uint64_t input_rtp_bytes;
    70 uint64_t output_osmux_bytes;
    71 } stats;
    72
    73 void (*deliver)(struct msgb *msg, void *data);
    74 void *data;
    75 char *internal_data; /* internal data to store batch */
    76};
    77
    78#define OSMUX_MAX_CONCURRENT_CALLS 8
    79
    80typedef struct msgb *(*rtp_msgb_alloc_cb_t)(void *rtp_msgb_alloc_priv_data,
    81 unsigned int msg_len);
    82/* one per OSmux circuit_id, ie. one per RTP flow. */
    84 uint16_t rtp_seq;
    85 uint32_t rtp_timestamp;
    86 uint32_t rtp_ssrc;
    87 uint8_t rtp_payload_type;
    88 uint8_t osmux_seq_ack; /* Latest received seq num */
    89 struct osmo_timer_list timer;
    90 struct llist_head list;
    91 void (*tx_cb)(struct msgb *msg, void *data); /* Used defined rtp tx callback */
    92 void *data; /* User defined opaque data structure */
    93 rtp_msgb_alloc_cb_t rtp_msgb_alloc_cb; /* User defined msgb alloc function for generated RTP pkts */
    94 void *rtp_msgb_alloc_cb_data; /* Opaque data pointer set by user and passed in rtp_msgb_alloc_cb() */
    95};
    96
    97static inline uint8_t *osmux_get_payload(struct osmux_hdr *osmuxh)
    98{
    99 return (uint8_t *)osmuxh + sizeof(struct osmux_hdr);
    100}
    101
    102int osmux_snprintf(char *buf, size_t size, struct msgb *msg);
    103
    104/* 1500 - sizeof(iphdr) = 20 bytes - sizeof(udphdr) = 8 bytes. */
    105#define OSMUX_BATCH_DEFAULT_MAX 1472
    106
    107struct osmux_in_handle *osmux_xfrm_input_alloc(void *ctx);
    108void osmux_xfrm_input_init(struct osmux_in_handle *h) OSMO_DEPRECATED("Use osmux_xfrm_input_alloc() instead");
    109void osmux_xfrm_input_fini(struct osmux_in_handle *h) OSMO_DEPRECATED("Use talloc_free() instead");
    110void osmux_xfrm_input_set_name(struct osmux_in_handle *h, const char *name);
    111int osmux_xfrm_input_set_batch_factor(struct osmux_in_handle *h, uint8_t batch_factor);
    112void osmux_xfrm_input_set_batch_size(struct osmux_in_handle *h, uint16_t batch_size);
    113void osmux_xfrm_input_set_initial_seqnum(struct osmux_in_handle *h, uint8_t osmux_seqnum);
    114void osmux_xfrm_input_set_deliver_cb(struct osmux_in_handle *h, void (*deliver_cb)(struct msgb *msg, void *data), void *data);
    115void *osmux_xfrm_input_get_deliver_cb_data(struct osmux_in_handle *h);
    116
    117int osmux_xfrm_input_open_circuit(struct osmux_in_handle *h, int ccid, int dummy);
    118void osmux_xfrm_input_close_circuit(struct osmux_in_handle *h, int ccid);
    119
    120int osmux_xfrm_input(struct osmux_in_handle *h, struct msgb *msg, int ccid);
    121void osmux_xfrm_input_deliver(struct osmux_in_handle *h);
    122
    124void osmux_xfrm_output_init(struct osmux_out_handle *h, uint32_t rtp_ssrc) OSMO_DEPRECATED("Use osmux_xfrm_output_alloc() and osmux_xfrm_output_set_rtp_*() instead");
    125void osmux_xfrm_output_init2(struct osmux_out_handle *h, uint32_t rtp_ssrc, uint8_t rtp_payload_type) OSMO_DEPRECATED("Use osmux_xfrm_output_alloc() and osmux_xfrm_output_set_rtp_*() instead");
    126void osmux_xfrm_output_set_rtp_ssrc(struct osmux_out_handle *h, uint32_t rtp_ssrc);
    127void osmux_xfrm_output_set_rtp_pl_type(struct osmux_out_handle *h, uint32_t rtp_payload_type);
    128void osmux_xfrm_output_set_tx_cb(struct osmux_out_handle *h, void (*tx_cb)(struct msgb *msg, void *data), void *data);
    129void osmux_xfrm_output_set_rtp_msgb_alloc_cb(struct osmux_out_handle *h, rtp_msgb_alloc_cb_t cb, void *cb_data);
    130int osmux_xfrm_output_sched(struct osmux_out_handle *h, struct osmux_hdr *osmuxh);
    132struct osmux_hdr *osmux_xfrm_output_pull(struct msgb *msg);
    135#endif
    void osmux_xfrm_output_set_rtp_ssrc(struct osmux_out_handle *h, uint32_t rtp_ssrc)
    Set SSRC of generated RTP packets from Osmux frames.
    Definition: osmux_output.c:382
    void osmux_xfrm_output_set_rtp_pl_type(struct osmux_out_handle *h, uint32_t rtp_payload_type)
    Set Payload Type of generated RTP packets from Osmux frames.
    Definition: osmux_output.c:391
    void osmux_xfrm_output_set_tx_cb(struct osmux_out_handle *h, void(*tx_cb)(struct msgb *msg, void *data), void *data)
    Set transmission callback to call when a generated RTP packet is to be transmitted.
    Definition: osmux_output.c:356
    struct osmux_out_handle * osmux_xfrm_output_alloc(void *ctx)
    Allocate a new osmux out handle.
    Definition: osmux_output.c:320
    void osmux_xfrm_output_set_rtp_msgb_alloc_cb(struct osmux_out_handle *h, rtp_msgb_alloc_cb_t cb, void *cb_data)
    Set callback to call when an RTP packet to be generated is to be allocated.
    Definition: osmux_output.c:370
    int osmux_xfrm_input(struct osmux_in_handle *h, struct msgb *msg, int ccid)
    Definition: osmux_input.c:617
    void osmux_xfrm_output_flush(struct osmux_out_handle *h)
    Flush all scheduled RTP packets still pending to be transmitted.
    Definition: osmux_output.c:270
    int osmux_snprintf(char *buf, size_t size, struct msgb *msg)
    Definition: osmux.c:108
    int osmux_xfrm_output_sched(struct osmux_out_handle *h, struct osmux_hdr *osmuxh)
    Generate RTP packets from osmux frame AMR payload set and schedule them for transmission at appropria...
    Definition: osmux_output.c:218
    Definition: osmux.h:35
    Definition: osmux.h:60
    Definition: osmux.h:83
    html/dir_d44c64559bbebec7f509842c48db8b23.js0000644000175000017500000000022614642372355016664 0ustar buildbuildvar dir_d44c64559bbebec7f509842c48db8b23 = [ [ "osmocom", "dir_abe9b486a10ccc5afdf8abc29637e0c1.html", "dir_abe9b486a10ccc5afdf8abc29637e0c1" ] ];html/structrtcp__hdr.html0000644000175000017500000001260514642372355015120 0ustar buildbuild libosmo-netif: rtcp_hdr Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    rtcp_hdr Struct Reference

    Data Fields

    uint8_t byte0
     
    uint8_t type
     
    uint16_t length
     

    The documentation for this struct was generated from the following file:
    • include/osmocom/netif/rtp.h
    html/closed.png0000644000175000017500000000020414642372355012770 0ustar buildbuild‰PNG  IHDR à‘KIDATxíÝm @!†ÑGk™É7À-`&séts¦Àñþòð@åk}ª2€… P%Á_Ëþ¿N² .:0Dk¥‹Â›x" Ö›)¡xÒ5õIEND®B`‚html/functions.html0000644000175000017500000001006314642372355013713 0ustar buildbuild libosmo-netif: Data Fields
    libosmo-netif 1.4.0
    Osmocom network interface library
    Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
    html/structosmo__jibuf.html0000644000175000017500000003122514642372355015446 0ustar buildbuild libosmo-netif: osmo_jibuf Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmo_jibuf Struct Reference

    A structure representing a single instance of a jitter buffer. More...

    #include <jibuf.h>

    Data Fields

    void * talloc_ctx
     
    bool started
     
    struct osmo_timer_list timer
     
    struct llist_head msg_list
     
    uint32_t min_delay
     
    uint32_t max_delay
     
    uint32_t threshold_delay
     
    osmo_jibuf_dequeue_cb dequeue_cb
     
    void * dequeue_cb_data
     
    uint32_t last_dropped
     
    uint32_t consecutive_drops
     
    uint32_t ref_rx_ts
     
    uint32_t ref_tx_ts
     
    uint16_t ref_tx_seq
     
    struct timeval last_enqueue_time
     
    struct timeval next_dequeue_time
     
    bool skew_enabled
     
    int32_t skew_us
     
    struct {
       uint32_t   total_enqueued
     
       uint64_t   total_dropped
     
    stats
     

    Detailed Description

    A structure representing a single instance of a jitter buffer.


    The documentation for this struct was generated from the following file:
    html/structosmo__stream__cli.html0000644000175000017500000003574314642372355016641 0ustar buildbuild libosmo-netif: osmo_stream_cli Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmo_stream_cli Struct Reference

    Data Fields

    char * name
     
    char sockname [OSMO_SOCK_NAME_MAXLEN]
     
    enum osmo_stream_mode mode
     
    union {
       struct osmo_fd   ofd
     
       struct osmo_io_fd *   iofd
     
    }; 
     
    struct llist_head tx_queue
     
    struct osmo_timer_list timer
     
    enum osmo_stream_cli_state state
     
    char * addr [OSMO_STREAM_MAX_ADDRS]
     
    uint8_t addrcnt
     
    uint16_t port
     
    char * local_addr [OSMO_STREAM_MAX_ADDRS]
     
    uint8_t local_addrcnt
     
    uint16_t local_port
     
    int sk_domain
     
    int sk_type
     
    uint16_t proto
     
    int(* connect_cb )(struct osmo_stream_cli *cli)
     
    int(* disconnect_cb )(struct osmo_stream_cli *cli)
     
    int(* read_cb )(struct osmo_stream_cli *cli)
     
    int(* iofd_read_cb )(struct osmo_stream_cli *cli, struct msgb *msg)
     
    int(* write_cb )(struct osmo_stream_cli *cli)
     
    void * data
     
    int flags
     
    int reconnect_timeout
     
    struct osmo_sock_init2_multiaddr_pars ma_pars
     

    The documentation for this struct was generated from the following file:
    html/group__jibuf.html0000644000175000017500000011012614642372355014356 0ustar buildbuild libosmo-netif: Osmocom Jitter Buffer
    libosmo-netif 1.4.0
    Osmocom network interface library
    Osmocom Jitter Buffer

    Files

    file  jibuf.h
     Osmocom Jitter Buffer helpers.
     
    file  jibuf.c
     Osmocom Jitter Buffer helpers.
     

    Data Structures

    struct  osmo_jibuf
     A structure representing a single instance of a jitter buffer. More...
     
    struct  osmo_jibuf_msgb_cb
     

    Macros

    #define SAMPLES_PER_PKT   160
     
    #define SAMPLE_RATE   8000
     
    #define JIBUF_DEFAULT_MIN_DELAY_MS   60
     
    #define JIBUF_DEFAULT_MAX_DELAY_MS   200
     
    #define JIBUF_REFERENCE_TS_FREQ   60
     
    #define JIBUF_BUFFER_RECALC_FREQ   40
     
    #define JIBUF_ALLOWED_PKT_DROP   3
     
    #define JIBUF_ALLOWED_PKT_CONSECUTIVE_DROP   1
     
    #define JIBUF_BUFFER_INC_STEP   20
     
    #define JIBUF_BUFFER_DEC_STEP   5
     
    #define JIBUF_SKEW_WEIGHT   ((double)1/32)
     
    #define JIBUF_MSGB_CB(__msgb)   ((struct osmo_jibuf_msgb_cb *)&((__msgb)->cb[0]))
     

    Typedefs

    typedef void(* osmo_jibuf_dequeue_cb) (struct msgb *msg, void *data)
     

    Functions

    struct osmo_jibufosmo_jibuf_alloc (void *talloc_ctx)
     Allocate a new jitter buffer instance. More...
     
    void osmo_jibuf_delete (struct osmo_jibuf *jb)
     Destroy a previously allocated jitter buffer instance. More...
     
    int osmo_jibuf_enqueue (struct osmo_jibuf *jb, struct msgb *msg)
     Try to enqueue a packet into the jitter buffer. More...
     
    bool osmo_jibuf_empty (struct osmo_jibuf *jb)
     Check whether the jitter buffer instance has packets queued or not. More...
     
    void osmo_jibuf_set_min_delay (struct osmo_jibuf *jb, uint32_t min_delay)
     Set minimum buffer size for the jitter buffer. More...
     
    void osmo_jibuf_set_max_delay (struct osmo_jibuf *jb, uint32_t max_delay)
     Set maximum buffer size for the jitter buffer. More...
     
    void osmo_jibuf_enable_skew_compensation (struct osmo_jibuf *jb, bool enable)
     Toggle use of skew detection and compensation mechanism. More...
     
    void osmo_jibuf_set_dequeue_cb (struct osmo_jibuf *jb, osmo_jibuf_dequeue_cb dequeue_cb, void *cb_data)
     Set dequeue callback for the jitter buffer. More...
     
    static void ms2timeval (struct timeval *ts, uint32_t ms)
     
    static uint32_t timeval2ms (const struct timeval *ts)
     
    static int clock_gettime_timeval (clockid_t clk_id, struct timeval *tp)
     
    static struct timeval * msgb_scheduled_ts (const struct msgb *msg)
     
    static void llist_add_sorted (struct msgb *msg, struct llist_head *msg_list)
     
    static void enqueue_pkt (struct osmo_jibuf *jb, struct msgb *msg, bool is_syncpoint)
     
    static bool msg_get_marker (struct msgb *msg)
     
    static uint16_t msg_get_sequence (struct msgb *msg)
     
    static uint32_t msg_get_timestamp (struct msgb *msg)
     
    static int32_t samples2ms (int32_t samples)
     
    static int calc_pkt_rel_delay (struct osmo_jibuf *jb, struct msgb *msg)
     
    static bool msg_is_in_sequence (struct osmo_jibuf *jb, struct msgb *msg)
     
    static bool msg_is_syncpoint (struct osmo_jibuf *jb, struct msgb *msg)
     
    static void msg_set_as_reference (struct osmo_jibuf *jb, struct msgb *msg)
     
    static void dequeue_msg (struct osmo_jibuf *jb, struct msgb *msg)
     
    static void timer_expired (void *data)
     
    static void recalc_clock_skew (struct osmo_jibuf *jb, int32_t rel_delay)
     
    static void recalc_threshold_delay (struct osmo_jibuf *jb)
     

    Detailed Description

    Function Documentation

    ◆ osmo_jibuf_alloc()

    struct osmo_jibuf * osmo_jibuf_alloc ( void *  talloc_ctx)

    Allocate a new jitter buffer instance.

    Returns
    the new allocated instance

    ◆ osmo_jibuf_delete()

    void osmo_jibuf_delete ( struct osmo_jibuf jb)

    Destroy a previously allocated jitter buffer instance.

    Parameters
    [in]jbPreviously allocated (non-null) jitter buffer instance

    All the queued packets are dequeued before deleting the instance.

    ◆ osmo_jibuf_empty()

    bool osmo_jibuf_empty ( struct osmo_jibuf jb)

    Check whether the jitter buffer instance has packets queued or not.

    Parameters
    [in]jbjitter buffer instance
    Returns
    true if the queue is empty, false otherwise.

    ◆ osmo_jibuf_enable_skew_compensation()

    void osmo_jibuf_enable_skew_compensation ( struct osmo_jibuf jb,
    bool  enable 
    )

    Toggle use of skew detection and compensation mechanism.

    Parameters
    [in]jbjitter buffer instance
    [in]enableWhether to enable or not (default) the skew estimation and compensation mechanism

    When this function is called, the estimated skew is reset.

    ◆ osmo_jibuf_enqueue()

    int osmo_jibuf_enqueue ( struct osmo_jibuf jb,
    struct msgb *  msg 
    )

    Try to enqueue a packet into the jitter buffer.

    Parameters
    [in]jbjitter buffer instance
    [in]msgmsgb to enqueue, containing an RTP packet
    Returns
    <0 if the packet was dropped, 0 otherwise

    This function calculates the delay for the enqueued packet. If the delay is bigger than the current buffer size, the function returns -1 and the caller owns the packet again and can free it if required. If the packet is enqueued, 0 is returned and the exact same packet (ownership transfer, no copy is made) will be available again through the dequeue_cb() when the queue timer for this packet expires.

    ◆ osmo_jibuf_set_dequeue_cb()

    void osmo_jibuf_set_dequeue_cb ( struct osmo_jibuf jb,
    osmo_jibuf_dequeue_cb  dequeue_cb,
    void *  cb_data 
    )

    Set dequeue callback for the jitter buffer.

    Parameters
    [in]jbjitter buffer instance
    [in]dequeue_cbfunction pointer to call back when the dequeue timer for a given packet expires
    [in]cb_datadata pointer to be passed to dequeue_cb together with the msgb.

    ◆ osmo_jibuf_set_max_delay()

    void osmo_jibuf_set_max_delay ( struct osmo_jibuf jb,
    uint32_t  max_delay 
    )

    Set maximum buffer size for the jitter buffer.

    Parameters
    [in]jbjitter buffer instance
    [in]max_delayMaximum buffer size, as in maximum delay in milliseconds

    ◆ osmo_jibuf_set_min_delay()

    void osmo_jibuf_set_min_delay ( struct osmo_jibuf jb,
    uint32_t  min_delay 
    )

    Set minimum buffer size for the jitter buffer.

    Parameters
    [in]jbjitter buffer instance
    [in]min_delayMinimum buffer size, as in minimum delay in milliseconds
    html/group__stream.js0000644000175000017500000001533514642372355014230 0ustar buildbuildvar group__stream = [ [ "stream.c", "stream_8c.html", null ], [ "stream_cli.c", "stream__cli_8c.html", null ], [ "stream_srv.c", "stream__srv_8c.html", null ], [ "osmo_stream_cli", "structosmo__stream__cli.html", null ], [ "osmo_stream_srv_link", "structosmo__stream__srv__link.html", null ], [ "osmo_stream_srv", "structosmo__stream__srv.html", null ], [ "msgb_sctp_ppid", "group__stream.html#ga2693c0cc5c6222dd9ed42c8c4bf8aec8", null ], [ "msgb_sctp_stream", "group__stream.html#gac2c359892ad63309b59a4b402f6a3e81", null ], [ "OSMO_STREAM_SCTP_MSG_FLAGS_NOTIFICATION", "group__stream.html#ga123b7866ed4985a81246bfede79a8ea9", null ], [ "osmo_stream_cli_close", "group__stream.html#gad217c1c1b83ac852e090afd49146db19", null ], [ "osmo_stream_cli_create", "group__stream.html#ga1754a498abc27577a8e0b3b0f236c05b", null ], [ "osmo_stream_cli_destroy", "group__stream.html#ga9d0dac2f390c660c85fa347765f4f45a", null ], [ "osmo_stream_cli_get_data", "group__stream.html#ga606a53840677f3f5200887dc92f5de4d", null ], [ "osmo_stream_cli_get_ofd", "group__stream.html#ga0615daa4aac253a3d530f35fddbc68bd", null ], [ "osmo_stream_cli_get_sockname", "group__stream.html#gaecd148ae11f2f619aa52dd2900a15827", null ], [ "osmo_stream_cli_is_connected", "group__stream.html#ga79a09e9c9b8cc98991cd5eebdb41ed57", null ], [ "osmo_stream_cli_open", "group__stream.html#ga86b4b9c8e563f8426d3cdae803e3ec38", null ], [ "osmo_stream_cli_open2", "group__stream.html#ga127866794591d16a0eb7244f2fe666ef", null ], [ "osmo_stream_cli_reconnect", "group__stream.html#ga11d2615f6197f33073ba7245e5ba95ee", null ], [ "osmo_stream_cli_recv", "group__stream.html#ga06f9743c19068bb720a4949ae8467243", null ], [ "osmo_stream_cli_send", "group__stream.html#gaacf415b97e1184baadeee5c60387422b", null ], [ "osmo_stream_cli_set_addr", "group__stream.html#ga0038e937cf0f36c59e0e3991523219a1", null ], [ "osmo_stream_cli_set_addrs", "group__stream.html#gaab1e7ef0ccc88e124c5f7bbb5e46c29c", null ], [ "osmo_stream_cli_set_connect_cb", "group__stream.html#gab588bfd88a3cc775875981e2ee66e295", null ], [ "osmo_stream_cli_set_data", "group__stream.html#ga5e94c511d537f63337912bb50fb2dc28", null ], [ "osmo_stream_cli_set_disconnect_cb", "group__stream.html#ga23e5c1799a8225607543de39a56ca449", null ], [ "osmo_stream_cli_set_domain", "group__stream.html#ga33ce730fc91ebade9b7188fa220656c6", null ], [ "osmo_stream_cli_set_local_addr", "group__stream.html#ga70420e7c664cc4c4e69ac4d3476e7f53", null ], [ "osmo_stream_cli_set_local_addrs", "group__stream.html#ga090fc3fcd1706b815ef5a729921c100e", null ], [ "osmo_stream_cli_set_local_port", "group__stream.html#ga4d83e3cf7fdf7eb354c2015ff9bed98a", null ], [ "osmo_stream_cli_set_name", "group__stream.html#gaeb712dc553735736047f9b11d9583baa", null ], [ "osmo_stream_cli_set_nodelay", "group__stream.html#gaa196e78db6ca32abb1473566b4f1b04b", null ], [ "osmo_stream_cli_set_port", "group__stream.html#gab8b9f65bebfeb83c6e33d102e9439770", null ], [ "osmo_stream_cli_set_proto", "group__stream.html#ga91d57aa94a370520540d7272af66a23b", null ], [ "osmo_stream_cli_set_read_cb", "group__stream.html#gad1d1817f25694ea126779262cddf4fbd", null ], [ "osmo_stream_cli_set_read_cb2", "group__stream.html#gad4c563e88d269092b0d66f33a4764420", null ], [ "osmo_stream_cli_set_reconnect_timeout", "group__stream.html#gade74792afe35f31dd2584c888db3dd62", null ], [ "osmo_stream_cli_set_type", "group__stream.html#ga5e5c4c9aacc1cd1d303c0295018594cb", null ], [ "osmo_stream_srv_create", "group__stream.html#ga21a5f061ca2cb307906a9552abebb075", null ], [ "osmo_stream_srv_create2", "group__stream.html#ga8be283e1a143e346b4d6ccf33cbb9b98", null ], [ "osmo_stream_srv_destroy", "group__stream.html#ga47f18e063f64f22cb74d58d8b7243bed", null ], [ "osmo_stream_srv_get_data", "group__stream.html#gae2a0ef01097d964c71e38600b4c078d5", null ], [ "osmo_stream_srv_get_master", "group__stream.html#ga9cf689935bf6ffac4f86f56219d73c8e", null ], [ "osmo_stream_srv_get_ofd", "group__stream.html#ga47bbca4f12717db2e6158eefe6310b9b", null ], [ "osmo_stream_srv_link_close", "group__stream.html#gad325d97b09c724e830c98d76b890520d", null ], [ "osmo_stream_srv_link_create", "group__stream.html#gaad262988c7ac365566f03843c560f892", null ], [ "osmo_stream_srv_link_destroy", "group__stream.html#ga882acaaa5935422b0e09a2ce8c8019ec", null ], [ "osmo_stream_srv_link_get_data", "group__stream.html#gacb5d68c2a6a9663f99266c70747bce04", null ], [ "osmo_stream_srv_link_get_ofd", "group__stream.html#ga7b8981351a154c357fcefd39c31ad42a", null ], [ "osmo_stream_srv_link_get_sockname", "group__stream.html#ga7d7b6af7df24e90dc758a088bae6316d", null ], [ "osmo_stream_srv_link_is_opened", "group__stream.html#ga28243be108ed0302b0f5a9d1dfc96b22", null ], [ "osmo_stream_srv_link_open", "group__stream.html#ga603b89074d3e8c0fb44144ab1864f0d4", null ], [ "osmo_stream_srv_link_set_accept_cb", "group__stream.html#ga1eea525d4e1e7a24c9c08881994ceb7e", null ], [ "osmo_stream_srv_link_set_addr", "group__stream.html#gacece90116484e34540def69b05c66f57", null ], [ "osmo_stream_srv_link_set_addrs", "group__stream.html#gaadabca7d23c52c39e291bf7e05f0055b", null ], [ "osmo_stream_srv_link_set_data", "group__stream.html#ga5ef0f0c85a52c08e8c10d36a8f44e392", null ], [ "osmo_stream_srv_link_set_domain", "group__stream.html#ga9629b516297c31f34af48e4630973dab", null ], [ "osmo_stream_srv_link_set_name", "group__stream.html#gadef998825a4739660b198151fcee4201", null ], [ "osmo_stream_srv_link_set_nodelay", "group__stream.html#ga41e8ad2c761aaa00313aa11d1f29a3ed", null ], [ "osmo_stream_srv_link_set_port", "group__stream.html#ga76bbbafd1d8dc9c9ebffd301503b6dd9", null ], [ "osmo_stream_srv_link_set_proto", "group__stream.html#ga2508987133a93863d2a50103004b0f36", null ], [ "osmo_stream_srv_link_set_type", "group__stream.html#ga1903f9aa2e6f9283ebcf20f573b1d970", null ], [ "osmo_stream_srv_recv", "group__stream.html#gac86242c41223c525c770ff7e7515d83e", null ], [ "osmo_stream_srv_send", "group__stream.html#gaa1589994cf6eab27742cafee6b7fb491", null ], [ "osmo_stream_srv_set_closed_cb", "group__stream.html#ga78d44fbda720218be1700d351691e60a", null ], [ "osmo_stream_srv_set_data", "group__stream.html#ga9891663b20714d72f992e44ad1e92eea", null ], [ "osmo_stream_srv_set_flush_and_destroy", "group__stream.html#ga8390ce6740e56eb22215e1c5805c95f1", null ], [ "osmo_stream_srv_set_name", "group__stream.html#ga196834d254fd94922d6be91b7b5b1ed3", null ], [ "osmo_stream_srv_set_read_cb", "group__stream.html#gab98cc1a9428b5ac82fd8255d07563726", null ], [ "osmo_stream_srv_set_segmentation_cb", "group__stream.html#ga27052cc04e7f50b71492d4f8aaf7ed61", null ] ];html/ipa_8h_source.html0000644000175000017500000003301314642372355014433 0ustar buildbuild libosmo-netif: include/osmocom/netif/ipa.h Source File
    libosmo-netif 1.4.0
    Osmocom network interface library
    ipa.h
    1#ifndef _OSMO_NETIF_IPA_H_
    2#define _OSMO_NETIF_IPA_H_
    3
    4#include <osmocom/gsm/protocol/ipaccess.h>
    5#include <osmocom/gsm/ipa.h>
    6
    7/* This is like 'struct ipaccess_head' in libosmocore, but 'ipa_head' is
    8 * actually the more apropriate name, so rather than making more code
    9 * use the wrong name, let's keep the duplicate header definitions below */
    10struct ipa_head {
    11 uint16_t len; /* network byte order */
    12 uint8_t proto;
    13 uint8_t data[0];
    14} __attribute__ ((packed));
    15
    17 uint8_t proto;
    18 uint8_t data[0];
    19} __attribute__ ((packed));
    20
    22 uint8_t proto;
    23 uint8_t proto_ext;
    24} __attribute__ ((packed));
    25
    26#define OSMO_IPA_MSGB_CB(__msg) ((struct osmo_ipa_msgb_cb *)&((__msg)->cb[0]))
    27#define osmo_ipa_msgb_cb_proto(__x) OSMO_IPA_MSGB_CB(__x)->proto
    28#define osmo_ipa_msgb_cb_proto_ext(__x) OSMO_IPA_MSGB_CB(__x)->proto_ext
    29
    30struct msgb *osmo_ipa_msg_alloc(int headroom);
    31struct msgb *osmo_ipa_ext_msg_alloc(size_t headroom);
    32
    33void osmo_ipa_msg_push_header(struct msgb *msg, uint8_t proto);
    34
    35int osmo_ipa_process_msg(struct msgb *msg);
    36
    37struct osmo_fd;
    38struct tlv_parsed;
    39
    40int osmo_ipa_rcvmsg_base(struct msgb *msg, struct osmo_fd *bfd, int server);
    41int osmo_ipa_parse_unitid(const char *str, struct ipaccess_unit *unit_data);
    42
    43int ipaccess_send_pong(int fd);
    44int ipaccess_send_id_ack(int fd);
    45int ipaccess_send_id_req(int fd);
    46
    47struct osmo_ipa_unit;
    48
    49struct msgb *ipa_cli_id_resp(struct osmo_ipa_unit *dev, uint8_t *data, int len);
    50struct msgb *ipa_cli_id_ack(void);
    51
    52int osmo_ipa_parse_msg_id_resp(struct msgb *msg, struct ipaccess_unit *unit_data);
    53
    54int osmo_ipa_segmentation_cb(struct msgb *msg);
    55
    56#endif
    Definition: ipa.h:16
    Definition: ipa.h:10
    Definition: ipa.h:21
    Definition: ipa_unit.c:27
    html/osmux_8c.js0000644000175000017500000000015214642372355013116 0ustar buildbuildvar osmux_8c = [ [ "osmux_snprintf", "group__osmux.html#gaf654e092ca97dd764f59905a2ed21650", null ] ];html/structosmo__stream__srv.html0000644000175000017500000002275314642372355016701 0ustar buildbuild libosmo-netif: osmo_stream_srv Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmo_stream_srv Struct Reference

    Data Fields

    struct osmo_stream_srv_linksrv
     
    char * name
     
    char sockname [OSMO_SOCK_NAME_MAXLEN]
     
    enum osmo_stream_mode mode
     
    union {
       struct osmo_fd   ofd
     
       struct osmo_io_fd *   iofd
     
    }; 
     
    struct llist_head tx_queue
     
    int(* closed_cb )(struct osmo_stream_srv *peer)
     
    int(* read_cb )(struct osmo_stream_srv *peer)
     
    int(* iofd_read_cb )(struct osmo_stream_srv *peer, struct msgb *msg)
     
    void * data
     
    int flags
     

    The documentation for this struct was generated from the following file:
    html/structosmo__ipa__msgb__cb.html0000644000175000017500000001206314642372355017071 0ustar buildbuild libosmo-netif: osmo_ipa_msgb_cb Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmo_ipa_msgb_cb Struct Reference

    Data Fields

    uint8_t proto
     
    uint8_t proto_ext
     

    The documentation for this struct was generated from the following file:
    • include/osmocom/netif/ipa.h
    html/structosmo__prim__pkt__hdr.html0000644000175000017500000001454514642372355017335 0ustar buildbuild libosmo-netif: osmo_prim_pkt_hdr Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmo_prim_pkt_hdr Struct Reference

    Data Fields

    uint32_t sap
     
    uint16_t primitive
     
    uint16_t operation
     

    Field Documentation

    ◆ primitive

    uint16_t osmo_prim_pkt_hdr::primitive

    Primitive number

    ◆ sap

    uint32_t osmo_prim_pkt_hdr::sap

    Service Access Point Identifier


    The documentation for this struct was generated from the following file:
    • src/prim.c
    html/structosmo__ipa__unit.html0000644000175000017500000002141414642372355016315 0ustar buildbuild libosmo-netif: osmo_ipa_unit Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmo_ipa_unit Struct Reference

    Data Fields

    struct llist_head head
     
    uint16_t site_id
     
    uint16_t bts_id
     
    uint16_t trx_id
     
    char * name
     
    char * hwvers
     
    char * swvers
     
    uint8_t mac_addr [6]
     
    char * location1
     
    char * location2
     
    char * serno
     
    uint8_t data [0]
     

    The documentation for this struct was generated from the following file:
    • src/ipa_unit.c
    html/structosmo__dgram.html0000644000175000017500000001405214642372355015440 0ustar buildbuild libosmo-netif: osmo_dgram Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmo_dgram Struct Reference

    Data Fields

    struct osmo_dgram_rxrx
     
    struct osmo_dgram_txtx
     
    int(* read_cb )(struct osmo_dgram *conn)
     
    void * data
     

    The documentation for this struct was generated from the following file:
    html/stream__srv_8c.js0000644000175000017500000000635514642372355014302 0ustar buildbuildvar stream__srv_8c = [ [ "osmo_stream_srv_create", "group__stream.html#ga21a5f061ca2cb307906a9552abebb075", null ], [ "osmo_stream_srv_create2", "group__stream.html#ga8be283e1a143e346b4d6ccf33cbb9b98", null ], [ "osmo_stream_srv_destroy", "group__stream.html#ga47f18e063f64f22cb74d58d8b7243bed", null ], [ "osmo_stream_srv_get_data", "group__stream.html#gae2a0ef01097d964c71e38600b4c078d5", null ], [ "osmo_stream_srv_get_master", "group__stream.html#ga9cf689935bf6ffac4f86f56219d73c8e", null ], [ "osmo_stream_srv_get_ofd", "group__stream.html#ga47bbca4f12717db2e6158eefe6310b9b", null ], [ "osmo_stream_srv_link_close", "group__stream.html#gad325d97b09c724e830c98d76b890520d", null ], [ "osmo_stream_srv_link_create", "group__stream.html#gaad262988c7ac365566f03843c560f892", null ], [ "osmo_stream_srv_link_destroy", "group__stream.html#ga882acaaa5935422b0e09a2ce8c8019ec", null ], [ "osmo_stream_srv_link_get_data", "group__stream.html#gacb5d68c2a6a9663f99266c70747bce04", null ], [ "osmo_stream_srv_link_get_ofd", "group__stream.html#ga7b8981351a154c357fcefd39c31ad42a", null ], [ "osmo_stream_srv_link_get_sockname", "group__stream.html#ga7d7b6af7df24e90dc758a088bae6316d", null ], [ "osmo_stream_srv_link_is_opened", "group__stream.html#ga28243be108ed0302b0f5a9d1dfc96b22", null ], [ "osmo_stream_srv_link_open", "group__stream.html#ga603b89074d3e8c0fb44144ab1864f0d4", null ], [ "osmo_stream_srv_link_set_accept_cb", "group__stream.html#ga1eea525d4e1e7a24c9c08881994ceb7e", null ], [ "osmo_stream_srv_link_set_addr", "group__stream.html#gacece90116484e34540def69b05c66f57", null ], [ "osmo_stream_srv_link_set_addrs", "group__stream.html#gaadabca7d23c52c39e291bf7e05f0055b", null ], [ "osmo_stream_srv_link_set_data", "group__stream.html#ga5ef0f0c85a52c08e8c10d36a8f44e392", null ], [ "osmo_stream_srv_link_set_domain", "group__stream.html#ga9629b516297c31f34af48e4630973dab", null ], [ "osmo_stream_srv_link_set_name", "group__stream.html#gadef998825a4739660b198151fcee4201", null ], [ "osmo_stream_srv_link_set_nodelay", "group__stream.html#ga41e8ad2c761aaa00313aa11d1f29a3ed", null ], [ "osmo_stream_srv_link_set_port", "group__stream.html#ga76bbbafd1d8dc9c9ebffd301503b6dd9", null ], [ "osmo_stream_srv_link_set_proto", "group__stream.html#ga2508987133a93863d2a50103004b0f36", null ], [ "osmo_stream_srv_link_set_type", "group__stream.html#ga1903f9aa2e6f9283ebcf20f573b1d970", null ], [ "osmo_stream_srv_recv", "group__stream.html#gac86242c41223c525c770ff7e7515d83e", null ], [ "osmo_stream_srv_send", "group__stream.html#gaa1589994cf6eab27742cafee6b7fb491", null ], [ "osmo_stream_srv_set_closed_cb", "group__stream.html#ga78d44fbda720218be1700d351691e60a", null ], [ "osmo_stream_srv_set_data", "group__stream.html#ga9891663b20714d72f992e44ad1e92eea", null ], [ "osmo_stream_srv_set_flush_and_destroy", "group__stream.html#ga8390ce6740e56eb22215e1c5805c95f1", null ], [ "osmo_stream_srv_set_name", "group__stream.html#ga196834d254fd94922d6be91b7b5b1ed3", null ], [ "osmo_stream_srv_set_read_cb", "group__stream.html#gab98cc1a9428b5ac82fd8255d07563726", null ], [ "osmo_stream_srv_set_segmentation_cb", "group__stream.html#ga27052cc04e7f50b71492d4f8aaf7ed61", null ] ];html/osmux__output_8c.js0000644000175000017500000000134614642372355014703 0ustar buildbuildvar osmux__output_8c = [ [ "osmux_xfrm_output_alloc", "group__osmux.html#ga41a217bffa1b0ac095c98ab0fab82c25", null ], [ "osmux_xfrm_output_flush", "group__osmux.html#gaaac410425f6470396ae9db53ebb8dc44", null ], [ "osmux_xfrm_output_sched", "group__osmux.html#gafee78ee4522a9caa238301d7b913dfd6", null ], [ "osmux_xfrm_output_set_rtp_msgb_alloc_cb", "group__osmux.html#ga97187827e1f793f2392e54585343db32", null ], [ "osmux_xfrm_output_set_rtp_pl_type", "group__osmux.html#ga0d96c8a544e0ff56576615e0b2ac7774", null ], [ "osmux_xfrm_output_set_rtp_ssrc", "group__osmux.html#ga08151bad3c12df245d4c0e4f9c4ca966", null ], [ "osmux_xfrm_output_set_tx_cb", "group__osmux.html#ga3936e43e881d0992648937417969ead1", null ] ];html/group__datagram.html0000644000175000017500000022231014642372355015036 0ustar buildbuild libosmo-netif: Osmocom Datagram Socket
    libosmo-netif 1.4.0
    Osmocom network interface library
    Osmocom Datagram Socket

    Files

    file  datagram.c
     Osmocom datagram socket helpers.
     

    Data Structures

    struct  osmo_dgram_tx
     
    struct  osmo_dgram_rx
     
    struct  osmo_dgram
     

    Macros

    #define OSMO_DGRAM_CLI_F_RECONF   (1 << 0)
     
    #define OSMO_DGRAM_RX_F_RECONF   (1 << 0)
     

    Functions

    void osmo_dgram_tx_close (struct osmo_dgram_tx *conn)
     Close an Osmocom Datagram Transmitter. More...
     
    static int osmo_dgram_tx_write (struct osmo_dgram_tx *conn)
     
    static int osmo_dgram_tx_fd_cb (struct osmo_fd *ofd, unsigned int what)
     
    struct osmo_dgram_txosmo_dgram_tx_create (void *ctx)
     Create an Osmocom datagram transmitter. More...
     
    void osmo_dgram_tx_set_addr (struct osmo_dgram_tx *conn, const char *addr)
     Set the remote address to which we transmit. More...
     
    void osmo_dgram_tx_set_port (struct osmo_dgram_tx *conn, uint16_t port)
     Set the remote port to which we transmit. More...
     
    void osmo_dgram_tx_set_local_addr (struct osmo_dgram_tx *conn, const char *addr)
     Set the local address from which we transmit. More...
     
    void osmo_dgram_tx_set_local_port (struct osmo_dgram_tx *conn, uint16_t port)
     Set the local port from which we transmit. More...
     
    void osmo_dgram_tx_set_data (struct osmo_dgram_tx *conn, void *data)
     Set application private data of the datagram transmitter. More...
     
    void osmo_dgram_tx_destroy (struct osmo_dgram_tx *conn)
     Destroy a Osmocom datagram transmitter. More...
     
    int osmo_dgram_tx_open (struct osmo_dgram_tx *conn)
     Open connection of an Osmocom datagram transmitter. More...
     
    void osmo_dgram_tx_send (struct osmo_dgram_tx *conn, struct msgb *msg)
     Enqueue data to be sent via an Osmocom datagram transmitter. More...
     
    int osmo_dgram_rx_recv (struct osmo_dgram_rx *conn, struct msgb *msg)
     Receive data via Osmocom datagram receiver. More...
     
    static void osmo_dgram_rx_read (struct osmo_dgram_rx *conn)
     
    static int osmo_dgram_rx_cb (struct osmo_fd *ofd, unsigned int what)
     
    struct osmo_dgram_rxosmo_dgram_rx_create (void *ctx)
     Create an Osmocom datagram receiver. More...
     
    void osmo_dgram_rx_set_addr (struct osmo_dgram_rx *conn, const char *addr)
     Set the local address to which we bind. More...
     
    void osmo_dgram_rx_set_port (struct osmo_dgram_rx *conn, uint16_t port)
     Set the local port to which we bind. More...
     
    void osmo_dgram_rx_set_read_cb (struct osmo_dgram_rx *conn, int(*read_cb)(struct osmo_dgram_rx *conn))
     Set the read() call-back of the datagram receiver. More...
     
    void osmo_dgram_rx_destroy (struct osmo_dgram_rx *conn)
     Destroy the datagram receiver. Releases Memory. More...
     
    int osmo_dgram_rx_open (struct osmo_dgram_rx *conn)
     Open the datagram receiver. This actually initializes the underlying socket and binds it to the configured ip/port. More...
     
    void osmo_dgram_rx_close (struct osmo_dgram_rx *conn)
     Close the datagram receiver and unregister from select loop Does not destroy the datagram receiver, merely closes it! More...
     
    static int dgram_rx_cb (struct osmo_dgram_rx *rx)
     
    struct osmo_dgramosmo_dgram_create (void *ctx)
     Create an Osmocom datagram transceiver (bidirectional) More...
     
    void osmo_dgram_destroy (struct osmo_dgram *conn)
     Destroy a Osmocom datagram transceiver. More...
     
    void osmo_dgram_set_local_addr (struct osmo_dgram *conn, const char *addr)
     Set the local address to which we bind. More...
     
    void osmo_dgram_set_remote_addr (struct osmo_dgram *conn, const char *addr)
     Set the remote address to which we transmit/connect. More...
     
    void osmo_dgram_set_local_port (struct osmo_dgram *conn, uint16_t port)
     Set the local port to which we bind. More...
     
    void osmo_dgram_set_remote_port (struct osmo_dgram *conn, uint16_t port)
     Set the remote port to which we transmit. More...
     
    void osmo_dgram_set_read_cb (struct osmo_dgram *conn, int(*read_cb)(struct osmo_dgram *conn))
     Set the read() call-back of the datagram receiver. More...
     
    void osmo_dgram_set_data (struct osmo_dgram *conn, void *data)
     Set application private data of the datagram transmitter. More...
     
    void * osmo_dgram_get_data (struct osmo_dgram *conn)
     Get application private data of the datagram transceiver. More...
     
    int osmo_dgram_open (struct osmo_dgram *conn)
     Open the datagram transceiver. This actually initializes the underlying sockets and binds/connects them to the configured ips/ports. More...
     
    void osmo_dgram_close (struct osmo_dgram *conn)
     Close an Osmocom Datagram Transceiver. More...
     
    void osmo_dgram_send (struct osmo_dgram *conn, struct msgb *msg)
     Enqueue data to be sent via an Osmocom datagram transceiver. More...
     
    int osmo_dgram_recv (struct osmo_dgram *conn, struct msgb *msg)
     Receive data via Osmocom datagram transceiver. More...
     

    Detailed Description

    This code is intended to abstract any use of datagram type sockets, such as UDP. It offers both transmitter and receiver side implementations, fully integrated with the libosmocore select loop abstraction.

    Function Documentation

    ◆ osmo_dgram_close()

    void osmo_dgram_close ( struct osmo_dgram conn)

    Close an Osmocom Datagram Transceiver.

    Parameters
    [in]connOsmocom Datagram Transceiver to be closed We unregister the socket fds from the osmocom select() loop and close them.

    References osmo_dgram_rx_close(), and osmo_dgram_tx_close().

    ◆ osmo_dgram_create()

    struct osmo_dgram * osmo_dgram_create ( void *  ctx)

    Create an Osmocom datagram transceiver (bidirectional)

    Parameters
    [in]ctxtalloc context from which to allocate memory This function allocates a new osmo_dgram and initializes it with default values. Internally, the Transceiver is based on a tuple of transmitter (osmo_dgram_tx) and receiver (osmo_dgram_rx)
    Returns
    Osmocom Datagram Transceiver; NULL on error

    References osmo_dgram_rx_create(), and osmo_dgram_rx_set_read_cb().

    ◆ osmo_dgram_destroy()

    void osmo_dgram_destroy ( struct osmo_dgram conn)

    Destroy a Osmocom datagram transceiver.

    Parameters
    [in]connDatagram Transceiver to destroy

    References osmo_dgram_rx_destroy(), and osmo_dgram_tx_destroy().

    ◆ osmo_dgram_get_data()

    void * osmo_dgram_get_data ( struct osmo_dgram conn)

    Get application private data of the datagram transceiver.

    Parameters
    [in]connDatagram Transceiver
    Returns
    Application private data, as set by osmo_dgram_set_data()

    ◆ osmo_dgram_open()

    int osmo_dgram_open ( struct osmo_dgram conn)

    Open the datagram transceiver. This actually initializes the underlying sockets and binds/connects them to the configured ips/ports.

    Parameters
    [in]connDatagram Transceiver to open

    References osmo_dgram_rx_close(), osmo_dgram_rx_open(), and osmo_dgram_tx_open().

    ◆ osmo_dgram_recv()

    int osmo_dgram_recv ( struct osmo_dgram conn,
    struct msgb *  msg 
    )

    Receive data via Osmocom datagram transceiver.

    Parameters
    [in]connDatagram Transceiver from which to receive
    msgpre-allocate message buffer to which received data is appended
    Returns
    number of bytes read, negative on error.

    References osmo_dgram_rx_recv().

    ◆ osmo_dgram_rx_close()

    void osmo_dgram_rx_close ( struct osmo_dgram_rx conn)

    Close the datagram receiver and unregister from select loop Does not destroy the datagram receiver, merely closes it!

    Parameters
    [in]connStream Server Link to close

    Referenced by osmo_dgram_close(), osmo_dgram_open(), and osmo_dgram_rx_destroy().

    ◆ osmo_dgram_rx_create()

    struct osmo_dgram_rx * osmo_dgram_rx_create ( void *  ctx)

    Create an Osmocom datagram receiver.

    Parameters
    [in]ctxtalloc context from which to allocate memory This function allocates a new osmo_dgram_rx and initializes it with default values
    Returns
    Datagram Receiver; NULL on error

    Referenced by osmo_dgram_create().

    ◆ osmo_dgram_rx_destroy()

    void osmo_dgram_rx_destroy ( struct osmo_dgram_rx conn)

    Destroy the datagram receiver. Releases Memory.

    Parameters
    [in]connDatagram Receiver

    References osmo_dgram_rx_close().

    Referenced by osmo_dgram_destroy().

    ◆ osmo_dgram_rx_open()

    int osmo_dgram_rx_open ( struct osmo_dgram_rx conn)

    Open the datagram receiver. This actually initializes the underlying socket and binds it to the configured ip/port.

    Parameters
    [in]connDatagram Receiver to open

    Referenced by osmo_dgram_open().

    ◆ osmo_dgram_rx_recv()

    int osmo_dgram_rx_recv ( struct osmo_dgram_rx conn,
    struct msgb *  msg 
    )

    Receive data via Osmocom datagram receiver.

    Parameters
    [in]connDatagram Receiver from which to receive
    msgpre-allocate message buffer to which received data is appended
    Returns
    number of bytes read (might be 0 for empty UDP packet), negative on error.

    Referenced by osmo_dgram_recv().

    ◆ osmo_dgram_rx_set_addr()

    void osmo_dgram_rx_set_addr ( struct osmo_dgram_rx conn,
    const char *  addr 
    )

    Set the local address to which we bind.

    Parameters
    [in]connDatagram Receiver to modify
    [in]addrLocal IP address

    Referenced by osmo_dgram_set_local_addr().

    ◆ osmo_dgram_rx_set_port()

    void osmo_dgram_rx_set_port ( struct osmo_dgram_rx conn,
    uint16_t  port 
    )

    Set the local port to which we bind.

    Parameters
    [in]connDatagram Receiver to modify
    [in]portLocal port number

    Referenced by osmo_dgram_set_local_port().

    ◆ osmo_dgram_rx_set_read_cb()

    void osmo_dgram_rx_set_read_cb ( struct osmo_dgram_rx conn,
    int(*)(struct osmo_dgram_rx *conn)  read_cb 
    )

    Set the read() call-back of the datagram receiver.

    Parameters
    [in]connDatagram Receiver to modify
    [in]read_cbCall-back function executed after read()

    Referenced by osmo_dgram_create().

    ◆ osmo_dgram_send()

    void osmo_dgram_send ( struct osmo_dgram conn,
    struct msgb *  msg 
    )

    Enqueue data to be sent via an Osmocom datagram transceiver.

    Parameters
    [in]connDatagram Transceiver through which we want to send
    [in]msgMessage buffer to enqueue in transmit queue

    References osmo_dgram_tx_send().

    ◆ osmo_dgram_set_data()

    void osmo_dgram_set_data ( struct osmo_dgram conn,
    void *  data 
    )

    Set application private data of the datagram transmitter.

    Parameters
    [in]connDatagram Transmitter to modify
    [in]dataUser-specific data (available in call-back functions)

    ◆ osmo_dgram_set_local_addr()

    void osmo_dgram_set_local_addr ( struct osmo_dgram conn,
    const char *  addr 
    )

    Set the local address to which we bind.

    Parameters
    [in]connDatagram Transceiver to modify
    [in]addrLocal IP address

    References osmo_dgram_rx_set_addr().

    ◆ osmo_dgram_set_local_port()

    void osmo_dgram_set_local_port ( struct osmo_dgram conn,
    uint16_t  port 
    )

    Set the local port to which we bind.

    Parameters
    [in]connDatagram Transceiver to modify
    [in]portLocal Port Number

    References osmo_dgram_rx_set_port().

    ◆ osmo_dgram_set_read_cb()

    void osmo_dgram_set_read_cb ( struct osmo_dgram conn,
    int(*)(struct osmo_dgram *conn)  read_cb 
    )

    Set the read() call-back of the datagram receiver.

    Parameters
    [in]connDatagram Receiver to modify
    [in]read_cbCall-back function executed after read()

    ◆ osmo_dgram_set_remote_addr()

    void osmo_dgram_set_remote_addr ( struct osmo_dgram conn,
    const char *  addr 
    )

    Set the remote address to which we transmit/connect.

    Parameters
    [in]connDatagram Transceiver to modify
    [in]addrRemote IP address

    References osmo_dgram_tx_set_addr().

    ◆ osmo_dgram_set_remote_port()

    void osmo_dgram_set_remote_port ( struct osmo_dgram conn,
    uint16_t  port 
    )

    Set the remote port to which we transmit.

    Parameters
    [in]connDatagram Transceiver to modify
    [in]portRemote Port Number

    References osmo_dgram_tx_set_port().

    ◆ osmo_dgram_tx_close()

    void osmo_dgram_tx_close ( struct osmo_dgram_tx conn)

    Close an Osmocom Datagram Transmitter.

    Parameters
    [in]connOsmocom Datagram Transmitter to be closed We unregister the socket fd from the osmocom select() loop abstraction and close the socket

    Referenced by osmo_dgram_close(), and osmo_dgram_tx_destroy().

    ◆ osmo_dgram_tx_create()

    struct osmo_dgram_tx * osmo_dgram_tx_create ( void *  ctx)

    Create an Osmocom datagram transmitter.

    Parameters
    [in]ctxtalloc context from which to allocate memory This function allocates a new osmo_dgram_tx and initializes it with default values
    Returns
    Osmocom Datagram Transmitter; NULL on error

    ◆ osmo_dgram_tx_destroy()

    void osmo_dgram_tx_destroy ( struct osmo_dgram_tx conn)

    Destroy a Osmocom datagram transmitter.

    Parameters
    [in]connDatagram Transmitter to destroy

    References osmo_dgram_tx_close().

    Referenced by osmo_dgram_destroy().

    ◆ osmo_dgram_tx_open()

    int osmo_dgram_tx_open ( struct osmo_dgram_tx conn)

    Open connection of an Osmocom datagram transmitter.

    Parameters
    [in]connStream Client to connect
    Returns
    0 on success; negative in case of error

    Referenced by osmo_dgram_open().

    ◆ osmo_dgram_tx_send()

    void osmo_dgram_tx_send ( struct osmo_dgram_tx conn,
    struct msgb *  msg 
    )

    Enqueue data to be sent via an Osmocom datagram transmitter.

    Parameters
    [in]connDatagram Transmitter through which we want to send
    [in]msgMessage buffer to enqueue in transmit queue

    Referenced by osmo_dgram_send().

    ◆ osmo_dgram_tx_set_addr()

    void osmo_dgram_tx_set_addr ( struct osmo_dgram_tx conn,
    const char *  addr 
    )

    Set the remote address to which we transmit.

    Parameters
    [in]connDatagram Transmitter to modify
    [in]addrRemote IP address

    Referenced by osmo_dgram_set_remote_addr().

    ◆ osmo_dgram_tx_set_data()

    void osmo_dgram_tx_set_data ( struct osmo_dgram_tx conn,
    void *  data 
    )

    Set application private data of the datagram transmitter.

    Parameters
    [in]connDatagram Transmitter to modify
    [in]dataUser-specific data (available in call-back functions)

    ◆ osmo_dgram_tx_set_local_addr()

    void osmo_dgram_tx_set_local_addr ( struct osmo_dgram_tx conn,
    const char *  addr 
    )

    Set the local address from which we transmit.

    Parameters
    [in]connDatagram Transmitter to modify
    [in]addrLocal IP address

    ◆ osmo_dgram_tx_set_local_port()

    void osmo_dgram_tx_set_local_port ( struct osmo_dgram_tx conn,
    uint16_t  port 
    )

    Set the local port from which we transmit.

    Parameters
    [in]connDatagram Transmitter to modify
    [in]portLocal Port Number

    ◆ osmo_dgram_tx_set_port()

    void osmo_dgram_tx_set_port ( struct osmo_dgram_tx conn,
    uint16_t  port 
    )

    Set the remote port to which we transmit.

    Parameters
    [in]connDatagram Transmitter to modify
    [in]portRemote Port Number

    Referenced by osmo_dgram_set_remote_port().

    html/structosmux__link.html0000644000175000017500000001702514642372355015504 0ustar buildbuild libosmo-netif: osmux_link Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmux_link Struct Reference

    Data Fields

    struct osmo_timer_list timer
     
    struct osmux_hdrosmuxh
     
    struct llist_head circuit_list
     
    unsigned int remaining_bytes
     
    uint32_t nmsgs
     
    int ndummy
     
    char * name
     
    struct osmux_in_handleh
     

    The documentation for this struct was generated from the following file:
    html/structosmo__dgram__tx.html0000644000175000017500000001754714642372355016326 0ustar buildbuild libosmo-netif: osmo_dgram_tx Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmo_dgram_tx Struct Reference

    Data Fields

    struct osmo_fd ofd
     
    struct llist_head tx_queue
     
    char * addr
     
    uint16_t port
     
    char * local_addr
     
    uint16_t local_port
     
    int(* write_cb )(struct osmo_dgram_tx *conn)
     
    void * data
     
    unsigned int flags
     

    The documentation for this struct was generated from the following file:
    html/osmux__output_8c.html0000644000175000017500000003721714642372355015241 0ustar buildbuild libosmo-netif: src/osmux_output.c File Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmux_output.c File Reference

    Osmocom multiplex protocol helpers (output) More...

    #include <stdio.h>
    #include <string.h>
    #include <osmocom/core/msgb.h>
    #include <osmocom/core/timer.h>
    #include <osmocom/core/timer_compat.h>
    #include <osmocom/core/select.h>
    #include <osmocom/core/talloc.h>
    #include <osmocom/core/logging.h>
    #include <osmocom/netif/amr.h>
    #include <osmocom/netif/rtp.h>
    #include <osmocom/netif/osmux.h>
    #include <arpa/inet.h>

    Data Structures

    struct  osmux_tx_handle
     

    Macros

    #define DELTA_RTP_MSG   20000
     
    #define DELTA_RTP_TIMESTAMP   160
     

    Functions

    static uint32_t osmux_ft_dummy_size (uint8_t amr_ft, uint8_t batch_factor)
     
    struct osmux_hdrosmux_xfrm_output_pull (struct msgb *msg)
     
    static struct msgb * osmux_rebuild_rtp (struct osmux_out_handle *h, struct osmux_hdr *osmuxh, void *payload, int payload_len, bool first_pkt)
     
    static void osmux_xfrm_output_trigger (void *data)
     
    int osmux_xfrm_output_sched (struct osmux_out_handle *h, struct osmux_hdr *osmuxh)
     Generate RTP packets from osmux frame AMR payload set and schedule them for transmission at appropriate time. More...
     
    void osmux_xfrm_output_flush (struct osmux_out_handle *h)
     Flush all scheduled RTP packets still pending to be transmitted. More...
     
    static int osmux_xfrm_output_talloc_destructor (struct osmux_out_handle *h)
     
    static void _osmux_xfrm_output_init (struct osmux_out_handle *h, uint32_t rtp_ssrc, uint8_t rtp_payload_type)
     
    struct osmux_out_handleosmux_xfrm_output_alloc (void *ctx)
     Allocate a new osmux out handle. More...
     
    void osmux_xfrm_output_init2 (struct osmux_out_handle *h, uint32_t rtp_ssrc, uint8_t rtp_payload_type) OSMO_DEPRECATED("Use osmux_xfrm_output_alloc() and osmux_xfrm_output_set_rtp_*() instead")
     
    void osmux_xfrm_output_init (struct osmux_out_handle *h, uint32_t rtp_ssrc) OSMO_DEPRECATED("Use osmux_xfrm_output_alloc() and osmux_xfrm_output_set_rtp_*() instead")
     
    void osmux_xfrm_output_set_tx_cb (struct osmux_out_handle *h, void(*tx_cb)(struct msgb *msg, void *data), void *data)
     Set transmission callback to call when a generated RTP packet is to be transmitted. More...
     
    void osmux_xfrm_output_set_rtp_msgb_alloc_cb (struct osmux_out_handle *h, rtp_msgb_alloc_cb_t cb, void *cb_data)
     Set callback to call when an RTP packet to be generated is to be allocated. More...
     
    void osmux_xfrm_output_set_rtp_ssrc (struct osmux_out_handle *h, uint32_t rtp_ssrc)
     Set SSRC of generated RTP packets from Osmux frames. More...
     
    void osmux_xfrm_output_set_rtp_pl_type (struct osmux_out_handle *h, uint32_t rtp_payload_type)
     Set Payload Type of generated RTP packets from Osmux frames. More...
     

    Detailed Description

    Osmocom multiplex protocol helpers (output)

    html/jibuf_8h.js0000644000175000017500000000142114642372355013047 0ustar buildbuildvar jibuf_8h = [ [ "osmo_jibuf_alloc", "group__jibuf.html#ga20592f230f9d1233752fd318996f2c9d", null ], [ "osmo_jibuf_delete", "group__jibuf.html#gacdac7beaf3d97543718ddfa33123fb7e", null ], [ "osmo_jibuf_empty", "group__jibuf.html#gae73a3b805b83f453339adeee9cdfaba4", null ], [ "osmo_jibuf_enable_skew_compensation", "group__jibuf.html#ga096e87b2dbdade72c35d51a51fe57839", null ], [ "osmo_jibuf_enqueue", "group__jibuf.html#ga522165ddc51578436ae2d26691fa7ec0", null ], [ "osmo_jibuf_set_dequeue_cb", "group__jibuf.html#ga3a8213fe8bed42d649fcb1c8d13e23d8", null ], [ "osmo_jibuf_set_max_delay", "group__jibuf.html#ga5e84571c3348525b6ad647a22cd2581d", null ], [ "osmo_jibuf_set_min_delay", "group__jibuf.html#gabcd63f39049bc4d6b3541a674b78963d", null ] ];html/stream_8h_source.html0000644000175000017500000021041614642372355015161 0ustar buildbuild libosmo-netif: include/osmocom/netif/stream.h Source File
    libosmo-netif 1.4.0
    Osmocom network interface library
    stream.h
    1#pragma once
    2
    3#include <stdbool.h>
    4#include <stdint.h>
    5#include <unistd.h>
    6
    7#include <osmocom/core/msgb.h>
    8
    14#define OSMO_STREAM_SCTP_MSG_FLAGS_NOTIFICATION 0x80 /* sctp_recvmsg() flags=MSG_NOTIFICATION, msgb_data() contains "union sctp_notification*" */
    15#define msgb_sctp_msg_flags(msg) (msg)->cb[2]
    16
    18#define msgb_sctp_ppid(msg) (msg)->cb[3]
    20#define msgb_sctp_stream(msg) (msg)->cb[4]
    21
    24
    27
    28void osmo_stream_srv_link_set_name(struct osmo_stream_srv_link *link, const char *name);
    29void osmo_stream_srv_link_set_nodelay(struct osmo_stream_srv_link *link, bool nodelay);
    30void osmo_stream_srv_link_set_addr(struct osmo_stream_srv_link *link, const char *addr);
    31int osmo_stream_srv_link_set_addrs(struct osmo_stream_srv_link *link, const char **addr, size_t addrcnt);
    32void osmo_stream_srv_link_set_port(struct osmo_stream_srv_link *link, uint16_t port);
    33void osmo_stream_srv_link_set_proto(struct osmo_stream_srv_link *link, uint16_t proto);
    34int osmo_stream_srv_link_set_type(struct osmo_stream_srv_link *link, int type);
    35int osmo_stream_srv_link_set_domain(struct osmo_stream_srv_link *link, int domain);
    36void osmo_stream_srv_link_set_accept_cb(struct osmo_stream_srv_link *link, int (*accept_cb)(struct osmo_stream_srv_link *link, int fd));
    37void osmo_stream_srv_link_set_data(struct osmo_stream_srv_link *link, void *data);
    40struct osmo_fd *osmo_stream_srv_link_get_ofd(struct osmo_stream_srv_link *link);
    44
    45enum osmo_stream_srv_link_param {
    46 OSMO_STREAM_SRV_LINK_PAR_SCTP_SOCKOPT_AUTH_SUPPORTED, /* uint8_t: 0 disable, 1 enable, 2 force disable, 3 force enable */
    47 OSMO_STREAM_SRV_LINK_PAR_SCTP_SOCKOPT_ASCONF_SUPPORTED, /* uint8_t: 0 disable, 1 enable, 2 force disable, 3 force enable */
    48 OSMO_STREAM_SRV_LINK_PAR_SCTP_INIT_NUM_OSTREAMS, /* uint16_t: amount of streams */
    49 OSMO_STREAM_SRV_LINK_PAR_SCTP_INIT_MAX_INSTREAMS, /* uint16_t: amount of streams */
    50};
    51
    52int osmo_stream_srv_link_set_param(struct osmo_stream_srv_link *link, enum osmo_stream_srv_link_param par,
    53 void *val, size_t val_len);
    54
    57struct osmo_stream_srv;
    58
    59struct osmo_stream_srv *osmo_stream_srv_create(void *ctx, struct osmo_stream_srv_link *link, int fd, int (*read_cb)(struct osmo_stream_srv *conn), int (*closed_cb)(struct osmo_stream_srv *conn), void *data);
    60struct osmo_stream_srv *osmo_stream_srv_create2(void *ctx, struct osmo_stream_srv_link *link, int fd, void *data);
    61void osmo_stream_srv_set_name(struct osmo_stream_srv *conn, const char *name);
    62void osmo_stream_srv_set_read_cb(struct osmo_stream_srv *conn, int (*read_cb)(struct osmo_stream_srv *conn, struct msgb *msg));
    63void osmo_stream_srv_set_closed_cb(struct osmo_stream_srv *conn, int (*closed_cb)(struct osmo_stream_srv *conn));
    66struct osmo_fd *osmo_stream_srv_get_ofd(struct osmo_stream_srv *srv);
    68
    70void osmo_stream_srv_set_data(struct osmo_stream_srv *conn, void *data);
    71
    73 int (*segmentation_cb)(struct msgb *msg));
    74
    75void osmo_stream_srv_send(struct osmo_stream_srv *conn, struct msgb *msg);
    76int osmo_stream_srv_recv(struct osmo_stream_srv *conn, struct msgb *msg);
    77
    78void osmo_stream_srv_clear_tx_queue(struct osmo_stream_srv *conn);
    79
    81struct osmo_stream_cli;
    82
    83void osmo_stream_cli_set_name(struct osmo_stream_cli *cli, const char *name);
    84void osmo_stream_cli_set_nodelay(struct osmo_stream_cli *cli, bool nodelay);
    85void osmo_stream_cli_set_addr(struct osmo_stream_cli *cli, const char *addr);
    86int osmo_stream_cli_set_addrs(struct osmo_stream_cli *cli, const char **addr, size_t addrcnt);
    87void osmo_stream_cli_set_port(struct osmo_stream_cli *cli, uint16_t port);
    88int osmo_stream_cli_set_type(struct osmo_stream_cli *cli, int type);
    89int osmo_stream_cli_set_domain(struct osmo_stream_cli *cli, int domain);
    90void osmo_stream_cli_set_proto(struct osmo_stream_cli *cli, uint16_t proto);
    91void osmo_stream_cli_set_local_addr(struct osmo_stream_cli *cli, const char *addr);
    92int osmo_stream_cli_set_local_addrs(struct osmo_stream_cli *cli, const char **addr, size_t addrcnt);
    93void osmo_stream_cli_set_local_port(struct osmo_stream_cli *cli, uint16_t port);
    94void osmo_stream_cli_set_data(struct osmo_stream_cli *cli, void *data);
    95void osmo_stream_cli_set_reconnect_timeout(struct osmo_stream_cli *cli, int timeout);
    97char *osmo_stream_cli_get_sockname(const struct osmo_stream_cli *cli);
    98struct osmo_fd *osmo_stream_cli_get_ofd(struct osmo_stream_cli *cli);
    99void osmo_stream_cli_set_connect_cb(struct osmo_stream_cli *cli, int (*connect_cb)(struct osmo_stream_cli *cli));
    100void osmo_stream_cli_set_disconnect_cb(struct osmo_stream_cli *cli, int (*disconnect_cb)(struct osmo_stream_cli *cli));
    101void osmo_stream_cli_set_read_cb(struct osmo_stream_cli *cli, int (*read_cb)(struct osmo_stream_cli *cli));
    102void osmo_stream_cli_set_read_cb2(struct osmo_stream_cli *cli, int (*read_cb)(struct osmo_stream_cli *cli, struct msgb *msg));
    105
    106struct osmo_stream_cli *osmo_stream_cli_create(void *ctx);
    108
    110int osmo_stream_cli_open2(struct osmo_stream_cli *cli, int reconnect) \
    111 OSMO_DEPRECATED("Use osmo_stream_cli_set_reconnect_timeout() or osmo_stream_cli_reconnect() instead");
    112void osmo_stream_cli_close(struct osmo_stream_cli *cli);
    113
    114void osmo_stream_cli_send(struct osmo_stream_cli *cli, struct msgb *msg);
    115int osmo_stream_cli_recv(struct osmo_stream_cli *cli, struct msgb *msg);
    116
    117void osmo_stream_cli_clear_tx_queue(struct osmo_stream_cli *cli);
    118
    119enum osmo_stream_cli_param {
    120 OSMO_STREAM_CLI_PAR_SCTP_SOCKOPT_AUTH_SUPPORTED, /* uint8_t: 0 disable, 1 enable, 2 force disable, 3 force enable */
    121 OSMO_STREAM_CLI_PAR_SCTP_SOCKOPT_ASCONF_SUPPORTED, /* uint8_t: 0 disable, 1 enable, 2 force disable, 3 force enable */
    122 OSMO_STREAM_CLI_PAR_SCTP_INIT_NUM_OSTREAMS, /* uint16_t: amount of streams */
    123 OSMO_STREAM_CLI_PAR_SCTP_INIT_MAX_INSTREAMS, /* uint16_t: amount of streams */
    124 OSMO_STREAM_CLI_PAR_SCTP_INIT_MAX_ATTEMPTS, /* uint16_t: amount of attempts */
    125 OSMO_STREAM_CLI_PAR_SCTP_INIT_TIMEOUT, /* uint16_t: milliseconds */
    126};
    127
    128int osmo_stream_cli_set_param(struct osmo_stream_cli *cli, enum osmo_stream_cli_param par,
    129 void *val, size_t val_len);
    130
    void osmo_stream_cli_set_addr(struct osmo_stream_cli *cli, const char *addr)
    Set the remote address to which we connect.
    Definition: stream_cli.c:490
    struct osmo_fd * osmo_stream_cli_get_ofd(struct osmo_stream_cli *cli)
    Get Osmocom File Descriptor of the stream client socket.
    Definition: stream_cli.c:670
    int osmo_stream_cli_recv(struct osmo_stream_cli *cli, struct msgb *msg)
    Receive data via an Osmocom stream client.
    Definition: stream_cli.c:936
    int osmo_stream_cli_set_local_addrs(struct osmo_stream_cli *cli, const char **addr, size_t addrcnt)
    Set the local address set to which we connect. Useful for protocols allowing bind to more than one ad...
    Definition: stream_cli.c:558
    void osmo_stream_cli_reconnect(struct osmo_stream_cli *cli)
    Re-connect an Osmocom Stream Client If re-connection is enabled for this client (which is the case un...
    Definition: stream_cli.c:134
    int osmo_stream_cli_open2(struct osmo_stream_cli *cli, int reconnect) OSMO_DEPRECATED("Use osmo_stream_cli_set_reconnect_timeout() or osmo_stream_cli_reconnect() instead")
    DEPRECATED: use osmo_stream_cli_set_reconnect_timeout() or osmo_stream_cli_reconnect() instead!...
    Definition: stream_cli.c:737
    struct osmo_stream_cli * osmo_stream_cli_create(void *ctx)
    Create an Osmocom stream client.
    Definition: stream_cli.c:406
    int osmo_stream_srv_link_set_type(struct osmo_stream_srv_link *link, int type)
    Set the socket type for the stream server link.
    Definition: stream_srv.c:288
    void osmo_stream_srv_set_name(struct osmo_stream_srv *conn, const char *name)
    Set a name on the srv object (used during logging)
    Definition: stream_srv.c:756
    void osmo_stream_srv_link_set_accept_cb(struct osmo_stream_srv_link *link, int(*accept_cb)(struct osmo_stream_srv_link *link, int fd))
    Set the accept() call-back of the stream server link.
    Definition: stream_srv.c:372
    struct osmo_stream_srv * osmo_stream_srv_create(void *ctx, struct osmo_stream_srv_link *link, int fd, int(*read_cb)(struct osmo_stream_srv *conn), int(*closed_cb)(struct osmo_stream_srv *conn), void *data)
    Create a Stream Server inside the specified link.
    Definition: stream_srv.c:682
    void osmo_stream_cli_set_disconnect_cb(struct osmo_stream_cli *cli, int(*disconnect_cb)(struct osmo_stream_cli *cli))
    Set the call-back function called on disconnect of the stream client socket.
    Definition: stream_cli.c:689
    void osmo_stream_srv_link_set_proto(struct osmo_stream_srv_link *link, uint16_t proto)
    Set the protocol for the stream server link.
    Definition: stream_srv.c:275
    void osmo_stream_srv_set_segmentation_cb(struct osmo_stream_srv *conn, int(*segmentation_cb)(struct msgb *msg))
    Set the segmentation callback for target osmo_stream_srv structure. The connection has to have been e...
    Definition: stream_srv.c:806
    bool osmo_stream_srv_link_is_opened(const struct osmo_stream_srv_link *link)
    Check whether the stream server link is opened.
    Definition: stream_srv.c:444
    int osmo_stream_cli_set_domain(struct osmo_stream_cli *cli, int domain)
    Set the socket type for the stream server link.
    Definition: stream_cli.c:612
    void osmo_stream_srv_link_set_nodelay(struct osmo_stream_srv_link *link, bool nodelay)
    Set the NODELAY socket option to avoid Nagle-like behavior Setting this to nodelay=true will automati...
    Definition: stream_srv.c:216
    struct osmo_fd * osmo_stream_srv_get_ofd(struct osmo_stream_srv *srv)
    Get Osmocom File Descriptor of the stream server.
    Definition: stream_srv.c:831
    void osmo_stream_srv_destroy(struct osmo_stream_srv *conn)
    Destroy given Stream Server This function closes the Stream Server socket, unregisters from select lo...
    Definition: stream_srv.c:850
    void osmo_stream_cli_set_local_port(struct osmo_stream_cli *cli, uint16_t port)
    Set the local port number for the socket (to be bound to)
    Definition: stream_cli.c:536
    int osmo_stream_cli_set_type(struct osmo_stream_cli *cli, int type)
    Set the socket type for the stream server link.
    Definition: stream_cli.c:593
    void osmo_stream_cli_set_data(struct osmo_stream_cli *cli, void *data)
    Set application private data of the stream client socket.
    Definition: stream_cli.c:641
    void osmo_stream_srv_link_set_data(struct osmo_stream_srv_link *link, void *data)
    Set application private data of the stream server link.
    Definition: stream_srv.c:327
    int osmo_stream_srv_link_open(struct osmo_stream_srv_link *link)
    Open the stream server link. This actually initializes the underlying socket and binds it to the conf...
    Definition: stream_srv.c:391
    void * osmo_stream_cli_get_data(struct osmo_stream_cli *cli)
    Get application private data of the stream client socket.
    Definition: stream_cli.c:649
    void osmo_stream_cli_set_local_addr(struct osmo_stream_cli *cli, const char *addr)
    Set the local address for the socket (to be bound to)
    Definition: stream_cli.c:547
    void osmo_stream_srv_link_set_port(struct osmo_stream_srv_link *link, uint16_t port)
    Set the local port number to which we bind.
    Definition: stream_srv.c:263
    void osmo_stream_srv_set_closed_cb(struct osmo_stream_srv *conn, int(*closed_cb)(struct osmo_stream_srv *conn))
    Set the call-back function called when the stream server socket was closed.
    Definition: stream_srv.c:776
    bool osmo_stream_cli_is_connected(struct osmo_stream_cli *cli)
    Check if Osmocom Stream Client is in connected state.
    Definition: stream_cli.c:153
    struct osmo_fd * osmo_stream_srv_link_get_ofd(struct osmo_stream_srv_link *link)
    Get Osmocom File Descriptor of the stream server link.
    Definition: stream_srv.c:364
    char * osmo_stream_srv_link_get_sockname(const struct osmo_stream_srv_link *link)
    Get description of the stream server link e. g. 127.0.0.1:1234.
    Definition: stream_srv.c:344
    void osmo_stream_srv_set_flush_and_destroy(struct osmo_stream_srv *conn)
    Prepare to send out all pending messages on the connection's Tx queue and then automatically destroy ...
    Definition: stream_srv.c:787
    int osmo_stream_cli_open(struct osmo_stream_cli *cli)
    Open connection of an Osmocom stream client By default the client will automatically reconnect after ...
    Definition: stream_cli.c:810
    void osmo_stream_srv_link_destroy(struct osmo_stream_srv_link *link)
    Destroy the stream server link. Closes + Releases Memory.
    Definition: stream_srv.c:381
    struct osmo_stream_srv * osmo_stream_srv_create2(void *ctx, struct osmo_stream_srv_link *link, int fd, void *data)
    Create a Stream Server inside the specified link.
    Definition: stream_srv.c:720
    void osmo_stream_cli_set_proto(struct osmo_stream_cli *cli, uint16_t proto)
    Set the protocol for the stream client socket.
    Definition: stream_cli.c:582
    int osmo_stream_srv_link_set_domain(struct osmo_stream_srv_link *link, int domain)
    Set the socket type for the stream server link.
    Definition: stream_srv.c:307
    void osmo_stream_srv_set_data(struct osmo_stream_srv *conn, void *data)
    Set application private data of the stream server.
    Definition: stream_srv.c:796
    struct osmo_stream_srv_link * osmo_stream_srv_get_master(struct osmo_stream_srv *conn)
    Get the master (Link) from a Stream Server.
    Definition: stream_srv.c:839
    void osmo_stream_cli_destroy(struct osmo_stream_cli *cli)
    Destroy a Osmocom stream client (includes close)
    Definition: stream_cli.c:723
    void osmo_stream_srv_send(struct osmo_stream_srv *conn, struct msgb *msg)
    Enqueue data to be sent via an Osmocom stream server.
    Definition: stream_srv.c:873
    void osmo_stream_cli_set_nodelay(struct osmo_stream_cli *cli, bool nodelay)
    Set the NODELAY socket option to avoid Nagle-like behavior Setting this to nodelay=true will automati...
    Definition: stream_cli.c:797
    int osmo_stream_cli_set_addrs(struct osmo_stream_cli *cli, const char **addr, size_t addrcnt)
    Set the remote address set to which we connect. Useful for protocols allowing connecting to more than...
    Definition: stream_cli.c:501
    void osmo_stream_cli_send(struct osmo_stream_cli *cli, struct msgb *msg)
    Enqueue data to be sent via an Osmocom stream client.
    Definition: stream_cli.c:903
    struct osmo_stream_srv_link * osmo_stream_srv_link_create(void *ctx)
    Create an Osmocom Stream Server Link A Stream Server Link is the listen()+accept() "parent" to indivi...
    Definition: stream_srv.c:182
    int osmo_stream_srv_link_set_addrs(struct osmo_stream_srv_link *link, const char **addr, size_t addrcnt)
    Set the local address set to which we bind. Useful for protocols allowing bind on more than one addre...
    Definition: stream_srv.c:240
    void osmo_stream_cli_set_connect_cb(struct osmo_stream_cli *cli, int(*connect_cb)(struct osmo_stream_cli *cli))
    Set the call-back function called on connect of the stream client socket.
    Definition: stream_cli.c:680
    void osmo_stream_cli_set_port(struct osmo_stream_cli *cli, uint16_t port)
    Set the remote port number to which we connect.
    Definition: stream_cli.c:525
    void osmo_stream_srv_set_read_cb(struct osmo_stream_srv *conn, int(*read_cb)(struct osmo_stream_srv *conn, struct msgb *msg))
    Set the call-back function when data was read from the stream server socket Only for osmo_stream_srv ...
    Definition: stream_srv.c:767
    int osmo_stream_srv_recv(struct osmo_stream_srv *conn, struct msgb *msg)
    Receive data via Osmocom stream server.
    Definition: stream_srv.c:911
    void * osmo_stream_srv_link_get_data(struct osmo_stream_srv_link *link)
    Get application private data of the stream server link.
    Definition: stream_srv.c:336
    void osmo_stream_srv_link_set_addr(struct osmo_stream_srv_link *link, const char *addr)
    Set the local address to which we bind.
    Definition: stream_srv.c:228
    void osmo_stream_cli_set_read_cb(struct osmo_stream_cli *cli, int(*read_cb)(struct osmo_stream_cli *cli))
    Set the call-back function called to read from the stream client socket This function will configure ...
    Definition: stream_cli.c:700
    void osmo_stream_cli_close(struct osmo_stream_cli *cli)
    Close an Osmocom Stream Client.
    Definition: stream_cli.c:179
    void osmo_stream_srv_link_close(struct osmo_stream_srv_link *link)
    Close the stream server link and unregister from select loop Does not destroy the server link,...
    Definition: stream_srv.c:458
    void osmo_stream_cli_set_read_cb2(struct osmo_stream_cli *cli, int(*read_cb)(struct osmo_stream_cli *cli, struct msgb *msg))
    Set the call-back function called to read from the stream client socket This function will configure ...
    Definition: stream_cli.c:713
    void osmo_stream_cli_set_reconnect_timeout(struct osmo_stream_cli *cli, int timeout)
    Set the reconnect time of the stream client socket.
    Definition: stream_cli.c:632
    void osmo_stream_srv_link_set_name(struct osmo_stream_srv_link *link, const char *name)
    Set a name on the srv_link object (used during logging)
    Definition: stream_srv.c:204
    void * osmo_stream_srv_get_data(struct osmo_stream_srv *conn)
    Get application private data of the stream server.
    Definition: stream_srv.c:822
    void osmo_stream_cli_set_name(struct osmo_stream_cli *cli, const char *name)
    Set a name on the cli object (used during logging)
    Definition: stream_cli.c:478
    char * osmo_stream_cli_get_sockname(const struct osmo_stream_cli *cli)
    Get the stream client socket description.
    Definition: stream_cli.c:657
    Definition: stream_cli.c:97
    Definition: stream_srv.c:513
    html/osmux_8h.js0000644000175000017500000000162014642372355013124 0ustar buildbuildvar osmux_8h = [ [ "osmux_snprintf", "group__osmux.html#gaf654e092ca97dd764f59905a2ed21650", null ], [ "osmux_xfrm_input", "group__osmux.html#ga9c7d30c0d7d9bc0caf744799d629d4cc", null ], [ "osmux_xfrm_output_alloc", "group__osmux.html#ga41a217bffa1b0ac095c98ab0fab82c25", null ], [ "osmux_xfrm_output_flush", "group__osmux.html#gaaac410425f6470396ae9db53ebb8dc44", null ], [ "osmux_xfrm_output_sched", "group__osmux.html#gafee78ee4522a9caa238301d7b913dfd6", null ], [ "osmux_xfrm_output_set_rtp_msgb_alloc_cb", "group__osmux.html#ga97187827e1f793f2392e54585343db32", null ], [ "osmux_xfrm_output_set_rtp_pl_type", "group__osmux.html#ga0d96c8a544e0ff56576615e0b2ac7774", null ], [ "osmux_xfrm_output_set_rtp_ssrc", "group__osmux.html#ga08151bad3c12df245d4c0e4f9c4ca966", null ], [ "osmux_xfrm_output_set_tx_cb", "group__osmux.html#ga3936e43e881d0992648937417969ead1", null ] ];html/structosmux__tx__handle.html0000644000175000017500000001366514642372355016662 0ustar buildbuild libosmo-netif: osmux_tx_handle Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmux_tx_handle Struct Reference

    Data Fields

    struct osmo_timer_list timer
     
    struct msgb * msg
     
    void(* tx_cb )(struct msgb *msg, void *data)
     
    void * data
     

    The documentation for this struct was generated from the following file:
    html/annotated.html0000644000175000017500000003117214642372355013664 0ustar buildbuild libosmo-netif: Data Structures
    libosmo-netif 1.4.0
    Osmocom network interface library
    html/structosmux__out__handle.html0000644000175000017500000002123314642372355017024 0ustar buildbuild libosmo-netif: osmux_out_handle Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmux_out_handle Struct Reference

    Data Fields

    uint16_t rtp_seq
     
    uint32_t rtp_timestamp
     
    uint32_t rtp_ssrc
     
    uint8_t rtp_payload_type
     
    uint8_t osmux_seq_ack
     
    struct osmo_timer_list timer
     
    struct llist_head list
     
    void(* tx_cb )(struct msgb *msg, void *data)
     
    void * data
     
    rtp_msgb_alloc_cb_t rtp_msgb_alloc_cb
     
    void * rtp_msgb_alloc_cb_data
     

    The documentation for this struct was generated from the following file:
    html/structosmux__hdr.html0000644000175000017500000001276414642372355015331 0ustar buildbuild libosmo-netif: osmux_hdr Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    osmux_hdr Struct Reference

    Data Fields

    uint8_t seq
     
    uint8_t circuit_id
     
    uint8_t data [0]
     

    The documentation for this struct was generated from the following file:
    html/open.png0000644000175000017500000000017314642372355012465 0ustar buildbuild‰PNG  IHDR à‘BIDATxíÝÁ €0 Ð׬ՙ\Àº€39—b!©9{|ðI>$#Àß´ý8/¨ÄØzƒ/Ï>2À[ÎgiU,/¬~¼Ï\ Ä9Ù¸IEND®B`‚html/osmux__input_8c.js0000644000175000017500000000032214642372355014473 0ustar buildbuildvar osmux__input_8c = [ [ "osmux_xfrm_input", "group__osmux.html#ga9c7d30c0d7d9bc0caf744799d629d4cc", null ], [ "next_default_name_idx", "group__osmux.html#ga9faf7e88ba58b39f4fc2df706aa157c0", null ] ];html/modules.html0000644000175000017500000001132514642372355013355 0ustar buildbuild libosmo-netif: Modules
    libosmo-netif 1.4.0
    Osmocom network interface library
    html/nav_f.png0000644000175000017500000000023114642372355012610 0ustar buildbuild‰PNG  IHDR8³»`IDATxíÝK€ EÑ–·[†øBÑmkâÄÂH—prÓ¼.‚Žó‚ꎤR6Z VI±E‚5j³„lóš›iI˜¬ÞêçJ0ŒÑÑ/Žû›™uøñóÞ¿6sH ÝõyIEND®B`‚html/folderclosed.png0000644000175000017500000000115014642372355014165 0ustar buildbuild‰PNG  IHDRÚ}\ˆ/IDATxí]MOÔ@~ÚúuØlp]ö¿#›Å]PYECˆ\9ù¼yÑß`ÖÄÿàÿÀÉxóâ¢C &=qÐÄ£—vZçv¶3m؃‡vžLûNç}Þ÷}Þ½ZA@n° OäNp ’xóþK°ññ€xÜj”°8sÑ€“ “€œ_¼[Âíæ§ïD'‚•yye+ø¼û 7#rNŸlïük* ¾0Ь_d«_(àñÖ±àôz=ñxõv§÷h©‰z¹€šØP-äóä’̪uý¼$»\DãJc—B4¯ãÝÖ.:£Ï-ÑÏß}µŠLEíºþ #—ûáºÀÏgN;BŠ€6ïýñ䬜…ö@’Ðåñp&™h>p9¤™EEά¨ÎÊ‘" u¥n€$R"?{¹<˜…ë…%PNtâ$‰߶±úá+^<é"§2 ªDq”q´\¬«Ò™a–Œ‘©Aÿ€"Ôµ ™êŸèP£}#Eàz{û.8i îp³ê(ADwD¦E<ê¬cE¦$ HdÊÄ ”.:Ù GŽ-`ŒL‚ý¾'¢‰Ä<¤CIª½;ÙÇTZd±i};>èôß‚z×;Kק8t ¤Ž q”:uvÿv•Ý›¬²ÙvEân{„M·FXg¼ÌfZÖ¨°¹‰*›ßÌß©±ù©:›j–YqèÜë#3çÏSøWøÿÿÑr'ø Ôùù‚ ©¡IEND®B`‚html/files.html0000644000175000017500000002467214642372355013020 0ustar buildbuild libosmo-netif: File List
    libosmo-netif 1.4.0
    Osmocom network interface library
    File List
    Here is a list of all documented files with brief descriptions:
    [detail level 1234]
      include
      osmocom
      netif
     amr.h
     datagram.h
     ipa.h
     ipa_unit.h
     jibuf.hOsmocom Jitter Buffer helpers
     osmux.h
     prim.h
     rs232.h
     rtp.h
     sctp.h
     stream.h
     stream_private.h
      src
     datagram.cOsmocom datagram socket helpers
     jibuf.cOsmocom Jitter Buffer helpers
     osmux.cOsmocom multiplex protocol helpers
     osmux_input.cOsmocom multiplex protocol helpers (input)
     osmux_output.cOsmocom multiplex protocol helpers (output)
     stream.cOsmocom stream socket helpers
     stream_cli.cOsmocom stream socket helpers (client side)
     stream_srv.cOsmocom stream socket helpers (server side)
    html/jquery.js0000644000175000017500000053125514642372355012705 0ustar buildbuild/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
    ",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
    "),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
    ").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
    "),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
    "),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element },_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler * Licensed under MIT * @author Ariel Flesler * @version 2.1.2 */ ;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 * http://www.smartmenus.org/ * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
    ').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$});html/bdwn.png0000644000175000017500000000022314642372355012452 0ustar buildbuild‰PNG  IHDR5åZIDATxíË € DŸP–1ñlžmÀ r±j².e è†D[ØɾÙÏÔ¼µ¦ã´Þ|陣6€Všë3´Å?Ls'(}¬>+ žKó÷¥¿ch`‚ ^׃ÞnIEND®B`‚html/nav_g.png0000644000175000017500000000013714642372355012616 0ustar buildbuild‰PNG  IHDRô1&IDATxíÝ1 ÁOHf„á_ ->~¸åM iËMèÀƒS½ü‚<IEND®B`‚html/sctp_8h_source.html0000644000175000017500000003011714642372355014635 0ustar buildbuild libosmo-netif: include/osmocom/netif/sctp.h Source File
    libosmo-netif 1.4.0
    Osmocom network interface library
    sctp.h
    1#pragma once
    2
    3#include <osmocom/core/utils.h>
    4
    5/* Relevant SCTP RFCs:
    6 * rfc9260 (obsoletes rfc4960): SCTP protocol
    7 * rfc5061: SCTP Dynamic Address Reconfiguration
    8 * rfc6458: SCTP Sockets API Extensions
    9 */
    10
    11enum sctp_sac_state;
    12extern const struct value_string osmo_sctp_assoc_chg_strs[];
    13static inline const char *osmo_sctp_assoc_chg_str(enum sctp_sac_state val)
    14{ return get_value_string(osmo_sctp_assoc_chg_strs, val); }
    15
    16enum sctp_spc_state;
    17extern const struct value_string osmo_sctp_paddr_chg_strs[];
    18static inline const char *osmo_sctp_paddr_chg_str(enum sctp_spc_state val)
    19{ return get_value_string(osmo_sctp_paddr_chg_strs, val); }
    20
    21enum sctp_sn_type;
    22extern const struct value_string osmo_sctp_sn_type_strs[];
    23static inline const char *osmo_sctp_sn_type_str(enum sctp_sn_type val)
    24{ return get_value_string(osmo_sctp_sn_type_strs, val); }
    25
    26enum sctp_sn_error;
    27extern const struct value_string osmo_sctp_sn_error_strs[];
    28static inline const char *osmo_sctp_sn_error_str(enum sctp_sn_error val)
    29{ return get_value_string(osmo_sctp_sn_error_strs, val); }
    30
    31enum osmo_sctp_op_error {
    32 OSMO_SCTP_OP_ERR_INVALID_STREAM_ID = 1,
    33 OSMO_SCTP_OP_ERR_MISS_MAND_PARAM = 2,
    34 OSMO_SCTP_OP_ERR_STALE_COOKIE = 3,
    35 OSMO_SCTP_OP_ERR_NO_RESOURCES = 4,
    36 OSMO_SCTP_OP_ERR_UNRESOLV_ADDR = 5,
    37 OSMO_SCTP_OP_ERR_UNKN_CHUNK_TYPE = 6,
    38 OSMO_SCTP_OP_ERR_INVALID_MAND_PARAM = 7,
    39 OSMO_SCTP_OP_ERR_UNKN_PARAM = 8,
    40 OSMO_SCTP_OP_ERR_NO_USER_DATA = 9,
    41 OSMO_SCTP_OP_ERR_COOKIE_RX_WHILE_SHUTDOWN = 10,
    42 OSMO_SCTP_OP_ERR_RESTART_ASSC_NEW_ADDR = 11,
    43 OSMO_SCTP_OP_ERR_UNER_INITED_ABORT = 12,
    44 OSMO_SCTP_OP_ERR_PROTO_VERSION = 13,
    45};
    46
    47
    48extern const struct value_string osmo_sctp_op_error_strs[];
    49static inline const char *osmo_sctp_op_error_str(enum osmo_sctp_op_error val)
    50{ return get_value_string(osmo_sctp_op_error_strs, val); }
    html/search/0000755000175000017500000000000014642372355012262 5ustar buildbuildhtml/search/nomatches.html0000644000175000017500000000076414642372355015140 0ustar buildbuild
    No Matches
    html/search/all_a.js0000644000175000017500000000102414642372355013665 0ustar buildbuildvar searchData= [ ['sap_0',['sap',['../structosmo__prim__pkt__hdr.html#ac227c462fca290539d67d9f21a908e19',1,'osmo_prim_pkt_hdr']]], ['sap_5fctl_5fhello_5fparam_1',['sap_ctl_hello_param',['../structsap__ctl__hello__param.html',1,'']]], ['sap_5fctl_5fprim_2',['sap_ctl_prim',['../structsap__ctl__prim.html',1,'']]], ['stream_2ec_3',['stream.c',['../stream_8c.html',1,'']]], ['stream_5fcli_2ec_4',['stream_cli.c',['../stream__cli_8c.html',1,'']]], ['stream_5fsrv_2ec_5',['stream_srv.c',['../stream__srv_8c.html',1,'']]] ]; html/search/files_0.html0000644000175000017500000000263514642372355014477 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/close.svg0000644000175000017500000000240414642372355014110 0ustar buildbuild image/svg+xml html/search/variables_2.js0000644000175000017500000000021014642372355015002 0ustar buildbuildvar searchData= [ ['sap_0',['sap',['../structosmo__prim__pkt__hdr.html#ac227c462fca290539d67d9f21a908e19',1,'osmo_prim_pkt_hdr']]] ]; html/search/classes_0.js0000644000175000017500000000024114642372355014471 0ustar buildbuildvar searchData= [ ['amr_5fhdr_0',['amr_hdr',['../structamr__hdr.html',1,'']]], ['amr_5fhdr_5fbwe_1',['amr_hdr_bwe',['../structamr__hdr__bwe.html',1,'']]] ]; html/search/all_4.js0000644000175000017500000000020614642372355013611 0ustar buildbuildvar searchData= [ ['jibuf_2ec_0',['jibuf.c',['../jibuf_8c.html',1,'']]], ['jibuf_2eh_1',['jibuf.h',['../jibuf_8h.html',1,'']]] ]; html/search/classes_5.html0000644000175000017500000000263714642372355015041 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_1.html0000644000175000017500000000264114642372355015343 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_3.html0000644000175000017500000000263514642372355014502 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/functions_0.js0000644000175000017500000005440614642372355015060 0ustar buildbuildvar searchData= [ ['osmo_5fdgram_5fclose_0',['osmo_dgram_close',['../group__datagram.html#ga46db4acbfc35668e35601338d64364ed',1,'osmo_dgram_close(struct osmo_dgram *conn): datagram.c'],['../group__datagram.html#ga46db4acbfc35668e35601338d64364ed',1,'osmo_dgram_close(struct osmo_dgram *conn): datagram.c']]], ['osmo_5fdgram_5fcreate_1',['osmo_dgram_create',['../group__datagram.html#ga56ee60c89f1a3bc975ab0ede5b71ff15',1,'osmo_dgram_create(void *ctx): datagram.c'],['../group__datagram.html#ga56ee60c89f1a3bc975ab0ede5b71ff15',1,'osmo_dgram_create(void *ctx): datagram.c']]], ['osmo_5fdgram_5fdestroy_2',['osmo_dgram_destroy',['../group__datagram.html#ga01fb36f8c19b2b64705d8263f7f53f59',1,'osmo_dgram_destroy(struct osmo_dgram *conn): datagram.c'],['../group__datagram.html#ga01fb36f8c19b2b64705d8263f7f53f59',1,'osmo_dgram_destroy(struct osmo_dgram *conn): datagram.c']]], ['osmo_5fdgram_5fget_5fdata_3',['osmo_dgram_get_data',['../group__datagram.html#ga36d7e1f26af3308b51f95e06d1c742d7',1,'osmo_dgram_get_data(struct osmo_dgram *conn): datagram.c'],['../group__datagram.html#ga36d7e1f26af3308b51f95e06d1c742d7',1,'osmo_dgram_get_data(struct osmo_dgram *conn): datagram.c']]], ['osmo_5fdgram_5fopen_4',['osmo_dgram_open',['../group__datagram.html#gac65de108c52dba83b178d6453e9fb545',1,'osmo_dgram_open(struct osmo_dgram *conn): datagram.c'],['../group__datagram.html#gac65de108c52dba83b178d6453e9fb545',1,'osmo_dgram_open(struct osmo_dgram *conn): datagram.c']]], ['osmo_5fdgram_5frecv_5',['osmo_dgram_recv',['../group__datagram.html#gaae58d13a6fd634ebfddd486d0d428c5e',1,'osmo_dgram_recv(struct osmo_dgram *conn, struct msgb *msg): datagram.c'],['../group__datagram.html#gaae58d13a6fd634ebfddd486d0d428c5e',1,'osmo_dgram_recv(struct osmo_dgram *conn, struct msgb *msg): datagram.c']]], ['osmo_5fdgram_5frx_5fclose_6',['osmo_dgram_rx_close',['../group__datagram.html#ga01efa7269834a745d80910a64c6f61c0',1,'osmo_dgram_rx_close(struct osmo_dgram_rx *conn): datagram.c'],['../group__datagram.html#ga01efa7269834a745d80910a64c6f61c0',1,'osmo_dgram_rx_close(struct osmo_dgram_rx *conn): datagram.c']]], ['osmo_5fdgram_5frx_5fcreate_7',['osmo_dgram_rx_create',['../group__datagram.html#gad7af9f04fe4847b0e2eefe35fa05a8b8',1,'osmo_dgram_rx_create(void *ctx): datagram.c'],['../group__datagram.html#gad7af9f04fe4847b0e2eefe35fa05a8b8',1,'osmo_dgram_rx_create(void *ctx): datagram.c']]], ['osmo_5fdgram_5frx_5fdestroy_8',['osmo_dgram_rx_destroy',['../group__datagram.html#ga6e4b92b9c7f210d1cb3782425d0bdac0',1,'osmo_dgram_rx_destroy(struct osmo_dgram_rx *conn): datagram.c'],['../group__datagram.html#ga6e4b92b9c7f210d1cb3782425d0bdac0',1,'osmo_dgram_rx_destroy(struct osmo_dgram_rx *conn): datagram.c']]], ['osmo_5fdgram_5frx_5fopen_9',['osmo_dgram_rx_open',['../group__datagram.html#gaf558e9c2f02216ed95db039ddaf31050',1,'osmo_dgram_rx_open(struct osmo_dgram_rx *conn): datagram.c'],['../group__datagram.html#gaf558e9c2f02216ed95db039ddaf31050',1,'osmo_dgram_rx_open(struct osmo_dgram_rx *conn): datagram.c']]], ['osmo_5fdgram_5frx_5frecv_10',['osmo_dgram_rx_recv',['../group__datagram.html#ga16d69e998c663cdec0b76560a2d8cfb9',1,'osmo_dgram_rx_recv(struct osmo_dgram_rx *conn, struct msgb *msg): datagram.c'],['../group__datagram.html#ga16d69e998c663cdec0b76560a2d8cfb9',1,'osmo_dgram_rx_recv(struct osmo_dgram_rx *conn, struct msgb *msg): datagram.c']]], ['osmo_5fdgram_5frx_5fset_5faddr_11',['osmo_dgram_rx_set_addr',['../group__datagram.html#gad378ba5cc66ee0c27a277906d8434e31',1,'osmo_dgram_rx_set_addr(struct osmo_dgram_rx *conn, const char *addr): datagram.c'],['../group__datagram.html#gad378ba5cc66ee0c27a277906d8434e31',1,'osmo_dgram_rx_set_addr(struct osmo_dgram_rx *conn, const char *addr): datagram.c']]], ['osmo_5fdgram_5frx_5fset_5fport_12',['osmo_dgram_rx_set_port',['../group__datagram.html#gafbd947def18d8e34062876433ac05e91',1,'osmo_dgram_rx_set_port(struct osmo_dgram_rx *conn, uint16_t port): datagram.c'],['../group__datagram.html#gafbd947def18d8e34062876433ac05e91',1,'osmo_dgram_rx_set_port(struct osmo_dgram_rx *conn, uint16_t port): datagram.c']]], ['osmo_5fdgram_5frx_5fset_5fread_5fcb_13',['osmo_dgram_rx_set_read_cb',['../group__datagram.html#ga5a0f7221b8583aac5153f167c4e2177d',1,'osmo_dgram_rx_set_read_cb(struct osmo_dgram_rx *conn, int(*read_cb)(struct osmo_dgram_rx *conn)): datagram.c'],['../group__datagram.html#ga5a0f7221b8583aac5153f167c4e2177d',1,'osmo_dgram_rx_set_read_cb(struct osmo_dgram_rx *conn, int(*read_cb)(struct osmo_dgram_rx *conn)): datagram.c']]], ['osmo_5fdgram_5fsend_14',['osmo_dgram_send',['../group__datagram.html#ga66d6c9d5f0243a4f7ed458c62d8e20dd',1,'osmo_dgram_send(struct osmo_dgram *conn, struct msgb *msg): datagram.c'],['../group__datagram.html#ga66d6c9d5f0243a4f7ed458c62d8e20dd',1,'osmo_dgram_send(struct osmo_dgram *conn, struct msgb *msg): datagram.c']]], ['osmo_5fdgram_5fset_5fdata_15',['osmo_dgram_set_data',['../group__datagram.html#gaa6a5fbd5f227d15cefe6b234fefb3b4d',1,'osmo_dgram_set_data(struct osmo_dgram *conn, void *data): datagram.c'],['../group__datagram.html#gaa6a5fbd5f227d15cefe6b234fefb3b4d',1,'osmo_dgram_set_data(struct osmo_dgram *conn, void *data): datagram.c']]], ['osmo_5fdgram_5fset_5flocal_5faddr_16',['osmo_dgram_set_local_addr',['../group__datagram.html#gaf21d974e14fa22f910313b240d31d40f',1,'osmo_dgram_set_local_addr(struct osmo_dgram *conn, const char *addr): datagram.c'],['../group__datagram.html#gaf21d974e14fa22f910313b240d31d40f',1,'osmo_dgram_set_local_addr(struct osmo_dgram *conn, const char *addr): datagram.c']]], ['osmo_5fdgram_5fset_5flocal_5fport_17',['osmo_dgram_set_local_port',['../group__datagram.html#ga9180ae9a36a9927d4bdb49cdc5708b1f',1,'osmo_dgram_set_local_port(struct osmo_dgram *conn, uint16_t port): datagram.c'],['../group__datagram.html#ga9180ae9a36a9927d4bdb49cdc5708b1f',1,'osmo_dgram_set_local_port(struct osmo_dgram *conn, uint16_t port): datagram.c']]], ['osmo_5fdgram_5fset_5fread_5fcb_18',['osmo_dgram_set_read_cb',['../group__datagram.html#ga6b6ef2f02e3d260f1e84a2ecf8c67b5a',1,'osmo_dgram_set_read_cb(struct osmo_dgram *conn, int(*read_cb)(struct osmo_dgram *conn)): datagram.c'],['../group__datagram.html#ga6b6ef2f02e3d260f1e84a2ecf8c67b5a',1,'osmo_dgram_set_read_cb(struct osmo_dgram *conn, int(*read_cb)(struct osmo_dgram *conn)): datagram.c']]], ['osmo_5fdgram_5fset_5fremote_5faddr_19',['osmo_dgram_set_remote_addr',['../group__datagram.html#ga6677ee8d976d2e1bed8e0c01e103c18f',1,'osmo_dgram_set_remote_addr(struct osmo_dgram *conn, const char *addr): datagram.c'],['../group__datagram.html#ga6677ee8d976d2e1bed8e0c01e103c18f',1,'osmo_dgram_set_remote_addr(struct osmo_dgram *conn, const char *addr): datagram.c']]], ['osmo_5fdgram_5fset_5fremote_5fport_20',['osmo_dgram_set_remote_port',['../group__datagram.html#ga27bf4c1d8e4c30ef7b4ec49665d6fc90',1,'osmo_dgram_set_remote_port(struct osmo_dgram *conn, uint16_t port): datagram.c'],['../group__datagram.html#ga27bf4c1d8e4c30ef7b4ec49665d6fc90',1,'osmo_dgram_set_remote_port(struct osmo_dgram *conn, uint16_t port): datagram.c']]], ['osmo_5fdgram_5ftx_5fclose_21',['osmo_dgram_tx_close',['../group__datagram.html#ga0eb580467681e8fa91be35a83a74f132',1,'osmo_dgram_tx_close(struct osmo_dgram_tx *conn): datagram.c'],['../group__datagram.html#ga0eb580467681e8fa91be35a83a74f132',1,'osmo_dgram_tx_close(struct osmo_dgram_tx *conn): datagram.c']]], ['osmo_5fdgram_5ftx_5fcreate_22',['osmo_dgram_tx_create',['../group__datagram.html#gadeaa837f3df8382bd7a50e668b9d3a61',1,'osmo_dgram_tx_create(void *ctx): datagram.c'],['../group__datagram.html#gadeaa837f3df8382bd7a50e668b9d3a61',1,'osmo_dgram_tx_create(void *ctx): datagram.c']]], ['osmo_5fdgram_5ftx_5fdestroy_23',['osmo_dgram_tx_destroy',['../group__datagram.html#gaad6f9ca0688cd4a8a95ec6002f52ded5',1,'osmo_dgram_tx_destroy(struct osmo_dgram_tx *conn): datagram.c'],['../group__datagram.html#gaad6f9ca0688cd4a8a95ec6002f52ded5',1,'osmo_dgram_tx_destroy(struct osmo_dgram_tx *conn): datagram.c']]], ['osmo_5fdgram_5ftx_5fopen_24',['osmo_dgram_tx_open',['../group__datagram.html#ga8d712623df3862e55ad248dc5ecd626c',1,'osmo_dgram_tx_open(struct osmo_dgram_tx *conn): datagram.c'],['../group__datagram.html#ga8d712623df3862e55ad248dc5ecd626c',1,'osmo_dgram_tx_open(struct osmo_dgram_tx *conn): datagram.c']]], ['osmo_5fdgram_5ftx_5fsend_25',['osmo_dgram_tx_send',['../group__datagram.html#gad4638b9943090f5bf1a7b75fa8efde46',1,'osmo_dgram_tx_send(struct osmo_dgram_tx *conn, struct msgb *msg): datagram.c'],['../group__datagram.html#gad4638b9943090f5bf1a7b75fa8efde46',1,'osmo_dgram_tx_send(struct osmo_dgram_tx *conn, struct msgb *msg): datagram.c']]], ['osmo_5fdgram_5ftx_5fset_5faddr_26',['osmo_dgram_tx_set_addr',['../group__datagram.html#ga94fe94f64f1285715db36eb1f2e9deaa',1,'osmo_dgram_tx_set_addr(struct osmo_dgram_tx *conn, const char *addr): datagram.c'],['../group__datagram.html#ga94fe94f64f1285715db36eb1f2e9deaa',1,'osmo_dgram_tx_set_addr(struct osmo_dgram_tx *conn, const char *addr): datagram.c']]], ['osmo_5fdgram_5ftx_5fset_5fdata_27',['osmo_dgram_tx_set_data',['../group__datagram.html#ga095ce94e65f1607026c37c12e6f5e9c0',1,'osmo_dgram_tx_set_data(struct osmo_dgram_tx *conn, void *data): datagram.c'],['../group__datagram.html#ga095ce94e65f1607026c37c12e6f5e9c0',1,'osmo_dgram_tx_set_data(struct osmo_dgram_tx *conn, void *data): datagram.c']]], ['osmo_5fdgram_5ftx_5fset_5flocal_5faddr_28',['osmo_dgram_tx_set_local_addr',['../group__datagram.html#ga6c843f43db5439f8f0ba38f72dbb1a20',1,'osmo_dgram_tx_set_local_addr(struct osmo_dgram_tx *conn, const char *addr): datagram.c'],['../group__datagram.html#ga6c843f43db5439f8f0ba38f72dbb1a20',1,'osmo_dgram_tx_set_local_addr(struct osmo_dgram_tx *conn, const char *addr): datagram.c']]], ['osmo_5fdgram_5ftx_5fset_5flocal_5fport_29',['osmo_dgram_tx_set_local_port',['../group__datagram.html#gae2962232548d41621520c6c71da423a5',1,'osmo_dgram_tx_set_local_port(struct osmo_dgram_tx *conn, uint16_t port): datagram.c'],['../group__datagram.html#gae2962232548d41621520c6c71da423a5',1,'osmo_dgram_tx_set_local_port(struct osmo_dgram_tx *conn, uint16_t port): datagram.c']]], ['osmo_5fdgram_5ftx_5fset_5fport_30',['osmo_dgram_tx_set_port',['../group__datagram.html#ga48d7e39656886b52aa176fc1b14c84cf',1,'osmo_dgram_tx_set_port(struct osmo_dgram_tx *conn, uint16_t port): datagram.c'],['../group__datagram.html#ga48d7e39656886b52aa176fc1b14c84cf',1,'osmo_dgram_tx_set_port(struct osmo_dgram_tx *conn, uint16_t port): datagram.c']]], ['osmo_5fjibuf_5falloc_31',['osmo_jibuf_alloc',['../group__jibuf.html#ga20592f230f9d1233752fd318996f2c9d',1,'jibuf.c']]], ['osmo_5fjibuf_5fdelete_32',['osmo_jibuf_delete',['../group__jibuf.html#gacdac7beaf3d97543718ddfa33123fb7e',1,'jibuf.c']]], ['osmo_5fjibuf_5fempty_33',['osmo_jibuf_empty',['../group__jibuf.html#gae73a3b805b83f453339adeee9cdfaba4',1,'jibuf.c']]], ['osmo_5fjibuf_5fenable_5fskew_5fcompensation_34',['osmo_jibuf_enable_skew_compensation',['../group__jibuf.html#ga096e87b2dbdade72c35d51a51fe57839',1,'jibuf.c']]], ['osmo_5fjibuf_5fenqueue_35',['osmo_jibuf_enqueue',['../group__jibuf.html#ga522165ddc51578436ae2d26691fa7ec0',1,'jibuf.c']]], ['osmo_5fjibuf_5fset_5fdequeue_5fcb_36',['osmo_jibuf_set_dequeue_cb',['../group__jibuf.html#ga3a8213fe8bed42d649fcb1c8d13e23d8',1,'jibuf.c']]], ['osmo_5fjibuf_5fset_5fmax_5fdelay_37',['osmo_jibuf_set_max_delay',['../group__jibuf.html#ga5e84571c3348525b6ad647a22cd2581d',1,'jibuf.c']]], ['osmo_5fjibuf_5fset_5fmin_5fdelay_38',['osmo_jibuf_set_min_delay',['../group__jibuf.html#gabcd63f39049bc4d6b3541a674b78963d',1,'jibuf.c']]], ['osmo_5fstream_5fcli_5fclose_39',['osmo_stream_cli_close',['../group__stream.html#gad217c1c1b83ac852e090afd49146db19',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fcreate_40',['osmo_stream_cli_create',['../group__stream.html#ga1754a498abc27577a8e0b3b0f236c05b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fdestroy_41',['osmo_stream_cli_destroy',['../group__stream.html#ga9d0dac2f390c660c85fa347765f4f45a',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fget_5fdata_42',['osmo_stream_cli_get_data',['../group__stream.html#ga606a53840677f3f5200887dc92f5de4d',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fget_5fofd_43',['osmo_stream_cli_get_ofd',['../group__stream.html#ga0615daa4aac253a3d530f35fddbc68bd',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fget_5fsockname_44',['osmo_stream_cli_get_sockname',['../group__stream.html#gaecd148ae11f2f619aa52dd2900a15827',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fis_5fconnected_45',['osmo_stream_cli_is_connected',['../group__stream.html#ga79a09e9c9b8cc98991cd5eebdb41ed57',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fopen_46',['osmo_stream_cli_open',['../group__stream.html#ga86b4b9c8e563f8426d3cdae803e3ec38',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fopen2_47',['osmo_stream_cli_open2',['../group__stream.html#ga127866794591d16a0eb7244f2fe666ef',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5freconnect_48',['osmo_stream_cli_reconnect',['../group__stream.html#ga11d2615f6197f33073ba7245e5ba95ee',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5frecv_49',['osmo_stream_cli_recv',['../group__stream.html#ga06f9743c19068bb720a4949ae8467243',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fsend_50',['osmo_stream_cli_send',['../group__stream.html#gaacf415b97e1184baadeee5c60387422b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5faddr_51',['osmo_stream_cli_set_addr',['../group__stream.html#ga0038e937cf0f36c59e0e3991523219a1',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5faddrs_52',['osmo_stream_cli_set_addrs',['../group__stream.html#gaab1e7ef0ccc88e124c5f7bbb5e46c29c',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fconnect_5fcb_53',['osmo_stream_cli_set_connect_cb',['../group__stream.html#gab588bfd88a3cc775875981e2ee66e295',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fdata_54',['osmo_stream_cli_set_data',['../group__stream.html#ga5e94c511d537f63337912bb50fb2dc28',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fdisconnect_5fcb_55',['osmo_stream_cli_set_disconnect_cb',['../group__stream.html#ga23e5c1799a8225607543de39a56ca449',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fdomain_56',['osmo_stream_cli_set_domain',['../group__stream.html#ga33ce730fc91ebade9b7188fa220656c6',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5flocal_5faddr_57',['osmo_stream_cli_set_local_addr',['../group__stream.html#ga70420e7c664cc4c4e69ac4d3476e7f53',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5flocal_5faddrs_58',['osmo_stream_cli_set_local_addrs',['../group__stream.html#ga090fc3fcd1706b815ef5a729921c100e',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5flocal_5fport_59',['osmo_stream_cli_set_local_port',['../group__stream.html#ga4d83e3cf7fdf7eb354c2015ff9bed98a',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fname_60',['osmo_stream_cli_set_name',['../group__stream.html#gaeb712dc553735736047f9b11d9583baa',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fnodelay_61',['osmo_stream_cli_set_nodelay',['../group__stream.html#gaa196e78db6ca32abb1473566b4f1b04b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fport_62',['osmo_stream_cli_set_port',['../group__stream.html#gab8b9f65bebfeb83c6e33d102e9439770',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fproto_63',['osmo_stream_cli_set_proto',['../group__stream.html#ga91d57aa94a370520540d7272af66a23b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fread_5fcb_64',['osmo_stream_cli_set_read_cb',['../group__stream.html#gad1d1817f25694ea126779262cddf4fbd',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fread_5fcb2_65',['osmo_stream_cli_set_read_cb2',['../group__stream.html#gad4c563e88d269092b0d66f33a4764420',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5freconnect_5ftimeout_66',['osmo_stream_cli_set_reconnect_timeout',['../group__stream.html#gade74792afe35f31dd2584c888db3dd62',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5ftype_67',['osmo_stream_cli_set_type',['../group__stream.html#ga5e5c4c9aacc1cd1d303c0295018594cb',1,'stream_cli.c']]], ['osmo_5fstream_5fsrv_5fcreate_68',['osmo_stream_srv_create',['../group__stream.html#ga21a5f061ca2cb307906a9552abebb075',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fcreate2_69',['osmo_stream_srv_create2',['../group__stream.html#ga8be283e1a143e346b4d6ccf33cbb9b98',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fdestroy_70',['osmo_stream_srv_destroy',['../group__stream.html#ga47f18e063f64f22cb74d58d8b7243bed',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fdata_71',['osmo_stream_srv_get_data',['../group__stream.html#gae2a0ef01097d964c71e38600b4c078d5',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fmaster_72',['osmo_stream_srv_get_master',['../group__stream.html#ga9cf689935bf6ffac4f86f56219d73c8e',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fofd_73',['osmo_stream_srv_get_ofd',['../group__stream.html#ga47bbca4f12717db2e6158eefe6310b9b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fclose_74',['osmo_stream_srv_link_close',['../group__stream.html#gad325d97b09c724e830c98d76b890520d',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fcreate_75',['osmo_stream_srv_link_create',['../group__stream.html#gaad262988c7ac365566f03843c560f892',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fdestroy_76',['osmo_stream_srv_link_destroy',['../group__stream.html#ga882acaaa5935422b0e09a2ce8c8019ec',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fdata_77',['osmo_stream_srv_link_get_data',['../group__stream.html#gacb5d68c2a6a9663f99266c70747bce04',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fofd_78',['osmo_stream_srv_link_get_ofd',['../group__stream.html#ga7b8981351a154c357fcefd39c31ad42a',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fsockname_79',['osmo_stream_srv_link_get_sockname',['../group__stream.html#ga7d7b6af7df24e90dc758a088bae6316d',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fis_5fopened_80',['osmo_stream_srv_link_is_opened',['../group__stream.html#ga28243be108ed0302b0f5a9d1dfc96b22',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fopen_81',['osmo_stream_srv_link_open',['../group__stream.html#ga603b89074d3e8c0fb44144ab1864f0d4',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5faccept_5fcb_82',['osmo_stream_srv_link_set_accept_cb',['../group__stream.html#ga1eea525d4e1e7a24c9c08881994ceb7e',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5faddr_83',['osmo_stream_srv_link_set_addr',['../group__stream.html#gacece90116484e34540def69b05c66f57',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5faddrs_84',['osmo_stream_srv_link_set_addrs',['../group__stream.html#gaadabca7d23c52c39e291bf7e05f0055b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fdata_85',['osmo_stream_srv_link_set_data',['../group__stream.html#ga5ef0f0c85a52c08e8c10d36a8f44e392',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fdomain_86',['osmo_stream_srv_link_set_domain',['../group__stream.html#ga9629b516297c31f34af48e4630973dab',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fname_87',['osmo_stream_srv_link_set_name',['../group__stream.html#gadef998825a4739660b198151fcee4201',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fnodelay_88',['osmo_stream_srv_link_set_nodelay',['../group__stream.html#ga41e8ad2c761aaa00313aa11d1f29a3ed',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fport_89',['osmo_stream_srv_link_set_port',['../group__stream.html#ga76bbbafd1d8dc9c9ebffd301503b6dd9',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fproto_90',['osmo_stream_srv_link_set_proto',['../group__stream.html#ga2508987133a93863d2a50103004b0f36',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5ftype_91',['osmo_stream_srv_link_set_type',['../group__stream.html#ga1903f9aa2e6f9283ebcf20f573b1d970',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5frecv_92',['osmo_stream_srv_recv',['../group__stream.html#gac86242c41223c525c770ff7e7515d83e',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fsend_93',['osmo_stream_srv_send',['../group__stream.html#gaa1589994cf6eab27742cafee6b7fb491',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fclosed_5fcb_94',['osmo_stream_srv_set_closed_cb',['../group__stream.html#ga78d44fbda720218be1700d351691e60a',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fdata_95',['osmo_stream_srv_set_data',['../group__stream.html#ga9891663b20714d72f992e44ad1e92eea',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fflush_5fand_5fdestroy_96',['osmo_stream_srv_set_flush_and_destroy',['../group__stream.html#ga8390ce6740e56eb22215e1c5805c95f1',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fname_97',['osmo_stream_srv_set_name',['../group__stream.html#ga196834d254fd94922d6be91b7b5b1ed3',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fread_5fcb_98',['osmo_stream_srv_set_read_cb',['../group__stream.html#gab98cc1a9428b5ac82fd8255d07563726',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fsegmentation_5fcb_99',['osmo_stream_srv_set_segmentation_cb',['../group__stream.html#ga27052cc04e7f50b71492d4f8aaf7ed61',1,'stream_srv.c']]], ['osmux_5fsnprintf_100',['osmux_snprintf',['../group__osmux.html#gaf654e092ca97dd764f59905a2ed21650',1,'osmux.c']]], ['osmux_5fxfrm_5finput_101',['osmux_xfrm_input',['../group__osmux.html#ga9c7d30c0d7d9bc0caf744799d629d4cc',1,'osmux_input.c']]], ['osmux_5fxfrm_5foutput_5falloc_102',['osmux_xfrm_output_alloc',['../group__osmux.html#ga41a217bffa1b0ac095c98ab0fab82c25',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fflush_103',['osmux_xfrm_output_flush',['../group__osmux.html#gaaac410425f6470396ae9db53ebb8dc44',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fsched_104',['osmux_xfrm_output_sched',['../group__osmux.html#gafee78ee4522a9caa238301d7b913dfd6',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5frtp_5fmsgb_5falloc_5fcb_105',['osmux_xfrm_output_set_rtp_msgb_alloc_cb',['../group__osmux.html#ga97187827e1f793f2392e54585343db32',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5frtp_5fpl_5ftype_106',['osmux_xfrm_output_set_rtp_pl_type',['../group__osmux.html#ga0d96c8a544e0ff56576615e0b2ac7774',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5frtp_5fssrc_107',['osmux_xfrm_output_set_rtp_ssrc',['../group__osmux.html#ga08151bad3c12df245d4c0e4f9c4ca966',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5ftx_5fcb_108',['osmux_xfrm_output_set_tx_cb',['../group__osmux.html#ga3936e43e881d0992648937417969ead1',1,'osmux_output.c']]] ]; html/search/all_4.html0000644000175000017500000000263314642372355014147 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/search.js0000644000175000017500000005500414642372355014071 0ustar buildbuild/* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ function convertToId(search) { var result = ''; for (i=0;i do a search { this.Search(); } } this.OnSearchSelectKey = function(evt) { var e = (evt) ? evt : window.event; // for IE if (e.keyCode==40 && this.searchIndex0) // Up { this.searchIndex--; this.OnSelectItem(this.searchIndex); } else if (e.keyCode==13 || e.keyCode==27) { this.OnSelectItem(this.searchIndex); this.CloseSelectionWindow(); this.DOMSearchField().focus(); } return false; } // --------- Actions // Closes the results window. this.CloseResultsWindow = function() { this.DOMPopupSearchResultsWindow().style.display = 'none'; this.DOMSearchClose().style.display = 'none'; this.Activate(false); } this.CloseSelectionWindow = function() { this.DOMSearchSelectWindow().style.display = 'none'; } // Performs a search. this.Search = function() { this.keyTimeout = 0; // strip leading whitespace var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); var code = searchValue.toLowerCase().charCodeAt(0); var idxChar = searchValue.substr(0, 1).toLowerCase(); if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair { idxChar = searchValue.substr(0, 2); } var resultsPage; var resultsPageWithSearch; var hasResultsPage; var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); if (idx!=-1) { var hexCode=idx.toString(16); resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; resultsPageWithSearch = resultsPage+'?'+escape(searchValue); hasResultsPage = true; } else // nothing available for this search term { resultsPage = this.resultsPath + '/nomatches' + this.extension; resultsPageWithSearch = resultsPage; hasResultsPage = false; } window.frames.MSearchResults.location = resultsPageWithSearch; var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); if (domPopupSearchResultsWindow.style.display!='block') { var domSearchBox = this.DOMSearchBox(); this.DOMSearchClose().style.display = 'inline-block'; var domPopupSearchResults = this.DOMPopupSearchResults(); var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; domPopupSearchResultsWindow.style.display = 'block'; left -= domPopupSearchResults.offsetWidth; var maxWidth = document.body.clientWidth; var width = 400; if (left<10) left=10; if (width+left+8>maxWidth) width=maxWidth-left-8; domPopupSearchResultsWindow.style.top = top + 'px'; domPopupSearchResultsWindow.style.left = left + 'px'; domPopupSearchResultsWindow.style.width = width + 'px'; } this.lastSearchValue = searchValue; this.lastResultsPage = resultsPage; } // -------- Activation Functions // Activates or deactivates the search panel, resetting things to // their default values if necessary. this.Activate = function(isActive) { if (isActive || // open it this.DOMPopupSearchResultsWindow().style.display == 'block' ) { this.DOMSearchBox().className = 'MSearchBoxActive'; var searchField = this.DOMSearchField(); if (searchField.value == this.searchLabel) // clear "Search" term upon entry { searchField.value = ''; this.searchActive = true; } } else if (!isActive) // directly remove the panel { this.DOMSearchBox().className = 'MSearchBoxInactive'; this.DOMSearchField().value = this.searchLabel; this.searchActive = false; this.lastSearchValue = '' this.lastResultsPage = ''; } } } // ----------------------------------------------------------------------- // The class that handles everything on the search results page. function SearchResults(name) { // The number of matches from the last run of . this.lastMatchCount = 0; this.lastKey = 0; this.repeatOn = false; // Toggles the visibility of the passed element ID. this.FindChildElement = function(id) { var parentElement = document.getElementById(id); var element = parentElement.firstChild; while (element && element!=parentElement) { if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { return element; } if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { element = element.firstChild; } else if (element.nextSibling) { element = element.nextSibling; } else { do { element = element.parentNode; } while (element && element!=parentElement && !element.nextSibling); if (element && element!=parentElement) { element = element.nextSibling; } } } } this.Toggle = function(id) { var element = this.FindChildElement(id); if (element) { if (element.style.display == 'block') { element.style.display = 'none'; } else { element.style.display = 'block'; } } } // Searches for the passed string. If there is no parameter, // it takes it from the URL query. // // Always returns true, since other documents may try to call it // and that may or may not be possible. this.Search = function(search) { if (!search) // get search word from URL { search = window.location.search; search = search.substring(1); // Remove the leading '?' search = unescape(search); } search = search.replace(/^ +/, ""); // strip leading spaces search = search.replace(/ +$/, ""); // strip trailing spaces search = search.toLowerCase(); search = convertToId(search); var resultRows = document.getElementsByTagName("div"); var matches = 0; var i = 0; while (i < resultRows.length) { var row = resultRows.item(i); if (row.className == "SRResult") { var rowMatchName = row.id.toLowerCase(); rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' if (search.length<=rowMatchName.length && rowMatchName.substr(0, search.length)==search) { row.style.display = 'block'; matches++; } else { row.style.display = 'none'; } } i++; } document.getElementById("Searching").style.display='none'; if (matches == 0) // no results { document.getElementById("NoMatches").style.display='block'; } else // at least one result { document.getElementById("NoMatches").style.display='none'; } this.lastMatchCount = matches; return true; } // return the first item with index index or higher that is visible this.NavNext = function(index) { var focusItem; while (1) { var focusName = 'Item'+index; focusItem = document.getElementById(focusName); if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { break; } else if (!focusItem) // last element { break; } focusItem=null; index++; } return focusItem; } this.NavPrev = function(index) { var focusItem; while (1) { var focusName = 'Item'+index; focusItem = document.getElementById(focusName); if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { break; } else if (!focusItem) // last element { break; } focusItem=null; index--; } return focusItem; } this.ProcessKeys = function(e) { if (e.type == "keydown") { this.repeatOn = false; this.lastKey = e.keyCode; } else if (e.type == "keypress") { if (!this.repeatOn) { if (this.lastKey) this.repeatOn = true; return false; // ignore first keypress after keydown } } else if (e.type == "keyup") { this.lastKey = 0; this.repeatOn = false; } return this.lastKey!=0; } this.Nav = function(evt,itemIndex) { var e = (evt) ? evt : window.event; // for IE if (e.keyCode==13) return true; if (!this.ProcessKeys(e)) return false; if (this.lastKey==38) // Up { var newIndex = itemIndex-1; var focusItem = this.NavPrev(newIndex); if (focusItem) { var child = this.FindChildElement(focusItem.parentNode.parentNode.id); if (child && child.style.display == 'block') // children visible { var n=0; var tmpElem; while (1) // search for last child { tmpElem = document.getElementById('Item'+newIndex+'_c'+n); if (tmpElem) { focusItem = tmpElem; } else // found it! { break; } n++; } } } if (focusItem) { focusItem.focus(); } else // return focus to search field { parent.document.getElementById("MSearchField").focus(); } } else if (this.lastKey==40) // Down { var newIndex = itemIndex+1; var focusItem; var item = document.getElementById('Item'+itemIndex); var elem = this.FindChildElement(item.parentNode.parentNode.id); if (elem && elem.style.display == 'block') // children visible { focusItem = document.getElementById('Item'+itemIndex+'_c0'); } if (!focusItem) focusItem = this.NavNext(newIndex); if (focusItem) focusItem.focus(); } else if (this.lastKey==39) // Right { var item = document.getElementById('Item'+itemIndex); var elem = this.FindChildElement(item.parentNode.parentNode.id); if (elem) elem.style.display = 'block'; } else if (this.lastKey==37) // Left { var item = document.getElementById('Item'+itemIndex); var elem = this.FindChildElement(item.parentNode.parentNode.id); if (elem) elem.style.display = 'none'; } else if (this.lastKey==27) // Escape { parent.searchBox.CloseResultsWindow(); parent.document.getElementById("MSearchField").focus(); } else if (this.lastKey==13) // Enter { return true; } return false; } this.NavChild = function(evt,itemIndex,childIndex) { var e = (evt) ? evt : window.event; // for IE if (e.keyCode==13) return true; if (!this.ProcessKeys(e)) return false; if (this.lastKey==38) // Up { if (childIndex>0) { var newIndex = childIndex-1; document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); } else // already at first child, jump to parent { document.getElementById('Item'+itemIndex).focus(); } } else if (this.lastKey==40) // Down { var newIndex = childIndex+1; var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); if (!elem) // last child, jump to parent next parent { elem = this.NavNext(itemIndex+1); } if (elem) { elem.focus(); } } else if (this.lastKey==27) // Escape { parent.searchBox.CloseResultsWindow(); parent.document.getElementById("MSearchField").focus(); } else if (this.lastKey==13) // Enter { return true; } return false; } } function setKeyActions(elem,action) { elem.setAttribute('onkeydown',action); elem.setAttribute('onkeypress',action); elem.setAttribute('onkeyup',action); } function setClassAttr(elem,attr) { elem.setAttribute('class',attr); elem.setAttribute('className',attr); } function createResults() { var results = document.getElementById("SRResults"); for (var e=0; e
    Loading...
    Searching...
    No Matches
    html/search/classes_2.js0000644000175000017500000000024714642372355014501 0ustar buildbuildvar searchData= [ ['ipa_5fhead_0',['ipa_head',['../structipa__head.html',1,'']]], ['ipa_5fhead_5fext_1',['ipa_head_ext',['../structipa__head__ext.html',1,'']]] ]; html/search/files_2.js0000644000175000017500000000044514642372355014146 0ustar buildbuildvar searchData= [ ['osmux_2ec_0',['osmux.c',['../osmux_8c.html',1,'']]], ['osmux_2eh_1',['osmux.h',['../osmux_8h.html',1,'']]], ['osmux_5finput_2ec_2',['osmux_input.c',['../osmux__input_8c.html',1,'']]], ['osmux_5foutput_2ec_3',['osmux_output.c',['../osmux__output_8c.html',1,'']]] ]; html/search/variables_0.html0000644000175000017500000000264114642372355015342 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_7.html0000644000175000017500000000263314642372355014152 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_1.html0000644000175000017500000000263514642372355014500 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_1.html0000644000175000017500000000263714642372355015035 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_1.js0000644000175000017500000000015614642372355014477 0ustar buildbuildvar searchData= [ ['baudrate2termbits_0',['baudrate2termbits',['../structbaudrate2termbits.html',1,'']]] ]; html/search/all_5.html0000644000175000017500000000263314642372355014150 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_2.html0000644000175000017500000000263714642372355015036 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/functions_0.html0000644000175000017500000000264114642372355015402 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_4.js0000644000175000017500000000033514642372355014501 0ustar buildbuildvar searchData= [ ['rtcp_5fhdr_0',['rtcp_hdr',['../structrtcp__hdr.html',1,'']]], ['rtp_5fhdr_1',['rtp_hdr',['../structrtp__hdr.html',1,'']]], ['rtp_5fx_5fhdr_2',['rtp_x_hdr',['../structrtp__x__hdr.html',1,'']]] ]; html/search/groups_0.js0000644000175000017500000000062214642372355014356 0ustar buildbuildvar searchData= [ ['osmocom_20datagram_20socket_0',['Osmocom Datagram Socket',['../group__datagram.html',1,'']]], ['osmocom_20jitter_20buffer_1',['Osmocom Jitter Buffer',['../group__jibuf.html',1,'']]], ['osmocom_20multiplex_20protocol_2',['Osmocom Multiplex Protocol',['../group__osmux.html',1,'']]], ['osmocom_20stream_20socket_3',['Osmocom Stream Socket',['../group__stream.html',1,'']]] ]; html/search/variables_0.js0000644000175000017500000000024114642372355015004 0ustar buildbuildvar searchData= [ ['next_5fdefault_5fname_5fidx_0',['next_default_name_idx',['../group__osmux.html#ga9faf7e88ba58b39f4fc2df706aa157c0',1,'osmux_input.c']]] ]; html/search/searchdata.js0000644000175000017500000000056214642372355014722 0ustar buildbuildvar indexSectionsWithContent = { 0: "abdijmnoprs", 1: "abiors", 2: "djos", 3: "o", 4: "nps", 5: "o" }; var indexSectionNames = { 0: "all", 1: "classes", 2: "files", 3: "functions", 4: "variables", 5: "groups" }; var indexSectionLabels = { 0: "All", 1: "Data Structures", 2: "Files", 3: "Functions", 4: "Variables", 5: "Modules" }; html/search/classes_3.js0000644000175000017500000000376214642372355014507 0ustar buildbuildvar searchData= [ ['osmo_5fdgram_0',['osmo_dgram',['../structosmo__dgram.html',1,'']]], ['osmo_5fdgram_5frx_1',['osmo_dgram_rx',['../structosmo__dgram__rx.html',1,'']]], ['osmo_5fdgram_5ftx_2',['osmo_dgram_tx',['../structosmo__dgram__tx.html',1,'']]], ['osmo_5fipa_5fmsgb_5fcb_3',['osmo_ipa_msgb_cb',['../structosmo__ipa__msgb__cb.html',1,'']]], ['osmo_5fipa_5funit_4',['osmo_ipa_unit',['../structosmo__ipa__unit.html',1,'']]], ['osmo_5fjibuf_5',['osmo_jibuf',['../structosmo__jibuf.html',1,'']]], ['osmo_5fjibuf_5fmsgb_5fcb_6',['osmo_jibuf_msgb_cb',['../structosmo__jibuf__msgb__cb.html',1,'']]], ['osmo_5fprim_5fpkt_5fhdr_7',['osmo_prim_pkt_hdr',['../structosmo__prim__pkt__hdr.html',1,'']]], ['osmo_5fprim_5fsrv_8',['osmo_prim_srv',['../structosmo__prim__srv.html',1,'']]], ['osmo_5fprim_5fsrv_5flink_9',['osmo_prim_srv_link',['../structosmo__prim__srv__link.html',1,'']]], ['osmo_5frs232_10',['osmo_rs232',['../structosmo__rs232.html',1,'']]], ['osmo_5frtp_5fhandle_11',['osmo_rtp_handle',['../structosmo__rtp__handle.html',1,'']]], ['osmo_5fstream_5fcli_12',['osmo_stream_cli',['../structosmo__stream__cli.html',1,'']]], ['osmo_5fstream_5fsrv_13',['osmo_stream_srv',['../structosmo__stream__srv.html',1,'']]], ['osmo_5fstream_5fsrv_5flink_14',['osmo_stream_srv_link',['../structosmo__stream__srv__link.html',1,'']]], ['osmux_5fcircuit_15',['osmux_circuit',['../structosmux__circuit.html',1,'']]], ['osmux_5fhdr_16',['osmux_hdr',['../structosmux__hdr.html',1,'']]], ['osmux_5fin_5fhandle_17',['osmux_in_handle',['../structosmux__in__handle.html',1,'']]], ['osmux_5fin_5freq_18',['osmux_in_req',['../structosmux__in__req.html',1,'']]], ['osmux_5finput_5fstate_19',['osmux_input_state',['../structosmux__input__state.html',1,'']]], ['osmux_5flink_20',['osmux_link',['../structosmux__link.html',1,'']]], ['osmux_5fout_5fhandle_21',['osmux_out_handle',['../structosmux__out__handle.html',1,'']]], ['osmux_5ftx_5fhandle_22',['osmux_tx_handle',['../structosmux__tx__handle.html',1,'']]] ]; html/search/all_0.js0000644000175000017500000000024114642372355013604 0ustar buildbuildvar searchData= [ ['amr_5fhdr_0',['amr_hdr',['../structamr__hdr.html',1,'']]], ['amr_5fhdr_5fbwe_1',['amr_hdr_bwe',['../structamr__hdr__bwe.html',1,'']]] ]; html/search/all_0.html0000644000175000017500000000263314642372355014143 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/mag_sel.svg0000644000175000017500000000451214642372355014414 0ustar buildbuild image/svg+xml html/search/search_l.png0000644000175000017500000000106714642372355014554 0ustar buildbuild‰PNG  IHDR:…å>gAMA± üa cHRMm˜sŽà8‚ÕzÊ´3Dv„6*½bKGDÿ‡Ì¿ pHYs  šœtIMEâ  OíWß*IDAT(Ï’ÍJBQF÷&Š&ö ›ô>Ѥ|ƒ(‚ÀFAI õ–¢‘`šAP Õ ‘~ÀŸ&FzžÕ A튷oM6‡uß-È/iÃtyÝžÛæ «¬Ù¹6bSÞ%ÏÝž pA’476Iæìvܧäx£B•Ÿ6‰LîDü
    Loading...
    Searching...
    No Matches
    html/search/all_3.html0000644000175000017500000000263314642372355014146 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_8.js0000644000175000017500000000022414642372355013615 0ustar buildbuildvar searchData= [ ['primitive_0',['primitive',['../structosmo__prim__pkt__hdr.html#aaca814fcecde761d5205ab9e6beb4b2e',1,'osmo_prim_pkt_hdr']]] ]; html/search/all_1.html0000644000175000017500000000263314642372355014144 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_4.html0000644000175000017500000000263714642372355015040 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_3.js0000644000175000017500000000024714642372355013615 0ustar buildbuildvar searchData= [ ['ipa_5fhead_0',['ipa_head',['../structipa__head.html',1,'']]], ['ipa_5fhead_5fext_1',['ipa_head_ext',['../structipa__head__ext.html',1,'']]] ]; html/search/classes_5.js0000644000175000017500000000031614642372355014501 0ustar buildbuildvar searchData= [ ['sap_5fctl_5fhello_5fparam_0',['sap_ctl_hello_param',['../structsap__ctl__hello__param.html',1,'']]], ['sap_5fctl_5fprim_1',['sap_ctl_prim',['../structsap__ctl__prim.html',1,'']]] ]; html/search/files_1.js0000644000175000017500000000020614642372355014140 0ustar buildbuildvar searchData= [ ['jibuf_2ec_0',['jibuf.c',['../jibuf_8c.html',1,'']]], ['jibuf_2eh_1',['jibuf.h',['../jibuf_8h.html',1,'']]] ]; html/search/all_9.html0000644000175000017500000000263314642372355014154 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_2.html0000644000175000017500000000263314642372355014145 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_a.html0000644000175000017500000000263314642372355014224 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/search_m.png0000644000175000017500000000023614642372355014552 0ustar buildbuild‰PNG  IHDR5^KMgAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe<0IDATxÚb,//g```<~ü8ˆúøñ#ˆúÿÿ?bbZP,Xnݺ¤ ¥<~áE§IEND®B`‚html/search/all_1.js0000644000175000017500000000015614642372355013612 0ustar buildbuildvar searchData= [ ['baudrate2termbits_0',['baudrate2termbits',['../structbaudrate2termbits.html',1,'']]] ]; html/search/classes_0.html0000644000175000017500000000263714642372355015034 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_7.js0000644000175000017500000006212714642372355013626 0ustar buildbuildvar searchData= [ ['osmo_5fdgram_0',['osmo_dgram',['../structosmo__dgram.html',1,'']]], ['osmo_5fdgram_5fclose_1',['osmo_dgram_close',['../group__datagram.html#ga46db4acbfc35668e35601338d64364ed',1,'osmo_dgram_close(struct osmo_dgram *conn): datagram.c'],['../group__datagram.html#ga46db4acbfc35668e35601338d64364ed',1,'osmo_dgram_close(struct osmo_dgram *conn): datagram.c']]], ['osmo_5fdgram_5fcreate_2',['osmo_dgram_create',['../group__datagram.html#ga56ee60c89f1a3bc975ab0ede5b71ff15',1,'osmo_dgram_create(void *ctx): datagram.c'],['../group__datagram.html#ga56ee60c89f1a3bc975ab0ede5b71ff15',1,'osmo_dgram_create(void *ctx): datagram.c']]], ['osmo_5fdgram_5fdestroy_3',['osmo_dgram_destroy',['../group__datagram.html#ga01fb36f8c19b2b64705d8263f7f53f59',1,'osmo_dgram_destroy(struct osmo_dgram *conn): datagram.c'],['../group__datagram.html#ga01fb36f8c19b2b64705d8263f7f53f59',1,'osmo_dgram_destroy(struct osmo_dgram *conn): datagram.c']]], ['osmo_5fdgram_5fget_5fdata_4',['osmo_dgram_get_data',['../group__datagram.html#ga36d7e1f26af3308b51f95e06d1c742d7',1,'osmo_dgram_get_data(struct osmo_dgram *conn): datagram.c'],['../group__datagram.html#ga36d7e1f26af3308b51f95e06d1c742d7',1,'osmo_dgram_get_data(struct osmo_dgram *conn): datagram.c']]], ['osmo_5fdgram_5fopen_5',['osmo_dgram_open',['../group__datagram.html#gac65de108c52dba83b178d6453e9fb545',1,'osmo_dgram_open(struct osmo_dgram *conn): datagram.c'],['../group__datagram.html#gac65de108c52dba83b178d6453e9fb545',1,'osmo_dgram_open(struct osmo_dgram *conn): datagram.c']]], ['osmo_5fdgram_5frecv_6',['osmo_dgram_recv',['../group__datagram.html#gaae58d13a6fd634ebfddd486d0d428c5e',1,'osmo_dgram_recv(struct osmo_dgram *conn, struct msgb *msg): datagram.c'],['../group__datagram.html#gaae58d13a6fd634ebfddd486d0d428c5e',1,'osmo_dgram_recv(struct osmo_dgram *conn, struct msgb *msg): datagram.c']]], ['osmo_5fdgram_5frx_7',['osmo_dgram_rx',['../structosmo__dgram__rx.html',1,'']]], ['osmo_5fdgram_5frx_5fclose_8',['osmo_dgram_rx_close',['../group__datagram.html#ga01efa7269834a745d80910a64c6f61c0',1,'osmo_dgram_rx_close(struct osmo_dgram_rx *conn): datagram.c'],['../group__datagram.html#ga01efa7269834a745d80910a64c6f61c0',1,'osmo_dgram_rx_close(struct osmo_dgram_rx *conn): datagram.c']]], ['osmo_5fdgram_5frx_5fcreate_9',['osmo_dgram_rx_create',['../group__datagram.html#gad7af9f04fe4847b0e2eefe35fa05a8b8',1,'osmo_dgram_rx_create(void *ctx): datagram.c'],['../group__datagram.html#gad7af9f04fe4847b0e2eefe35fa05a8b8',1,'osmo_dgram_rx_create(void *ctx): datagram.c']]], ['osmo_5fdgram_5frx_5fdestroy_10',['osmo_dgram_rx_destroy',['../group__datagram.html#ga6e4b92b9c7f210d1cb3782425d0bdac0',1,'osmo_dgram_rx_destroy(struct osmo_dgram_rx *conn): datagram.c'],['../group__datagram.html#ga6e4b92b9c7f210d1cb3782425d0bdac0',1,'osmo_dgram_rx_destroy(struct osmo_dgram_rx *conn): datagram.c']]], ['osmo_5fdgram_5frx_5fopen_11',['osmo_dgram_rx_open',['../group__datagram.html#gaf558e9c2f02216ed95db039ddaf31050',1,'osmo_dgram_rx_open(struct osmo_dgram_rx *conn): datagram.c'],['../group__datagram.html#gaf558e9c2f02216ed95db039ddaf31050',1,'osmo_dgram_rx_open(struct osmo_dgram_rx *conn): datagram.c']]], ['osmo_5fdgram_5frx_5frecv_12',['osmo_dgram_rx_recv',['../group__datagram.html#ga16d69e998c663cdec0b76560a2d8cfb9',1,'osmo_dgram_rx_recv(struct osmo_dgram_rx *conn, struct msgb *msg): datagram.c'],['../group__datagram.html#ga16d69e998c663cdec0b76560a2d8cfb9',1,'osmo_dgram_rx_recv(struct osmo_dgram_rx *conn, struct msgb *msg): datagram.c']]], ['osmo_5fdgram_5frx_5fset_5faddr_13',['osmo_dgram_rx_set_addr',['../group__datagram.html#gad378ba5cc66ee0c27a277906d8434e31',1,'osmo_dgram_rx_set_addr(struct osmo_dgram_rx *conn, const char *addr): datagram.c'],['../group__datagram.html#gad378ba5cc66ee0c27a277906d8434e31',1,'osmo_dgram_rx_set_addr(struct osmo_dgram_rx *conn, const char *addr): datagram.c']]], ['osmo_5fdgram_5frx_5fset_5fport_14',['osmo_dgram_rx_set_port',['../group__datagram.html#gafbd947def18d8e34062876433ac05e91',1,'osmo_dgram_rx_set_port(struct osmo_dgram_rx *conn, uint16_t port): datagram.c'],['../group__datagram.html#gafbd947def18d8e34062876433ac05e91',1,'osmo_dgram_rx_set_port(struct osmo_dgram_rx *conn, uint16_t port): datagram.c']]], ['osmo_5fdgram_5frx_5fset_5fread_5fcb_15',['osmo_dgram_rx_set_read_cb',['../group__datagram.html#ga5a0f7221b8583aac5153f167c4e2177d',1,'osmo_dgram_rx_set_read_cb(struct osmo_dgram_rx *conn, int(*read_cb)(struct osmo_dgram_rx *conn)): datagram.c'],['../group__datagram.html#ga5a0f7221b8583aac5153f167c4e2177d',1,'osmo_dgram_rx_set_read_cb(struct osmo_dgram_rx *conn, int(*read_cb)(struct osmo_dgram_rx *conn)): datagram.c']]], ['osmo_5fdgram_5fsend_16',['osmo_dgram_send',['../group__datagram.html#ga66d6c9d5f0243a4f7ed458c62d8e20dd',1,'osmo_dgram_send(struct osmo_dgram *conn, struct msgb *msg): datagram.c'],['../group__datagram.html#ga66d6c9d5f0243a4f7ed458c62d8e20dd',1,'osmo_dgram_send(struct osmo_dgram *conn, struct msgb *msg): datagram.c']]], ['osmo_5fdgram_5fset_5fdata_17',['osmo_dgram_set_data',['../group__datagram.html#gaa6a5fbd5f227d15cefe6b234fefb3b4d',1,'osmo_dgram_set_data(struct osmo_dgram *conn, void *data): datagram.c'],['../group__datagram.html#gaa6a5fbd5f227d15cefe6b234fefb3b4d',1,'osmo_dgram_set_data(struct osmo_dgram *conn, void *data): datagram.c']]], ['osmo_5fdgram_5fset_5flocal_5faddr_18',['osmo_dgram_set_local_addr',['../group__datagram.html#gaf21d974e14fa22f910313b240d31d40f',1,'osmo_dgram_set_local_addr(struct osmo_dgram *conn, const char *addr): datagram.c'],['../group__datagram.html#gaf21d974e14fa22f910313b240d31d40f',1,'osmo_dgram_set_local_addr(struct osmo_dgram *conn, const char *addr): datagram.c']]], ['osmo_5fdgram_5fset_5flocal_5fport_19',['osmo_dgram_set_local_port',['../group__datagram.html#ga9180ae9a36a9927d4bdb49cdc5708b1f',1,'osmo_dgram_set_local_port(struct osmo_dgram *conn, uint16_t port): datagram.c'],['../group__datagram.html#ga9180ae9a36a9927d4bdb49cdc5708b1f',1,'osmo_dgram_set_local_port(struct osmo_dgram *conn, uint16_t port): datagram.c']]], ['osmo_5fdgram_5fset_5fread_5fcb_20',['osmo_dgram_set_read_cb',['../group__datagram.html#ga6b6ef2f02e3d260f1e84a2ecf8c67b5a',1,'osmo_dgram_set_read_cb(struct osmo_dgram *conn, int(*read_cb)(struct osmo_dgram *conn)): datagram.c'],['../group__datagram.html#ga6b6ef2f02e3d260f1e84a2ecf8c67b5a',1,'osmo_dgram_set_read_cb(struct osmo_dgram *conn, int(*read_cb)(struct osmo_dgram *conn)): datagram.c']]], ['osmo_5fdgram_5fset_5fremote_5faddr_21',['osmo_dgram_set_remote_addr',['../group__datagram.html#ga6677ee8d976d2e1bed8e0c01e103c18f',1,'osmo_dgram_set_remote_addr(struct osmo_dgram *conn, const char *addr): datagram.c'],['../group__datagram.html#ga6677ee8d976d2e1bed8e0c01e103c18f',1,'osmo_dgram_set_remote_addr(struct osmo_dgram *conn, const char *addr): datagram.c']]], ['osmo_5fdgram_5fset_5fremote_5fport_22',['osmo_dgram_set_remote_port',['../group__datagram.html#ga27bf4c1d8e4c30ef7b4ec49665d6fc90',1,'osmo_dgram_set_remote_port(struct osmo_dgram *conn, uint16_t port): datagram.c'],['../group__datagram.html#ga27bf4c1d8e4c30ef7b4ec49665d6fc90',1,'osmo_dgram_set_remote_port(struct osmo_dgram *conn, uint16_t port): datagram.c']]], ['osmo_5fdgram_5ftx_23',['osmo_dgram_tx',['../structosmo__dgram__tx.html',1,'']]], ['osmo_5fdgram_5ftx_5fclose_24',['osmo_dgram_tx_close',['../group__datagram.html#ga0eb580467681e8fa91be35a83a74f132',1,'osmo_dgram_tx_close(struct osmo_dgram_tx *conn): datagram.c'],['../group__datagram.html#ga0eb580467681e8fa91be35a83a74f132',1,'osmo_dgram_tx_close(struct osmo_dgram_tx *conn): datagram.c']]], ['osmo_5fdgram_5ftx_5fcreate_25',['osmo_dgram_tx_create',['../group__datagram.html#gadeaa837f3df8382bd7a50e668b9d3a61',1,'osmo_dgram_tx_create(void *ctx): datagram.c'],['../group__datagram.html#gadeaa837f3df8382bd7a50e668b9d3a61',1,'osmo_dgram_tx_create(void *ctx): datagram.c']]], ['osmo_5fdgram_5ftx_5fdestroy_26',['osmo_dgram_tx_destroy',['../group__datagram.html#gaad6f9ca0688cd4a8a95ec6002f52ded5',1,'osmo_dgram_tx_destroy(struct osmo_dgram_tx *conn): datagram.c'],['../group__datagram.html#gaad6f9ca0688cd4a8a95ec6002f52ded5',1,'osmo_dgram_tx_destroy(struct osmo_dgram_tx *conn): datagram.c']]], ['osmo_5fdgram_5ftx_5fopen_27',['osmo_dgram_tx_open',['../group__datagram.html#ga8d712623df3862e55ad248dc5ecd626c',1,'osmo_dgram_tx_open(struct osmo_dgram_tx *conn): datagram.c'],['../group__datagram.html#ga8d712623df3862e55ad248dc5ecd626c',1,'osmo_dgram_tx_open(struct osmo_dgram_tx *conn): datagram.c']]], ['osmo_5fdgram_5ftx_5fsend_28',['osmo_dgram_tx_send',['../group__datagram.html#gad4638b9943090f5bf1a7b75fa8efde46',1,'osmo_dgram_tx_send(struct osmo_dgram_tx *conn, struct msgb *msg): datagram.c'],['../group__datagram.html#gad4638b9943090f5bf1a7b75fa8efde46',1,'osmo_dgram_tx_send(struct osmo_dgram_tx *conn, struct msgb *msg): datagram.c']]], ['osmo_5fdgram_5ftx_5fset_5faddr_29',['osmo_dgram_tx_set_addr',['../group__datagram.html#ga94fe94f64f1285715db36eb1f2e9deaa',1,'osmo_dgram_tx_set_addr(struct osmo_dgram_tx *conn, const char *addr): datagram.c'],['../group__datagram.html#ga94fe94f64f1285715db36eb1f2e9deaa',1,'osmo_dgram_tx_set_addr(struct osmo_dgram_tx *conn, const char *addr): datagram.c']]], ['osmo_5fdgram_5ftx_5fset_5fdata_30',['osmo_dgram_tx_set_data',['../group__datagram.html#ga095ce94e65f1607026c37c12e6f5e9c0',1,'osmo_dgram_tx_set_data(struct osmo_dgram_tx *conn, void *data): datagram.c'],['../group__datagram.html#ga095ce94e65f1607026c37c12e6f5e9c0',1,'osmo_dgram_tx_set_data(struct osmo_dgram_tx *conn, void *data): datagram.c']]], ['osmo_5fdgram_5ftx_5fset_5flocal_5faddr_31',['osmo_dgram_tx_set_local_addr',['../group__datagram.html#ga6c843f43db5439f8f0ba38f72dbb1a20',1,'osmo_dgram_tx_set_local_addr(struct osmo_dgram_tx *conn, const char *addr): datagram.c'],['../group__datagram.html#ga6c843f43db5439f8f0ba38f72dbb1a20',1,'osmo_dgram_tx_set_local_addr(struct osmo_dgram_tx *conn, const char *addr): datagram.c']]], ['osmo_5fdgram_5ftx_5fset_5flocal_5fport_32',['osmo_dgram_tx_set_local_port',['../group__datagram.html#gae2962232548d41621520c6c71da423a5',1,'osmo_dgram_tx_set_local_port(struct osmo_dgram_tx *conn, uint16_t port): datagram.c'],['../group__datagram.html#gae2962232548d41621520c6c71da423a5',1,'osmo_dgram_tx_set_local_port(struct osmo_dgram_tx *conn, uint16_t port): datagram.c']]], ['osmo_5fdgram_5ftx_5fset_5fport_33',['osmo_dgram_tx_set_port',['../group__datagram.html#ga48d7e39656886b52aa176fc1b14c84cf',1,'osmo_dgram_tx_set_port(struct osmo_dgram_tx *conn, uint16_t port): datagram.c'],['../group__datagram.html#ga48d7e39656886b52aa176fc1b14c84cf',1,'osmo_dgram_tx_set_port(struct osmo_dgram_tx *conn, uint16_t port): datagram.c']]], ['osmo_5fipa_5fmsgb_5fcb_34',['osmo_ipa_msgb_cb',['../structosmo__ipa__msgb__cb.html',1,'']]], ['osmo_5fipa_5funit_35',['osmo_ipa_unit',['../structosmo__ipa__unit.html',1,'']]], ['osmo_5fjibuf_36',['osmo_jibuf',['../structosmo__jibuf.html',1,'']]], ['osmo_5fjibuf_5falloc_37',['osmo_jibuf_alloc',['../group__jibuf.html#ga20592f230f9d1233752fd318996f2c9d',1,'jibuf.c']]], ['osmo_5fjibuf_5fdelete_38',['osmo_jibuf_delete',['../group__jibuf.html#gacdac7beaf3d97543718ddfa33123fb7e',1,'jibuf.c']]], ['osmo_5fjibuf_5fempty_39',['osmo_jibuf_empty',['../group__jibuf.html#gae73a3b805b83f453339adeee9cdfaba4',1,'jibuf.c']]], ['osmo_5fjibuf_5fenable_5fskew_5fcompensation_40',['osmo_jibuf_enable_skew_compensation',['../group__jibuf.html#ga096e87b2dbdade72c35d51a51fe57839',1,'jibuf.c']]], ['osmo_5fjibuf_5fenqueue_41',['osmo_jibuf_enqueue',['../group__jibuf.html#ga522165ddc51578436ae2d26691fa7ec0',1,'jibuf.c']]], ['osmo_5fjibuf_5fmsgb_5fcb_42',['osmo_jibuf_msgb_cb',['../structosmo__jibuf__msgb__cb.html',1,'']]], ['osmo_5fjibuf_5fset_5fdequeue_5fcb_43',['osmo_jibuf_set_dequeue_cb',['../group__jibuf.html#ga3a8213fe8bed42d649fcb1c8d13e23d8',1,'jibuf.c']]], ['osmo_5fjibuf_5fset_5fmax_5fdelay_44',['osmo_jibuf_set_max_delay',['../group__jibuf.html#ga5e84571c3348525b6ad647a22cd2581d',1,'jibuf.c']]], ['osmo_5fjibuf_5fset_5fmin_5fdelay_45',['osmo_jibuf_set_min_delay',['../group__jibuf.html#gabcd63f39049bc4d6b3541a674b78963d',1,'jibuf.c']]], ['osmo_5fprim_5fpkt_5fhdr_46',['osmo_prim_pkt_hdr',['../structosmo__prim__pkt__hdr.html',1,'']]], ['osmo_5fprim_5fsrv_47',['osmo_prim_srv',['../structosmo__prim__srv.html',1,'']]], ['osmo_5fprim_5fsrv_5flink_48',['osmo_prim_srv_link',['../structosmo__prim__srv__link.html',1,'']]], ['osmo_5frs232_49',['osmo_rs232',['../structosmo__rs232.html',1,'']]], ['osmo_5frtp_5fhandle_50',['osmo_rtp_handle',['../structosmo__rtp__handle.html',1,'']]], ['osmo_5fstream_5fcli_51',['osmo_stream_cli',['../structosmo__stream__cli.html',1,'']]], ['osmo_5fstream_5fcli_5fclose_52',['osmo_stream_cli_close',['../group__stream.html#gad217c1c1b83ac852e090afd49146db19',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fcreate_53',['osmo_stream_cli_create',['../group__stream.html#ga1754a498abc27577a8e0b3b0f236c05b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fdestroy_54',['osmo_stream_cli_destroy',['../group__stream.html#ga9d0dac2f390c660c85fa347765f4f45a',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fget_5fdata_55',['osmo_stream_cli_get_data',['../group__stream.html#ga606a53840677f3f5200887dc92f5de4d',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fget_5fofd_56',['osmo_stream_cli_get_ofd',['../group__stream.html#ga0615daa4aac253a3d530f35fddbc68bd',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fget_5fsockname_57',['osmo_stream_cli_get_sockname',['../group__stream.html#gaecd148ae11f2f619aa52dd2900a15827',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fis_5fconnected_58',['osmo_stream_cli_is_connected',['../group__stream.html#ga79a09e9c9b8cc98991cd5eebdb41ed57',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fopen_59',['osmo_stream_cli_open',['../group__stream.html#ga86b4b9c8e563f8426d3cdae803e3ec38',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fopen2_60',['osmo_stream_cli_open2',['../group__stream.html#ga127866794591d16a0eb7244f2fe666ef',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5freconnect_61',['osmo_stream_cli_reconnect',['../group__stream.html#ga11d2615f6197f33073ba7245e5ba95ee',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5frecv_62',['osmo_stream_cli_recv',['../group__stream.html#ga06f9743c19068bb720a4949ae8467243',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fsend_63',['osmo_stream_cli_send',['../group__stream.html#gaacf415b97e1184baadeee5c60387422b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5faddr_64',['osmo_stream_cli_set_addr',['../group__stream.html#ga0038e937cf0f36c59e0e3991523219a1',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5faddrs_65',['osmo_stream_cli_set_addrs',['../group__stream.html#gaab1e7ef0ccc88e124c5f7bbb5e46c29c',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fconnect_5fcb_66',['osmo_stream_cli_set_connect_cb',['../group__stream.html#gab588bfd88a3cc775875981e2ee66e295',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fdata_67',['osmo_stream_cli_set_data',['../group__stream.html#ga5e94c511d537f63337912bb50fb2dc28',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fdisconnect_5fcb_68',['osmo_stream_cli_set_disconnect_cb',['../group__stream.html#ga23e5c1799a8225607543de39a56ca449',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fdomain_69',['osmo_stream_cli_set_domain',['../group__stream.html#ga33ce730fc91ebade9b7188fa220656c6',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5flocal_5faddr_70',['osmo_stream_cli_set_local_addr',['../group__stream.html#ga70420e7c664cc4c4e69ac4d3476e7f53',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5flocal_5faddrs_71',['osmo_stream_cli_set_local_addrs',['../group__stream.html#ga090fc3fcd1706b815ef5a729921c100e',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5flocal_5fport_72',['osmo_stream_cli_set_local_port',['../group__stream.html#ga4d83e3cf7fdf7eb354c2015ff9bed98a',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fname_73',['osmo_stream_cli_set_name',['../group__stream.html#gaeb712dc553735736047f9b11d9583baa',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fnodelay_74',['osmo_stream_cli_set_nodelay',['../group__stream.html#gaa196e78db6ca32abb1473566b4f1b04b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fport_75',['osmo_stream_cli_set_port',['../group__stream.html#gab8b9f65bebfeb83c6e33d102e9439770',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fproto_76',['osmo_stream_cli_set_proto',['../group__stream.html#ga91d57aa94a370520540d7272af66a23b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fread_5fcb_77',['osmo_stream_cli_set_read_cb',['../group__stream.html#gad1d1817f25694ea126779262cddf4fbd',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fread_5fcb2_78',['osmo_stream_cli_set_read_cb2',['../group__stream.html#gad4c563e88d269092b0d66f33a4764420',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5freconnect_5ftimeout_79',['osmo_stream_cli_set_reconnect_timeout',['../group__stream.html#gade74792afe35f31dd2584c888db3dd62',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5ftype_80',['osmo_stream_cli_set_type',['../group__stream.html#ga5e5c4c9aacc1cd1d303c0295018594cb',1,'stream_cli.c']]], ['osmo_5fstream_5fsctp_5fmsg_5fflags_5fnotification_81',['OSMO_STREAM_SCTP_MSG_FLAGS_NOTIFICATION',['../group__stream.html#ga123b7866ed4985a81246bfede79a8ea9',1,'stream.h']]], ['osmo_5fstream_5fsrv_82',['osmo_stream_srv',['../structosmo__stream__srv.html',1,'']]], ['osmo_5fstream_5fsrv_5fcreate_83',['osmo_stream_srv_create',['../group__stream.html#ga21a5f061ca2cb307906a9552abebb075',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fcreate2_84',['osmo_stream_srv_create2',['../group__stream.html#ga8be283e1a143e346b4d6ccf33cbb9b98',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fdestroy_85',['osmo_stream_srv_destroy',['../group__stream.html#ga47f18e063f64f22cb74d58d8b7243bed',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fdata_86',['osmo_stream_srv_get_data',['../group__stream.html#gae2a0ef01097d964c71e38600b4c078d5',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fmaster_87',['osmo_stream_srv_get_master',['../group__stream.html#ga9cf689935bf6ffac4f86f56219d73c8e',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fofd_88',['osmo_stream_srv_get_ofd',['../group__stream.html#ga47bbca4f12717db2e6158eefe6310b9b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_89',['osmo_stream_srv_link',['../structosmo__stream__srv__link.html',1,'']]], ['osmo_5fstream_5fsrv_5flink_5fclose_90',['osmo_stream_srv_link_close',['../group__stream.html#gad325d97b09c724e830c98d76b890520d',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fcreate_91',['osmo_stream_srv_link_create',['../group__stream.html#gaad262988c7ac365566f03843c560f892',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fdestroy_92',['osmo_stream_srv_link_destroy',['../group__stream.html#ga882acaaa5935422b0e09a2ce8c8019ec',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fdata_93',['osmo_stream_srv_link_get_data',['../group__stream.html#gacb5d68c2a6a9663f99266c70747bce04',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fofd_94',['osmo_stream_srv_link_get_ofd',['../group__stream.html#ga7b8981351a154c357fcefd39c31ad42a',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fsockname_95',['osmo_stream_srv_link_get_sockname',['../group__stream.html#ga7d7b6af7df24e90dc758a088bae6316d',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fis_5fopened_96',['osmo_stream_srv_link_is_opened',['../group__stream.html#ga28243be108ed0302b0f5a9d1dfc96b22',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fopen_97',['osmo_stream_srv_link_open',['../group__stream.html#ga603b89074d3e8c0fb44144ab1864f0d4',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5faccept_5fcb_98',['osmo_stream_srv_link_set_accept_cb',['../group__stream.html#ga1eea525d4e1e7a24c9c08881994ceb7e',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5faddr_99',['osmo_stream_srv_link_set_addr',['../group__stream.html#gacece90116484e34540def69b05c66f57',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5faddrs_100',['osmo_stream_srv_link_set_addrs',['../group__stream.html#gaadabca7d23c52c39e291bf7e05f0055b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fdata_101',['osmo_stream_srv_link_set_data',['../group__stream.html#ga5ef0f0c85a52c08e8c10d36a8f44e392',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fdomain_102',['osmo_stream_srv_link_set_domain',['../group__stream.html#ga9629b516297c31f34af48e4630973dab',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fname_103',['osmo_stream_srv_link_set_name',['../group__stream.html#gadef998825a4739660b198151fcee4201',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fnodelay_104',['osmo_stream_srv_link_set_nodelay',['../group__stream.html#ga41e8ad2c761aaa00313aa11d1f29a3ed',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fport_105',['osmo_stream_srv_link_set_port',['../group__stream.html#ga76bbbafd1d8dc9c9ebffd301503b6dd9',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fproto_106',['osmo_stream_srv_link_set_proto',['../group__stream.html#ga2508987133a93863d2a50103004b0f36',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5ftype_107',['osmo_stream_srv_link_set_type',['../group__stream.html#ga1903f9aa2e6f9283ebcf20f573b1d970',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5frecv_108',['osmo_stream_srv_recv',['../group__stream.html#gac86242c41223c525c770ff7e7515d83e',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fsend_109',['osmo_stream_srv_send',['../group__stream.html#gaa1589994cf6eab27742cafee6b7fb491',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fclosed_5fcb_110',['osmo_stream_srv_set_closed_cb',['../group__stream.html#ga78d44fbda720218be1700d351691e60a',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fdata_111',['osmo_stream_srv_set_data',['../group__stream.html#ga9891663b20714d72f992e44ad1e92eea',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fflush_5fand_5fdestroy_112',['osmo_stream_srv_set_flush_and_destroy',['../group__stream.html#ga8390ce6740e56eb22215e1c5805c95f1',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fname_113',['osmo_stream_srv_set_name',['../group__stream.html#ga196834d254fd94922d6be91b7b5b1ed3',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fread_5fcb_114',['osmo_stream_srv_set_read_cb',['../group__stream.html#gab98cc1a9428b5ac82fd8255d07563726',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fsegmentation_5fcb_115',['osmo_stream_srv_set_segmentation_cb',['../group__stream.html#ga27052cc04e7f50b71492d4f8aaf7ed61',1,'stream_srv.c']]], ['osmocom_20datagram_20socket_116',['Osmocom Datagram Socket',['../group__datagram.html',1,'']]], ['osmocom_20jitter_20buffer_117',['Osmocom Jitter Buffer',['../group__jibuf.html',1,'']]], ['osmocom_20multiplex_20protocol_118',['Osmocom Multiplex Protocol',['../group__osmux.html',1,'']]], ['osmocom_20stream_20socket_119',['Osmocom Stream Socket',['../group__stream.html',1,'']]], ['osmux_2ec_120',['osmux.c',['../osmux_8c.html',1,'']]], ['osmux_2eh_121',['osmux.h',['../osmux_8h.html',1,'']]], ['osmux_5fcircuit_122',['osmux_circuit',['../structosmux__circuit.html',1,'']]], ['osmux_5fhdr_123',['osmux_hdr',['../structosmux__hdr.html',1,'']]], ['osmux_5fin_5fhandle_124',['osmux_in_handle',['../structosmux__in__handle.html',1,'']]], ['osmux_5fin_5freq_125',['osmux_in_req',['../structosmux__in__req.html',1,'']]], ['osmux_5finput_2ec_126',['osmux_input.c',['../osmux__input_8c.html',1,'']]], ['osmux_5finput_5fstate_127',['osmux_input_state',['../structosmux__input__state.html',1,'']]], ['osmux_5flink_128',['osmux_link',['../structosmux__link.html',1,'']]], ['osmux_5fout_5fhandle_129',['osmux_out_handle',['../structosmux__out__handle.html',1,'']]], ['osmux_5foutput_2ec_130',['osmux_output.c',['../osmux__output_8c.html',1,'']]], ['osmux_5fsnprintf_131',['osmux_snprintf',['../group__osmux.html#gaf654e092ca97dd764f59905a2ed21650',1,'osmux.c']]], ['osmux_5ftx_5fhandle_132',['osmux_tx_handle',['../structosmux__tx__handle.html',1,'']]], ['osmux_5fxfrm_5finput_133',['osmux_xfrm_input',['../group__osmux.html#ga9c7d30c0d7d9bc0caf744799d629d4cc',1,'osmux_input.c']]], ['osmux_5fxfrm_5foutput_5falloc_134',['osmux_xfrm_output_alloc',['../group__osmux.html#ga41a217bffa1b0ac095c98ab0fab82c25',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fflush_135',['osmux_xfrm_output_flush',['../group__osmux.html#gaaac410425f6470396ae9db53ebb8dc44',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fsched_136',['osmux_xfrm_output_sched',['../group__osmux.html#gafee78ee4522a9caa238301d7b913dfd6',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5frtp_5fmsgb_5falloc_5fcb_137',['osmux_xfrm_output_set_rtp_msgb_alloc_cb',['../group__osmux.html#ga97187827e1f793f2392e54585343db32',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5frtp_5fpl_5ftype_138',['osmux_xfrm_output_set_rtp_pl_type',['../group__osmux.html#ga0d96c8a544e0ff56576615e0b2ac7774',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5frtp_5fssrc_139',['osmux_xfrm_output_set_rtp_ssrc',['../group__osmux.html#ga08151bad3c12df245d4c0e4f9c4ca966',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5ftx_5fcb_140',['osmux_xfrm_output_set_tx_cb',['../group__osmux.html#ga3936e43e881d0992648937417969ead1',1,'osmux_output.c']]] ]; html/search/search.css0000644000175000017500000001072214642372355014243 0ustar buildbuild/*---------------- Search Box */ #MSearchBox { white-space : nowrap; background: white; border-radius: 0.65em; box-shadow: inset 0.5px 0.5px 3px 0px #555; z-index: 102; } #MSearchBox .left { display: inline-block; vertical-align: middle; height: 1.4em; } #MSearchSelect { display: inline-block; vertical-align: middle; height: 19px; padding: 0 0 0 0.3em; margin: 0; } #MSearchField { display: inline-block; vertical-align: middle; width: 7.5em; height: 19px; margin: 0 0.15em; padding: 0; line-height: 1em; border:none; color: #909090; outline: none; font-family: Arial, Verdana, sans-serif; -webkit-border-radius: 0px; border-radius: 0px; background: none; } @media(hover: none) { /* to avoid zooming on iOS */ #MSearchField { font-size: 16px; } } #MSearchBox .right { display: inline-block; vertical-align: middle; width: 1.4em; height: 1.4em; } #MSearchClose { display: none; font-size: inherit; background : none; border: none; margin: 0; padding: 0; outline: none; } #MSearchCloseImg { height: 1.4em; padding: 0.3em; margin: 0; } .MSearchBoxActive #MSearchField { color: #000000; } #main-menu > li:last-child { /* This
  • object is the parent of the search bar */ display: flex; justify-content: center; align-items: center; height: 36px; margin-right: 1em; } /*---------------- Search filter selection */ #MSearchSelectWindow { display: none; position: absolute; left: 0; top: 0; border: 1px solid #90A5CE; background-color: #F9FAFC; z-index: 10001; padding-top: 4px; padding-bottom: 4px; -moz-border-radius: 4px; -webkit-border-top-left-radius: 4px; -webkit-border-top-right-radius: 4px; -webkit-border-bottom-left-radius: 4px; -webkit-border-bottom-right-radius: 4px; -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); } .SelectItem { font: 8pt Arial, Verdana, sans-serif; padding-left: 2px; padding-right: 12px; border: 0px; } span.SelectionMark { margin-right: 4px; font-family: monospace; outline-style: none; text-decoration: none; } a.SelectItem { display: block; outline-style: none; color: #000000; text-decoration: none; padding-left: 6px; padding-right: 12px; } a.SelectItem:focus, a.SelectItem:active { color: #000000; outline-style: none; text-decoration: none; } a.SelectItem:hover { color: #FFFFFF; background-color: #3D578C; outline-style: none; text-decoration: none; cursor: pointer; display: block; } /*---------------- Search results window */ iframe#MSearchResults { /*width: 60ex;*/ height: 15em; } #MSearchResultsWindow { display: none; position: absolute; left: 0; top: 0; border: 1px solid #000; background-color: #EEF1F7; z-index:10000; } /* ----------------------------------- */ #SRIndex { clear:both; padding-bottom: 15px; } .SREntry { font-size: 10pt; padding-left: 1ex; } .SRPage .SREntry { font-size: 8pt; padding: 1px 5px; } body.SRPage { margin: 5px 2px; } .SRChildren { padding-left: 3ex; padding-bottom: .5em } .SRPage .SRChildren { display: none; } .SRSymbol { font-weight: bold; color: #425E97; font-family: Arial, Verdana, sans-serif; text-decoration: none; outline: none; } a.SRScope { display: block; color: #425E97; font-family: Arial, Verdana, sans-serif; text-decoration: none; outline: none; } a.SRSymbol:focus, a.SRSymbol:active, a.SRScope:focus, a.SRScope:active { text-decoration: underline; } span.SRScope { padding-left: 4px; font-family: Arial, Verdana, sans-serif; } .SRPage .SRStatus { padding: 2px 5px; font-size: 8pt; font-style: italic; font-family: Arial, Verdana, sans-serif; } .SRResult { display: none; } div.searchresults { margin-left: 10px; margin-right: 10px; } /*---------------- External search page results */ .searchresult { background-color: #F0F3F8; } .pages b { color: white; padding: 5px 5px 3px 5px; background-image: url("../tab_a.png"); background-repeat: repeat-x; text-shadow: 0 1px 1px #000000; } .pages { line-height: 17px; margin-left: 4px; text-decoration: none; } .hl { font-weight: bold; } #searchresults { margin-bottom: 20px; } .searchpages { margin-top: 10px; } html/search/files_2.html0000644000175000017500000000263514642372355014501 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_8.html0000644000175000017500000000263314642372355014153 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_1.js0000644000175000017500000000022414642372355015006 0ustar buildbuildvar searchData= [ ['primitive_0',['primitive',['../structosmo__prim__pkt__hdr.html#aaca814fcecde761d5205ab9e6beb4b2e',1,'osmo_prim_pkt_hdr']]] ]; html/search/groups_0.html0000644000175000017500000000263614642372355014715 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_5.js0000644000175000017500000000041214642372355013611 0ustar buildbuildvar searchData= [ ['msgb_5fsctp_5fppid_0',['msgb_sctp_ppid',['../group__stream.html#ga2693c0cc5c6222dd9ed42c8c4bf8aec8',1,'stream.h']]], ['msgb_5fsctp_5fstream_1',['msgb_sctp_stream',['../group__stream.html#gac2c359892ad63309b59a4b402f6a3e81',1,'stream.h']]] ]; html/search/all_2.js0000644000175000017500000000012614642372355013610 0ustar buildbuildvar searchData= [ ['datagram_2ec_0',['datagram.c',['../datagram_8c.html',1,'']]] ]; html/search/search_r.png0000644000175000017500000000105114642372355014553 0ustar buildbuild‰PNG  IHDR7›•ygAMA± üa cHRMm˜sŽà8‚ÕzÊ´3Dv„6*½bKGDÿ‡Ì¿ pHYs  šœtIMEâ  OíWßIDAT(Ï…’AKQFI+ ª]‹–ýƒ–ý‚ý–A‹‚¶F»H* )¤…¡Í$¨E¨P»À„©6T ˜ ‚Žóæ£à„ãܳ=÷r¹÷›øÙèn±øѪ>ÿAxˆGüT¸%+ÍXùp§8;~ñóƒÉ'%u"÷óú !~\l:4¨‘‘ñt>ŠŒ)…¢O›7.œÄ^)2VòD‡6Ï$ZÚR Š> nܳ­ (:TUò\8’͇J%'N‡&éÝIÒär=tÒ—Ì®„,nóbfæB$‹Ê©6r§÷fn9à-Ë׻wÚ4Bx6êßïz|Ëûkmq$îH zXÔÝj«ÒyzÅÁe«X¸ZËE‡Éü°cû‘sÑÂ%tEXtdate:create2018-12-07T11:28:17+00:00-?CÛ%tEXtdate:modify2018-12-07T11:28:17+00:00\bûgIEND®B`‚html/search/all_9.js0000644000175000017500000000033514642372355013621 0ustar buildbuildvar searchData= [ ['rtcp_5fhdr_0',['rtcp_hdr',['../structrtcp__hdr.html',1,'']]], ['rtp_5fhdr_1',['rtp_hdr',['../structrtp__hdr.html',1,'']]], ['rtp_5fx_5fhdr_2',['rtp_x_hdr',['../structrtp__x__hdr.html',1,'']]] ]; html/search/classes_3.html0000644000175000017500000000263714642372355015037 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/group__stream.html0000644000175000017500000052237614642372355014570 0ustar buildbuild libosmo-netif: Osmocom Stream Socket
    libosmo-netif 1.4.0
    Osmocom network interface library
    Osmocom Stream Socket

    Files

    file  stream.c
     Osmocom stream socket helpers.
     
    file  stream_cli.c
     Osmocom stream socket helpers (client side)
     
    file  stream_srv.c
     Osmocom stream socket helpers (server side)
     

    Data Structures

    struct  osmo_stream_cli
     
    struct  osmo_stream_srv_link
     
    struct  osmo_stream_srv
     

    Macros

    #define OSMO_STREAM_SCTP_MSG_FLAGS_NOTIFICATION   0x80 /* sctp_recvmsg() flags=MSG_NOTIFICATION, msgb_data() contains "union sctp_notification*" */
     Access SCTP flags from the msgb control buffer.
     
    #define msgb_sctp_msg_flags(msg)   (msg)->cb[2]
     
    #define msgb_sctp_ppid(msg)   (msg)->cb[3]
     Access the SCTP PPID from the msgb control buffer.
     
    #define msgb_sctp_stream(msg)   (msg)->cb[4]
     Access the SCTP Stream ID from the msgb control buffer.
     
    #define LOGSCLI(cli, level, fmt, args...)
     
    #define OSMO_STREAM_CLI_F_RECONF   (1 << 0)
     
    #define OSMO_STREAM_CLI_F_NODELAY   (1 << 1)
     
    #define LOGSLNK(link, level, fmt, args...)
     
    #define LOGSSRV(srv, level, fmt, args...)
     
    #define OSMO_STREAM_SRV_F_RECONF   (1 << 0)
     
    #define OSMO_STREAM_SRV_F_NODELAY   (1 << 1)
     
    #define OSMO_STREAM_SRV_F_FLUSH_DESTROY   (1 << 0)
     

    Enumerations

    enum  osmo_stream_srv_link_param { OSMO_STREAM_SRV_LINK_PAR_SCTP_SOCKOPT_AUTH_SUPPORTED , OSMO_STREAM_SRV_LINK_PAR_SCTP_SOCKOPT_ASCONF_SUPPORTED , OSMO_STREAM_SRV_LINK_PAR_SCTP_INIT_NUM_OSTREAMS , OSMO_STREAM_SRV_LINK_PAR_SCTP_INIT_MAX_INSTREAMS }
     
    enum  osmo_stream_cli_param {
      OSMO_STREAM_CLI_PAR_SCTP_SOCKOPT_AUTH_SUPPORTED , OSMO_STREAM_CLI_PAR_SCTP_SOCKOPT_ASCONF_SUPPORTED , OSMO_STREAM_CLI_PAR_SCTP_INIT_NUM_OSTREAMS , OSMO_STREAM_CLI_PAR_SCTP_INIT_MAX_INSTREAMS ,
      OSMO_STREAM_CLI_PAR_SCTP_INIT_MAX_ATTEMPTS , OSMO_STREAM_CLI_PAR_SCTP_INIT_TIMEOUT
    }
     
    enum  osmo_stream_mode { OSMO_STREAM_MODE_UNKNOWN , OSMO_STREAM_MODE_OSMO_FD , OSMO_STREAM_MODE_OSMO_IO }
     
    enum  osmo_stream_cli_state {
      STREAM_CLI_STATE_CLOSED , STREAM_CLI_STATE_WAIT_RECONNECT , STREAM_CLI_STATE_CONNECTING , STREAM_CLI_STATE_CONNECTED ,
      STREAM_CLI_STATE_MAX
    }
     

    Functions

    struct osmo_stream_srv_linkosmo_stream_srv_link_create (void *ctx)
     Create an Osmocom Stream Server Link A Stream Server Link is the listen()+accept() "parent" to individual Stream Servers. More...
     
    void osmo_stream_srv_link_destroy (struct osmo_stream_srv_link *link)
     Destroy the stream server link. Closes + Releases Memory. More...
     
    void osmo_stream_srv_link_set_name (struct osmo_stream_srv_link *link, const char *name)
     Set a name on the srv_link object (used during logging) More...
     
    void osmo_stream_srv_link_set_nodelay (struct osmo_stream_srv_link *link, bool nodelay)
     Set the NODELAY socket option to avoid Nagle-like behavior Setting this to nodelay=true will automatically set the NODELAY socket option on any socket established via this server link, before calling the accept_cb() More...
     
    void osmo_stream_srv_link_set_addr (struct osmo_stream_srv_link *link, const char *addr)
     Set the local address to which we bind. More...
     
    int osmo_stream_srv_link_set_addrs (struct osmo_stream_srv_link *link, const char **addr, size_t addrcnt)
     Set the local address set to which we bind. Useful for protocols allowing bind on more than one address (such as SCTP) More...
     
    void osmo_stream_srv_link_set_port (struct osmo_stream_srv_link *link, uint16_t port)
     Set the local port number to which we bind. More...
     
    void osmo_stream_srv_link_set_proto (struct osmo_stream_srv_link *link, uint16_t proto)
     Set the protocol for the stream server link. More...
     
    int osmo_stream_srv_link_set_type (struct osmo_stream_srv_link *link, int type)
     Set the socket type for the stream server link. More...
     
    int osmo_stream_srv_link_set_domain (struct osmo_stream_srv_link *link, int domain)
     Set the socket type for the stream server link. More...
     
    void osmo_stream_srv_link_set_accept_cb (struct osmo_stream_srv_link *link, int(*accept_cb)(struct osmo_stream_srv_link *link, int fd))
     Set the accept() call-back of the stream server link. More...
     
    void osmo_stream_srv_link_set_data (struct osmo_stream_srv_link *link, void *data)
     Set application private data of the stream server link. More...
     
    void * osmo_stream_srv_link_get_data (struct osmo_stream_srv_link *link)
     Get application private data of the stream server link. More...
     
    char * osmo_stream_srv_link_get_sockname (const struct osmo_stream_srv_link *link)
     Get description of the stream server link e. g. 127.0.0.1:1234. More...
     
    struct osmo_fd * osmo_stream_srv_link_get_ofd (struct osmo_stream_srv_link *link)
     Get Osmocom File Descriptor of the stream server link. More...
     
    bool osmo_stream_srv_link_is_opened (const struct osmo_stream_srv_link *link)
     Check whether the stream server link is opened. More...
     
    int osmo_stream_srv_link_open (struct osmo_stream_srv_link *link)
     Open the stream server link. This actually initializes the underlying socket and binds it to the configured ip/port. More...
     
    void osmo_stream_srv_link_close (struct osmo_stream_srv_link *link)
     Close the stream server link and unregister from select loop Does not destroy the server link, merely closes it! More...
     
    int osmo_stream_srv_link_set_param (struct osmo_stream_srv_link *link, enum osmo_stream_srv_link_param par, void *val, size_t val_len)
     
    struct osmo_stream_srvosmo_stream_srv_create (void *ctx, struct osmo_stream_srv_link *link, int fd, int(*read_cb)(struct osmo_stream_srv *conn), int(*closed_cb)(struct osmo_stream_srv *conn), void *data)
     Create a Stream Server inside the specified link. More...
     
    struct osmo_stream_srvosmo_stream_srv_create2 (void *ctx, struct osmo_stream_srv_link *link, int fd, void *data)
     Create a Stream Server inside the specified link. More...
     
    void osmo_stream_srv_set_name (struct osmo_stream_srv *conn, const char *name)
     Set a name on the srv object (used during logging) More...
     
    void osmo_stream_srv_set_read_cb (struct osmo_stream_srv *conn, int(*read_cb)(struct osmo_stream_srv *conn, struct msgb *msg))
     Set the call-back function when data was read from the stream server socket Only for osmo_stream_srv created with osmo_stream_srv_create2() More...
     
    void osmo_stream_srv_set_closed_cb (struct osmo_stream_srv *conn, int(*closed_cb)(struct osmo_stream_srv *conn))
     Set the call-back function called when the stream server socket was closed. More...
     
    void * osmo_stream_srv_get_data (struct osmo_stream_srv *conn)
     Get application private data of the stream server. More...
     
    struct osmo_stream_srv_linkosmo_stream_srv_get_master (struct osmo_stream_srv *conn)
     Get the master (Link) from a Stream Server. More...
     
    struct osmo_fd * osmo_stream_srv_get_ofd (struct osmo_stream_srv *conn)
     Get Osmocom File Descriptor of the stream server. More...
     
    void osmo_stream_srv_destroy (struct osmo_stream_srv *conn)
     Destroy given Stream Server This function closes the Stream Server socket, unregisters from select loop, invokes the connection's closed_cb() callback to allow API users to clean up any associated state they have for this connection, and then de-allocates associated memory. More...
     
    void osmo_stream_srv_set_flush_and_destroy (struct osmo_stream_srv *conn)
     Prepare to send out all pending messages on the connection's Tx queue and then automatically destroy the stream with osmo_stream_srv_destroy(). This function disables queuing of new messages on the connection and also disables reception of new messages on the connection. More...
     
    void osmo_stream_srv_set_data (struct osmo_stream_srv *conn, void *data)
     Set application private data of the stream server. More...
     
    void osmo_stream_srv_set_segmentation_cb (struct osmo_stream_srv *conn, int(*segmentation_cb)(struct msgb *msg))
     Set the segmentation callback for target osmo_stream_srv structure. The connection has to have been established prior to calling this function. More...
     
    void osmo_stream_srv_send (struct osmo_stream_srv *conn, struct msgb *msg)
     Enqueue data to be sent via an Osmocom stream server. More...
     
    int osmo_stream_srv_recv (struct osmo_stream_srv *conn, struct msgb *msg)
     Receive data via Osmocom stream server. More...
     
    void osmo_stream_srv_clear_tx_queue (struct osmo_stream_srv *conn)
     
    void osmo_stream_cli_set_name (struct osmo_stream_cli *cli, const char *name)
     Set a name on the cli object (used during logging) More...
     
    void osmo_stream_cli_set_nodelay (struct osmo_stream_cli *cli, bool nodelay)
     Set the NODELAY socket option to avoid Nagle-like behavior Setting this to nodelay=true will automatically set the NODELAY socket option on any socket established via osmo_stream_cli_open or any re-connect. You have to set this before opening the socket. More...
     
    void osmo_stream_cli_set_addr (struct osmo_stream_cli *cli, const char *addr)
     Set the remote address to which we connect. More...
     
    int osmo_stream_cli_set_addrs (struct osmo_stream_cli *cli, const char **addr, size_t addrcnt)
     Set the remote address set to which we connect. Useful for protocols allowing connecting to more than one address (such as SCTP) More...
     
    void osmo_stream_cli_set_port (struct osmo_stream_cli *cli, uint16_t port)
     Set the remote port number to which we connect. More...
     
    int osmo_stream_cli_set_type (struct osmo_stream_cli *cli, int type)
     Set the socket type for the stream server link. More...
     
    int osmo_stream_cli_set_domain (struct osmo_stream_cli *cli, int domain)
     Set the socket type for the stream server link. More...
     
    void osmo_stream_cli_set_proto (struct osmo_stream_cli *cli, uint16_t proto)
     Set the protocol for the stream client socket. More...
     
    void osmo_stream_cli_set_local_addr (struct osmo_stream_cli *cli, const char *addr)
     Set the local address for the socket (to be bound to) More...
     
    int osmo_stream_cli_set_local_addrs (struct osmo_stream_cli *cli, const char **addr, size_t addrcnt)
     Set the local address set to which we connect. Useful for protocols allowing bind to more than one address (such as SCTP) More...
     
    void osmo_stream_cli_set_local_port (struct osmo_stream_cli *cli, uint16_t port)
     Set the local port number for the socket (to be bound to) More...
     
    void osmo_stream_cli_set_data (struct osmo_stream_cli *cli, void *data)
     Set application private data of the stream client socket. More...
     
    void osmo_stream_cli_set_reconnect_timeout (struct osmo_stream_cli *cli, int timeout)
     Set the reconnect time of the stream client socket. More...
     
    void * osmo_stream_cli_get_data (struct osmo_stream_cli *cli)
     Get application private data of the stream client socket. More...
     
    char * osmo_stream_cli_get_sockname (const struct osmo_stream_cli *cli)
     Get the stream client socket description. More...
     
    struct osmo_fd * osmo_stream_cli_get_ofd (struct osmo_stream_cli *cli)
     Get Osmocom File Descriptor of the stream client socket. More...
     
    void osmo_stream_cli_set_connect_cb (struct osmo_stream_cli *cli, int(*connect_cb)(struct osmo_stream_cli *cli))
     Set the call-back function called on connect of the stream client socket. More...
     
    void osmo_stream_cli_set_disconnect_cb (struct osmo_stream_cli *cli, int(*disconnect_cb)(struct osmo_stream_cli *cli))
     Set the call-back function called on disconnect of the stream client socket. More...
     
    void osmo_stream_cli_set_read_cb (struct osmo_stream_cli *cli, int(*read_cb)(struct osmo_stream_cli *cli))
     Set the call-back function called to read from the stream client socket This function will configure osmo_stream_cli to use osmo_ofd internally. More...
     
    void osmo_stream_cli_set_read_cb2 (struct osmo_stream_cli *cli, int(*read_cb)(struct osmo_stream_cli *cli, struct msgb *msg))
     Set the call-back function called to read from the stream client socket This function will configure osmo_stream_cli to use osmo_iofd internally. More...
     
    void osmo_stream_cli_reconnect (struct osmo_stream_cli *cli)
     Re-connect an Osmocom Stream Client If re-connection is enabled for this client (which is the case unless negative timeout was explicitly set via osmo_stream_cli_set_reconnect_timeout() call), we close any existing connection (if any) and schedule a re-connect timer.
     
    bool osmo_stream_cli_is_connected (struct osmo_stream_cli *cli)
     Check if Osmocom Stream Client is in connected state. More...
     
    struct osmo_stream_cliosmo_stream_cli_create (void *ctx)
     Create an Osmocom stream client. More...
     
    void osmo_stream_cli_destroy (struct osmo_stream_cli *cli)
     Destroy a Osmocom stream client (includes close) More...
     
    int osmo_stream_cli_open (struct osmo_stream_cli *cli)
     Open connection of an Osmocom stream client By default the client will automatically reconnect after default timeout. To disable this, use osmo_stream_cli_set_reconnect_timeout() before calling this function. More...
     
    int osmo_stream_cli_open2 (struct osmo_stream_cli *cli, int reconnect)
     DEPRECATED: use osmo_stream_cli_set_reconnect_timeout() or osmo_stream_cli_reconnect() instead! Open connection of an Osmocom stream client. More...
     
    void osmo_stream_cli_close (struct osmo_stream_cli *cli)
     Close an Osmocom Stream Client. More...
     
    void osmo_stream_cli_send (struct osmo_stream_cli *cli, struct msgb *msg)
     Enqueue data to be sent via an Osmocom stream client. More...
     
    int osmo_stream_cli_recv (struct osmo_stream_cli *cli, struct msgb *msg)
     Receive data via an Osmocom stream client. More...
     
    void osmo_stream_cli_clear_tx_queue (struct osmo_stream_cli *cli)
     
    int osmo_stream_cli_set_param (struct osmo_stream_cli *cli, enum osmo_stream_cli_param par, void *val, size_t val_len)
     
    int stream_sctp_sock_activate_events (int fd)
     
    int stream_setsockopt_nodelay (int fd, int proto, int on)
     
    int stream_sctp_recvmsg_wrapper (int fd, struct msgb *msg, const char *log_pfx)
     
    static void osmo_stream_cli_close_iofd (struct osmo_stream_cli *cli)
     
    static void osmo_stream_cli_close_ofd (struct osmo_stream_cli *cli)
     
    static int osmo_stream_cli_fd (const struct osmo_stream_cli *cli)
     
    static void osmo_stream_cli_read (struct osmo_stream_cli *cli)
     
    static int osmo_stream_cli_write (struct osmo_stream_cli *cli)
     
    static int _setsockopt_nosigpipe (struct osmo_stream_cli *cli)
     
    static void stream_cli_handle_connecting (struct osmo_stream_cli *cli, int res)
     
    static int osmo_stream_cli_fd_cb (struct osmo_fd *ofd, unsigned int what)
     
    static void cli_timer_cb (void *data)
     
    static void stream_cli_iofd_read_cb (struct osmo_io_fd *iofd, int res, struct msgb *msg)
     
    static void stream_cli_iofd_write_cb (struct osmo_io_fd *iofd, int res, struct msgb *msg)
     
    static int _setsockopt_nosigpipe (struct osmo_stream_srv_link *link, int new_fd)
     
    static int osmo_stream_srv_link_ofd_cb (struct osmo_fd *ofd, unsigned int what)
     
    static void stream_srv_iofd_read_cb (struct osmo_io_fd *iofd, int res, struct msgb *msg)
     
    static void stream_srv_iofd_write_cb (struct osmo_io_fd *iofd, int res, struct msgb *msg)
     
    static int osmo_stream_srv_read (struct osmo_stream_srv *conn)
     
    static void osmo_stream_srv_write (struct osmo_stream_srv *conn)
     
    static int osmo_stream_srv_cb (struct osmo_fd *ofd, unsigned int what)
     

    Variables

    static const struct value_string stream_cli_state_names []
     
    static struct osmo_io_ops osmo_stream_cli_ioops
     
    static struct osmo_io_ops srv_ioops
     

    Detailed Description

    This code is intended to abstract any use of stream-type sockets, such as TCP and SCTP. It offers both server and client side implementations, fully integrated with the libosmocore select loop abstraction.

    This code is intended to abstract any use of stream-type sockets, such as TCP and SCTP. It offers client side implementation, fully integrated with the libosmocore select loop abstraction.

    This code is intended to abstract any use of stream-type sockets, such as TCP and SCTP. It offers server side implementation, fully integrated with the libosmocore select loop abstraction.

    Macro Definition Documentation

    ◆ LOGSCLI

    #define LOGSCLI (   cli,
      level,
      fmt,
      args... 
    )
    Value:
    LOGP(DLINP, level, "CLICONN(%s,%s){%s} " fmt, \
    cli->name ? : "", \
    cli->sockname, \
    get_value_string(stream_cli_state_names, (cli)->state), \
    ## args)

    ◆ LOGSLNK

    #define LOGSLNK (   link,
      level,
      fmt,
      args... 
    )
    Value:
    LOGP(DLINP, level, "SRV(%s,%s) " fmt, \
    link->name ? : "", \
    link->sockname, \
    ## args)

    ◆ LOGSSRV

    #define LOGSSRV (   srv,
      level,
      fmt,
      args... 
    )
    Value:
    LOGP(DLINP, level, "SRVCONN(%s,%s) " fmt, \
    srv->name ? : "", \
    srv->sockname, \
    ## args)

    Function Documentation

    ◆ osmo_stream_cli_close()

    void osmo_stream_cli_close ( struct osmo_stream_cli cli)

    Close an Osmocom Stream Client.

    Parameters
    [in]cliOsmocom Stream Client to be closed We unregister the socket fd from the osmocom select() loop abstraction and close the socket

    Referenced by osmo_stream_cli_destroy(), and osmo_stream_cli_reconnect().

    ◆ osmo_stream_cli_create()

    struct osmo_stream_cli * osmo_stream_cli_create ( void *  ctx)

    Create an Osmocom stream client.

    Parameters
    [in]ctxtalloc context from which to allocate memory This function allocates a new osmo_stream_cli and initializes it with default values (5s reconnect timer, TCP protocol)
    Returns
    allocated stream client, or NULL in case of error

    ◆ osmo_stream_cli_destroy()

    void osmo_stream_cli_destroy ( struct osmo_stream_cli cli)

    Destroy a Osmocom stream client (includes close)

    Parameters
    [in]cliStream Client to destroy

    References osmo_stream_cli_close().

    ◆ osmo_stream_cli_get_data()

    void * osmo_stream_cli_get_data ( struct osmo_stream_cli cli)

    Get application private data of the stream client socket.

    Parameters
    [in]cliStream Client to modify
    Returns
    Application private data, as set by osmo_stream_cli_set_data()

    ◆ osmo_stream_cli_get_ofd()

    struct osmo_fd * osmo_stream_cli_get_ofd ( struct osmo_stream_cli cli)

    Get Osmocom File Descriptor of the stream client socket.

    Parameters
    [in]cliStream Client to modify
    Returns
    Pointer to osmo_fd

    ◆ osmo_stream_cli_get_sockname()

    char * osmo_stream_cli_get_sockname ( const struct osmo_stream_cli cli)

    Get the stream client socket description.

    Parameters
    [in]cliStream Client to examine
    Returns
    Socket description or NULL in case of error

    ◆ osmo_stream_cli_is_connected()

    bool osmo_stream_cli_is_connected ( struct osmo_stream_cli cli)

    Check if Osmocom Stream Client is in connected state.

    Parameters
    [in]cliOsmocom Stream Client
    Returns
    true if connected, false otherwise

    ◆ osmo_stream_cli_open()

    int osmo_stream_cli_open ( struct osmo_stream_cli cli)

    Open connection of an Osmocom stream client By default the client will automatically reconnect after default timeout. To disable this, use osmo_stream_cli_set_reconnect_timeout() before calling this function.

    Parameters
    [in]cliStream Client to connect
    Returns
    negative on error, 0 on success

    ◆ osmo_stream_cli_open2()

    int osmo_stream_cli_open2 ( struct osmo_stream_cli cli,
    int  reconnect 
    )

    DEPRECATED: use osmo_stream_cli_set_reconnect_timeout() or osmo_stream_cli_reconnect() instead! Open connection of an Osmocom stream client.

    Parameters
    [in]cliStream Client to connect
    [in]reconect1 if we should not automatically reconnect
    Returns
    negative on error, 0 on success

    ◆ osmo_stream_cli_recv()

    int osmo_stream_cli_recv ( struct osmo_stream_cli cli,
    struct msgb *  msg 
    )

    Receive data via an Osmocom stream client.

    Parameters
    [in]cliStream Client through which we want to send
    msgpre-allocate message buffer to which received data is appended
    Returns
    number of bytes read; <=0 in case of error

    If conn is an SCTP connection, additional specific considerations shall be taken:

    • msg->cb is always filled with SCTP ppid, and SCTP stream values, see msgb_sctp_*() APIs.
    • If an SCTP notification was received when reading from the SCTP socket, msgb_sctp_msg_flags(msg) will contain bit flag OSMO_STREAM_SCTP_MSG_FLAGS_NOTIFICATION set, and the msgb will contain a "union sctp_notification" instead of user data. In this case the return code will be either 0 (if conn is considered dead after the notification) or -EAGAIN (if conn is considered still alive after the notification) resembling the standard recv() API.

    ◆ osmo_stream_cli_send()

    void osmo_stream_cli_send ( struct osmo_stream_cli cli,
    struct msgb *  msg 
    )

    Enqueue data to be sent via an Osmocom stream client.

    Parameters
    [in]cliStream Client through which we want to send
    [in]msgMessage buffer to enqueue in transmit queue

    ◆ osmo_stream_cli_set_addr()

    void osmo_stream_cli_set_addr ( struct osmo_stream_cli cli,
    const char *  addr 
    )

    Set the remote address to which we connect.

    Parameters
    [in]cliStream Client to modify
    [in]addrRemote IP address

    References osmo_stream_cli_set_addrs().

    ◆ osmo_stream_cli_set_addrs()

    int osmo_stream_cli_set_addrs ( struct osmo_stream_cli cli,
    const char **  addr,
    size_t  addrcnt 
    )

    Set the remote address set to which we connect. Useful for protocols allowing connecting to more than one address (such as SCTP)

    Parameters
    [in]cliStream Client to modify
    [in]addrRemote IP address set
    Returns
    negative on error, 0 on success

    Referenced by osmo_stream_cli_set_addr().

    ◆ osmo_stream_cli_set_connect_cb()

    void osmo_stream_cli_set_connect_cb ( struct osmo_stream_cli cli,
    int(*)(struct osmo_stream_cli *cli)  connect_cb 
    )

    Set the call-back function called on connect of the stream client socket.

    Parameters
    [in]cliStream Client to modify
    [in]connect_cbCall-back function to be called upon connect

    ◆ osmo_stream_cli_set_data()

    void osmo_stream_cli_set_data ( struct osmo_stream_cli cli,
    void *  data 
    )

    Set application private data of the stream client socket.

    Parameters
    [in]cliStream Client to modify
    [in]dataUser-specific data (available in call-back functions)

    ◆ osmo_stream_cli_set_disconnect_cb()

    void osmo_stream_cli_set_disconnect_cb ( struct osmo_stream_cli cli,
    int(*)(struct osmo_stream_cli *cli)  disconnect_cb 
    )

    Set the call-back function called on disconnect of the stream client socket.

    Parameters
    [in]cliStream Client to modify
    [in]disconnect_cbCall-back function to be called upon disconnect

    ◆ osmo_stream_cli_set_domain()

    int osmo_stream_cli_set_domain ( struct osmo_stream_cli cli,
    int  domain 
    )

    Set the socket type for the stream server link.

    Parameters
    [in]cliStream Client to modify
    [in]typeSocket Domain (like AF_UNSPEC (default for IP), AF_UNIX, AF_INET, ...)
    Returns
    zero on success, negative on error.

    ◆ osmo_stream_cli_set_local_addr()

    void osmo_stream_cli_set_local_addr ( struct osmo_stream_cli cli,
    const char *  addr 
    )

    Set the local address for the socket (to be bound to)

    Parameters
    [in]cliStream Client to modify
    [in]portLocal host name

    References osmo_stream_cli_set_local_addrs().

    ◆ osmo_stream_cli_set_local_addrs()

    int osmo_stream_cli_set_local_addrs ( struct osmo_stream_cli cli,
    const char **  addr,
    size_t  addrcnt 
    )

    Set the local address set to which we connect. Useful for protocols allowing bind to more than one address (such as SCTP)

    Parameters
    [in]cliStream Client to modify
    [in]addrLocal IP address set
    Returns
    negative on error, 0 on success

    Referenced by osmo_stream_cli_set_local_addr().

    ◆ osmo_stream_cli_set_local_port()

    void osmo_stream_cli_set_local_port ( struct osmo_stream_cli cli,
    uint16_t  port 
    )

    Set the local port number for the socket (to be bound to)

    Parameters
    [in]cliStream Client to modify
    [in]portLocal port number

    ◆ osmo_stream_cli_set_name()

    void osmo_stream_cli_set_name ( struct osmo_stream_cli cli,
    const char *  name 
    )

    Set a name on the cli object (used during logging)

    Parameters
    [in]clistream_cli whose name is to be set
    [in]namethe name to be set on cli

    ◆ osmo_stream_cli_set_nodelay()

    void osmo_stream_cli_set_nodelay ( struct osmo_stream_cli cli,
    bool  nodelay 
    )

    Set the NODELAY socket option to avoid Nagle-like behavior Setting this to nodelay=true will automatically set the NODELAY socket option on any socket established via osmo_stream_cli_open or any re-connect. You have to set this before opening the socket.

    Parameters
    [in]cliStream client whose sockets are to be configured
    [in]nodelaywhether to set (true) NODELAY before connect()

    ◆ osmo_stream_cli_set_port()

    void osmo_stream_cli_set_port ( struct osmo_stream_cli cli,
    uint16_t  port 
    )

    Set the remote port number to which we connect.

    Parameters
    [in]cliStream Client to modify
    [in]portRemote port number

    ◆ osmo_stream_cli_set_proto()

    void osmo_stream_cli_set_proto ( struct osmo_stream_cli cli,
    uint16_t  proto 
    )

    Set the protocol for the stream client socket.

    Parameters
    [in]cliStream Client to modify
    [in]protoProtocol (like IPPROTO_TCP (default), IPPROTO_SCTP, ...)

    ◆ osmo_stream_cli_set_read_cb()

    void osmo_stream_cli_set_read_cb ( struct osmo_stream_cli cli,
    int(*)(struct osmo_stream_cli *cli)  read_cb 
    )

    Set the call-back function called to read from the stream client socket This function will configure osmo_stream_cli to use osmo_ofd internally.

    Parameters
    [in]cliStream Client to modify
    [in]read_cbCall-back function to be called when we want to read

    ◆ osmo_stream_cli_set_read_cb2()

    void osmo_stream_cli_set_read_cb2 ( struct osmo_stream_cli cli,
    int(*)(struct osmo_stream_cli *cli, struct msgb *msg)  read_cb 
    )

    Set the call-back function called to read from the stream client socket This function will configure osmo_stream_cli to use osmo_iofd internally.

    Parameters
    [in]cliStream Client to modify
    [in]read_cbCall-back function to be called when data was read from the socket

    ◆ osmo_stream_cli_set_reconnect_timeout()

    void osmo_stream_cli_set_reconnect_timeout ( struct osmo_stream_cli cli,
    int  timeout 
    )

    Set the reconnect time of the stream client socket.

    Parameters
    [in]cliStream Client to modify
    [in]timeoutRe-connect timeout in seconds or negative value to disable auto-reconnection

    ◆ osmo_stream_cli_set_type()

    int osmo_stream_cli_set_type ( struct osmo_stream_cli cli,
    int  type 
    )

    Set the socket type for the stream server link.

    Parameters
    [in]cliStream Client to modify
    [in]typeSocket Type (like SOCK_STREAM (default), SOCK_SEQPACKET, ...)
    Returns
    zero on success, negative on error.

    ◆ osmo_stream_srv_create()

    struct osmo_stream_srv * osmo_stream_srv_create ( void *  ctx,
    struct osmo_stream_srv_link link,
    int  fd,
    int(*)(struct osmo_stream_srv *conn)  read_cb,
    int(*)(struct osmo_stream_srv *conn)  closed_cb,
    void *  data 
    )

    Create a Stream Server inside the specified link.

    Parameters
    [in]ctxtalloc allocation context from which to allocate
    [in]linkStream Server Link to which we belong
    [in]fdsystem file descriptor of the new connection
    [in]read_cbCall-back to call when the socket is readable
    [in]closed_cbCall-back to call when the connection is closed
    [in]dataUser data to save in the new Stream Server struct
    Returns
    Stream Server in case of success; NULL on error

    ◆ osmo_stream_srv_create2()

    struct osmo_stream_srv * osmo_stream_srv_create2 ( void *  ctx,
    struct osmo_stream_srv_link link,
    int  fd,
    void *  data 
    )

    Create a Stream Server inside the specified link.

    Parameters
    [in]ctxtalloc allocation context from which to allocate
    [in]linkStream Server Link to which we belong
    [in]fdsystem file descriptor of the new connection
    [in]dataUser data to save in the new Stream Server struct
    Returns
    Stream Server in case of success; NULL on error

    ◆ osmo_stream_srv_destroy()

    void osmo_stream_srv_destroy ( struct osmo_stream_srv conn)

    Destroy given Stream Server This function closes the Stream Server socket, unregisters from select loop, invokes the connection's closed_cb() callback to allow API users to clean up any associated state they have for this connection, and then de-allocates associated memory.

    Parameters
    [in]connStream Server to be destroyed

    ◆ osmo_stream_srv_get_data()

    void * osmo_stream_srv_get_data ( struct osmo_stream_srv conn)

    Get application private data of the stream server.

    Parameters
    [in]connStream Server
    Returns
    Application private data, as set by osmo_stream_srv_set_data()

    ◆ osmo_stream_srv_get_master()

    struct osmo_stream_srv_link * osmo_stream_srv_get_master ( struct osmo_stream_srv conn)

    Get the master (Link) from a Stream Server.

    Parameters
    [in]connStream Server of which we want to know the Link
    Returns
    Link through which the given Stream Server is established

    ◆ osmo_stream_srv_get_ofd()

    struct osmo_fd * osmo_stream_srv_get_ofd ( struct osmo_stream_srv conn)

    Get Osmocom File Descriptor of the stream server.

    Parameters
    [in]connStream Server
    Returns
    Pointer to osmo_fd

    ◆ osmo_stream_srv_link_close()

    void osmo_stream_srv_link_close ( struct osmo_stream_srv_link link)

    Close the stream server link and unregister from select loop Does not destroy the server link, merely closes it!

    Parameters
    [in]linkStream Server Link to close

    References osmo_stream_srv_link_is_opened().

    Referenced by osmo_stream_srv_link_destroy().

    ◆ osmo_stream_srv_link_create()

    struct osmo_stream_srv_link * osmo_stream_srv_link_create ( void *  ctx)

    Create an Osmocom Stream Server Link A Stream Server Link is the listen()+accept() "parent" to individual Stream Servers.

    Parameters
    [in]ctxtalloc allocation context
    Returns
    Stream Server Link with default values (TCP)

    ◆ osmo_stream_srv_link_destroy()

    void osmo_stream_srv_link_destroy ( struct osmo_stream_srv_link link)

    Destroy the stream server link. Closes + Releases Memory.

    Parameters
    [in]linkStream Server Link

    References osmo_stream_srv_link_close().

    ◆ osmo_stream_srv_link_get_data()

    void * osmo_stream_srv_link_get_data ( struct osmo_stream_srv_link link)

    Get application private data of the stream server link.

    Parameters
    [in]linkStream Server Link to modify
    Returns
    Application private data, as set by osmo_stream_cli_set_data()

    ◆ osmo_stream_srv_link_get_ofd()

    struct osmo_fd * osmo_stream_srv_link_get_ofd ( struct osmo_stream_srv_link link)

    Get Osmocom File Descriptor of the stream server link.

    Parameters
    [in]linkStream Server Link
    Returns
    Pointer to osmo_fd

    ◆ osmo_stream_srv_link_get_sockname()

    char * osmo_stream_srv_link_get_sockname ( const struct osmo_stream_srv_link link)

    Get description of the stream server link e. g. 127.0.0.1:1234.

    Parameters
    [in]linkStream Server Link to examine
    Returns
    Link description or NULL in case of error

    ◆ osmo_stream_srv_link_is_opened()

    bool osmo_stream_srv_link_is_opened ( const struct osmo_stream_srv_link link)

    Check whether the stream server link is opened.

    Parameters
    [in]linkStream Server Link to check

    Referenced by osmo_stream_srv_link_close().

    ◆ osmo_stream_srv_link_open()

    int osmo_stream_srv_link_open ( struct osmo_stream_srv_link link)

    Open the stream server link. This actually initializes the underlying socket and binds it to the configured ip/port.

    Parameters
    [in]linkStream Server Link to open
    Returns
    negative on error, 0 on success

    ◆ osmo_stream_srv_link_set_accept_cb()

    void osmo_stream_srv_link_set_accept_cb ( struct osmo_stream_srv_link link,
    int(*)(struct osmo_stream_srv_link *link, int fd)  accept_cb 
    )

    Set the accept() call-back of the stream server link.

    Parameters
    [in]linkStream Server Link
    [in]accept_cbCall-back function executed upon accept()

    ◆ osmo_stream_srv_link_set_addr()

    void osmo_stream_srv_link_set_addr ( struct osmo_stream_srv_link link,
    const char *  addr 
    )

    Set the local address to which we bind.

    Parameters
    [in]linkStream Server Link to modify
    [in]addrLocal IP address

    References osmo_stream_srv_link_set_addrs().

    ◆ osmo_stream_srv_link_set_addrs()

    int osmo_stream_srv_link_set_addrs ( struct osmo_stream_srv_link link,
    const char **  addr,
    size_t  addrcnt 
    )

    Set the local address set to which we bind. Useful for protocols allowing bind on more than one address (such as SCTP)

    Parameters
    [in]linkStream Server Link to modify
    [in]addrLocal IP address
    Returns
    negative on error, 0 on success

    Referenced by osmo_stream_srv_link_set_addr().

    ◆ osmo_stream_srv_link_set_data()

    void osmo_stream_srv_link_set_data ( struct osmo_stream_srv_link link,
    void *  data 
    )

    Set application private data of the stream server link.

    Parameters
    [in]linkStream Server Link to modify
    [in]dataUser-specific data (available in call-back functions)

    ◆ osmo_stream_srv_link_set_domain()

    int osmo_stream_srv_link_set_domain ( struct osmo_stream_srv_link link,
    int  domain 
    )

    Set the socket type for the stream server link.

    Parameters
    [in]linkStream Server Link to modify
    [in]typeSocket Domain (like AF_UNSPEC (default for IP), AF_UNIX, AF_INET, ...)
    Returns
    zero on success, negative on error.

    ◆ osmo_stream_srv_link_set_name()

    void osmo_stream_srv_link_set_name ( struct osmo_stream_srv_link link,
    const char *  name 
    )

    Set a name on the srv_link object (used during logging)

    Parameters
    [in]linkserver link whose name is to be set
    [in]namethe name to be set on link

    ◆ osmo_stream_srv_link_set_nodelay()

    void osmo_stream_srv_link_set_nodelay ( struct osmo_stream_srv_link link,
    bool  nodelay 
    )

    Set the NODELAY socket option to avoid Nagle-like behavior Setting this to nodelay=true will automatically set the NODELAY socket option on any socket established via this server link, before calling the accept_cb()

    Parameters
    [in]linkserver link whose sockets are to be configured
    [in]nodelaywhether to set (true) NODELAY after accept

    ◆ osmo_stream_srv_link_set_port()

    void osmo_stream_srv_link_set_port ( struct osmo_stream_srv_link link,
    uint16_t  port 
    )

    Set the local port number to which we bind.

    Parameters
    [in]linkStream Server Link to modify
    [in]portLocal port number

    ◆ osmo_stream_srv_link_set_proto()

    void osmo_stream_srv_link_set_proto ( struct osmo_stream_srv_link link,
    uint16_t  proto 
    )

    Set the protocol for the stream server link.

    Parameters
    [in]linkStream Server Link to modify
    [in]protoProtocol (like IPPROTO_TCP (default), IPPROTO_SCTP, ...)

    ◆ osmo_stream_srv_link_set_type()

    int osmo_stream_srv_link_set_type ( struct osmo_stream_srv_link link,
    int  type 
    )

    Set the socket type for the stream server link.

    Parameters
    [in]linkStream Server Link to modify
    [in]typeSocket Type (like SOCK_STREAM (default), SOCK_SEQPACKET, ...)
    Returns
    zero on success, negative on error.

    ◆ osmo_stream_srv_recv()

    int osmo_stream_srv_recv ( struct osmo_stream_srv conn,
    struct msgb *  msg 
    )

    Receive data via Osmocom stream server.

    Parameters
    [in]connStream Server from which to receive
    msgpre-allocate message buffer to which received data is appended
    Returns
    number of bytes read, negative on error.

    If conn is an SCTP connection, additional specific considerations shall be taken:

    • msg->cb is always filled with SCTP ppid, and SCTP stream values, see msgb_sctp_*() APIs.
    • If an SCTP notification was received when reading from the SCTP socket, msgb_sctp_msg_flags(msg) will contain bit flag OSMO_STREAM_SCTP_MSG_FLAGS_NOTIFICATION set, and the msgb will contain a "union sctp_notification" instead of user data. In this case the return code will be either 0 (if conn is considered dead after the notification) or -EAGAIN (if conn is considered still alive after the notification) resembling the standard recv() API.

    ◆ osmo_stream_srv_send()

    void osmo_stream_srv_send ( struct osmo_stream_srv conn,
    struct msgb *  msg 
    )

    Enqueue data to be sent via an Osmocom stream server.

    Parameters
    [in]connStream Server through which we want to send
    [in]msgMessage buffer to enqueue in transmit queue

    ◆ osmo_stream_srv_set_closed_cb()

    void osmo_stream_srv_set_closed_cb ( struct osmo_stream_srv conn,
    int(*)(struct osmo_stream_srv *conn)  closed_cb 
    )

    Set the call-back function called when the stream server socket was closed.

    Parameters
    [in]connStream Server to modify
    [in]closed_cbCall-back function to be called when the connection was closed

    ◆ osmo_stream_srv_set_data()

    void osmo_stream_srv_set_data ( struct osmo_stream_srv conn,
    void *  data 
    )

    Set application private data of the stream server.

    Parameters
    [in]connStream Server to modify
    [in]dataUser-specific data (available in call-back functions)

    ◆ osmo_stream_srv_set_flush_and_destroy()

    void osmo_stream_srv_set_flush_and_destroy ( struct osmo_stream_srv conn)

    Prepare to send out all pending messages on the connection's Tx queue and then automatically destroy the stream with osmo_stream_srv_destroy(). This function disables queuing of new messages on the connection and also disables reception of new messages on the connection.

    Parameters
    [in]connStream Server to modify

    ◆ osmo_stream_srv_set_name()

    void osmo_stream_srv_set_name ( struct osmo_stream_srv conn,
    const char *  name 
    )

    Set a name on the srv object (used during logging)

    Parameters
    [in]connserver whose name is to be set
    [in]namethe name to be set on conn

    ◆ osmo_stream_srv_set_read_cb()

    void osmo_stream_srv_set_read_cb ( struct osmo_stream_srv conn,
    int(*)(struct osmo_stream_srv *conn, struct msgb *msg)  read_cb 
    )

    Set the call-back function when data was read from the stream server socket Only for osmo_stream_srv created with osmo_stream_srv_create2()

    Parameters
    [in]connStream Server to modify
    [in]read_cbCall-back function to be called when data was read

    ◆ osmo_stream_srv_set_segmentation_cb()

    void osmo_stream_srv_set_segmentation_cb ( struct osmo_stream_srv conn,
    int(*)(struct msgb *msg)  segmentation_cb 
    )

    Set the segmentation callback for target osmo_stream_srv structure. The connection has to have been established prior to calling this function.

    Parameters
    [in,out]connTarget Stream Server to modify
    [in]segmentation_cbSegmentation callback to be set

    Variable Documentation

    ◆ osmo_stream_cli_ioops

    struct osmo_io_ops osmo_stream_cli_ioops
    static
    Initial value:
    = {
    .read_cb = stream_cli_iofd_read_cb,
    .write_cb = stream_cli_iofd_write_cb,
    .segmentation_cb = NULL,
    }

    ◆ srv_ioops

    struct osmo_io_ops srv_ioops
    static
    Initial value:
    = {
    .read_cb = stream_srv_iofd_read_cb,
    .write_cb = stream_srv_iofd_write_cb,
    }

    ◆ stream_cli_state_names

    const struct value_string stream_cli_state_names[]
    static
    Initial value:
    = {
    { STREAM_CLI_STATE_CLOSED, "CLOSED" },
    { STREAM_CLI_STATE_WAIT_RECONNECT, "WAIT_RECONNECT" },
    { STREAM_CLI_STATE_CONNECTING, "CONNECTING" },
    { STREAM_CLI_STATE_CONNECTED, "CONNECTED" },
    { 0, NULL }
    }
    html/structamr__hdr__bwe.html0000644000175000017500000001122614642372355015721 0ustar buildbuild libosmo-netif: amr_hdr_bwe Struct Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    amr_hdr_bwe Struct Reference

    Data Fields

    uint8_t data [0]
     

    The documentation for this struct was generated from the following file:
    • include/osmocom/netif/amr.h
    html/stream_8c.html0000644000175000017500000001477514642372355013606 0ustar buildbuild libosmo-netif: src/stream.c File Reference
    libosmo-netif 1.4.0
    Osmocom network interface library
    stream.c File Reference

    Osmocom stream socket helpers. More...

    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <string.h>
    #include <time.h>
    #include <sys/fcntl.h>
    #include <sys/socket.h>
    #include <sys/ioctl.h>
    #include <arpa/inet.h>
    #include <netinet/in.h>
    #include <netinet/tcp.h>
    #include <osmocom/core/timer.h>
    #include <osmocom/core/select.h>
    #include <osmocom/core/utils.h>
    #include <osmocom/gsm/tlv.h>
    #include <osmocom/core/msgb.h>
    #include <osmocom/core/osmo_io.h>
    #include <osmocom/core/panic.h>
    #include <osmocom/core/logging.h>
    #include <osmocom/core/talloc.h>
    #include <osmocom/core/socket.h>
    #include <osmocom/netif/stream.h>
    #include <osmocom/netif/stream_private.h>
    #include "config.h"
    #include <osmocom/netif/sctp.h>

    Functions

    int stream_sctp_sock_activate_events (int fd)
     
    int stream_setsockopt_nodelay (int fd, int proto, int on)
     

    Detailed Description

    Osmocom stream socket helpers.