html/0000755000175000017500000000000014752517766011026 5ustar buildbuildhtml/structosmux__in__handle.js0000644000175000017500000000017614752517766016307 0ustar buildbuildvar structosmux__in__handle = [ [ "osmux_seq", "structosmux__in__handle.html#a1ba076a41ef9c3413665b7444c6521cc", null ] ];html/jibuf_8h.html0000644000175000017500000002765114752517766013425 0ustar buildbuild libosmo-netif: include/osmocom/netif/jibuf.h File Reference
libosmo-netif 1.5.1.34-ada6
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.js0000644000175000017500000002651414752517766014150 0ustar buildbuildvar NAVTREEINDEX0 = { "amr_8h_source.html":[3,0,0,0,0,0], "annotated.html":[2,0], "datagram_8c.html":[1,0,1], "datagram_8h.html":[1,0,0], "deprecated.html":[0], "dir_15662fdf1b5c37dde6a3ed82e5410e57.html":[3,0,0,0,0], "dir_68267d1309a1af8e8297ef4c3efbcdba.html":[3,0,1], "dir_abe9b486a10ccc5afdf8abc29637e0c1.html":[3,0,0,0], "dir_d44c64559bbebec7f509842c48db8b23.html":[3,0,0], "files.html":[3,0], "functions.html":[2,1,0], "functions_vars.html":[2,1,1], "globals.html":[3,1,0], "globals_defs.html":[3,1,3], "globals_func.html":[3,1,1], "globals_type.html":[3,1,2], "group__datagram.html":[1,0], "group__datagram.html#ga01efa7269834a745d80910a64c6f61c0":[1,0,8], "group__datagram.html#ga01fb36f8c19b2b64705d8263f7f53f59":[1,0,4], "group__datagram.html#ga095ce94e65f1607026c37c12e6f5e9c0":[1,0,29], "group__datagram.html#ga0eb580467681e8fa91be35a83a74f132":[1,0,23], "group__datagram.html#ga16d69e998c663cdec0b76560a2d8cfb9":[1,0,12], "group__datagram.html#ga27bf4c1d8e4c30ef7b4ec49665d6fc90":[1,0,22], "group__datagram.html#ga36d7e1f26af3308b51f95e06d1c742d7":[1,0,5], "group__datagram.html#ga46db4acbfc35668e35601338d64364ed":[1,0,2], "group__datagram.html#ga48d7e39656886b52aa176fc1b14c84cf":[1,0,32], "group__datagram.html#ga56ee60c89f1a3bc975ab0ede5b71ff15":[1,0,3], "group__datagram.html#ga5a0f7221b8583aac5153f167c4e2177d":[1,0,15], "group__datagram.html#ga6677ee8d976d2e1bed8e0c01e103c18f":[1,0,21], "group__datagram.html#ga66d6c9d5f0243a4f7ed458c62d8e20dd":[1,0,16], "group__datagram.html#ga6b6ef2f02e3d260f1e84a2ecf8c67b5a":[1,0,20], "group__datagram.html#ga6c843f43db5439f8f0ba38f72dbb1a20":[1,0,30], "group__datagram.html#ga6e4b92b9c7f210d1cb3782425d0bdac0":[1,0,10], "group__datagram.html#ga8d712623df3862e55ad248dc5ecd626c":[1,0,26], "group__datagram.html#ga9180ae9a36a9927d4bdb49cdc5708b1f":[1,0,19], "group__datagram.html#ga94fe94f64f1285715db36eb1f2e9deaa":[1,0,28], "group__datagram.html#gaa6a5fbd5f227d15cefe6b234fefb3b4d":[1,0,17], "group__datagram.html#gaad6f9ca0688cd4a8a95ec6002f52ded5":[1,0,25], "group__datagram.html#gaae58d13a6fd634ebfddd486d0d428c5e":[1,0,7], "group__datagram.html#gac65de108c52dba83b178d6453e9fb545":[1,0,6], "group__datagram.html#gad378ba5cc66ee0c27a277906d8434e31":[1,0,13], "group__datagram.html#gad4638b9943090f5bf1a7b75fa8efde46":[1,0,27], "group__datagram.html#gad7af9f04fe4847b0e2eefe35fa05a8b8":[1,0,9], "group__datagram.html#gadeaa837f3df8382bd7a50e668b9d3a61":[1,0,24], "group__datagram.html#gae2962232548d41621520c6c71da423a5":[1,0,31], "group__datagram.html#gaf21d974e14fa22f910313b240d31d40f":[1,0,18], "group__datagram.html#gaf558e9c2f02216ed95db039ddaf31050":[1,0,11], "group__datagram.html#gafbd947def18d8e34062876433ac05e91":[1,0,14], "group__jibuf.html":[1,1], "group__jibuf.html#ga096e87b2dbdade72c35d51a51fe57839":[1,1,5], "group__jibuf.html#ga20592f230f9d1233752fd318996f2c9d":[1,1,2], "group__jibuf.html#ga3a8213fe8bed42d649fcb1c8d13e23d8":[1,1,7], "group__jibuf.html#ga522165ddc51578436ae2d26691fa7ec0":[1,1,6], "group__jibuf.html#ga5e84571c3348525b6ad647a22cd2581d":[1,1,8], "group__jibuf.html#gabcd63f39049bc4d6b3541a674b78963d":[1,1,9], "group__jibuf.html#gacdac7beaf3d97543718ddfa33123fb7e":[1,1,3], "group__jibuf.html#gae73a3b805b83f453339adeee9cdfaba4":[1,1,4], "group__osmux.html":[1,4], "group__osmux.html#ga08151bad3c12df245d4c0e4f9c4ca966":[1,4,19], "group__osmux.html#ga0d96c8a544e0ff56576615e0b2ac7774":[1,4,18], "group__osmux.html#ga13655a3bdc68f5e96ad1fe1c03dc235e":[1,4,10], "group__osmux.html#ga3936e43e881d0992648937417969ead1":[1,4,20], "group__osmux.html#ga41a217bffa1b0ac095c98ab0fab82c25":[1,4,12], "group__osmux.html#ga90d58246bcd24a6126898cd6c47dddf4":[1,4,14], "group__osmux.html#ga96230b0431d5d4d91f2dd57a9c85c366":[1,4,11], "group__osmux.html#ga97187827e1f793f2392e54585343db32":[1,4,17], "group__osmux.html#ga9c7d30c0d7d9bc0caf744799d629d4cc":[1,4,8], "group__osmux.html#gaa076e54fa0d249721a4c7b174a8ed2d1":[1,4,15], "group__osmux.html#gaaac410425f6470396ae9db53ebb8dc44":[1,4,13], "group__osmux.html#gad61cdde332496df6d7350d147e50b8be":[1,4,9], "group__osmux.html#gaf654e092ca97dd764f59905a2ed21650":[1,4,7], "group__osmux.html#gafee78ee4522a9caa238301d7b913dfd6":[1,4,16], "group__stream__cli.html":[1,3], "group__stream__cli.html#ga0038e937cf0f36c59e0e3991523219a1":[1,3,17], "group__stream__cli.html#ga0615daa4aac253a3d530f35fddbc68bd":[1,3,9], "group__stream__cli.html#ga0638e98001fa4bdd36533718472dfac7":[1,3,29], "group__stream__cli.html#ga06f9743c19068bb720a4949ae8467243":[1,3,15], "group__stream__cli.html#ga090fc3fcd1706b815ef5a729921c100e":[1,3,25], "group__stream__cli.html#ga0967921ed380123e3f54fd35375741bf":[1,3,8], "group__stream__cli.html#ga113d99fd2e25ce01e98db0a6aa21c89c":[1,3,0], "group__stream__cli.html#ga11d2615f6197f33073ba7245e5ba95ee":[1,3,14], "group__stream__cli.html#ga127866794591d16a0eb7244f2fe666ef":[1,3,13], "group__stream__cli.html#ga1754a498abc27577a8e0b3b0f236c05b":[1,3,3], "group__stream__cli.html#ga18526a340625c84a69ccc067ce2cda58":[1,3,23], "group__stream__cli.html#ga33ce730fc91ebade9b7188fa220656c6":[1,3,22], "group__stream__cli.html#ga4d83e3cf7fdf7eb354c2015ff9bed98a":[1,3,26], "group__stream__cli.html#ga5e5c4c9aacc1cd1d303c0295018594cb":[1,3,39], "group__stream__cli.html#ga5e94c511d537f63337912bb50fb2dc28":[1,3,20], "group__stream__cli.html#ga606a53840677f3f5200887dc92f5de4d":[1,3,5], "group__stream__cli.html#ga6640b82a47028434455471bb52d9f577":[1,3,21], "group__stream__cli.html#ga6a7d4b7df43a3f0487d343fe3cd0c6a7":[1,3,19], "group__stream__cli.html#ga70420e7c664cc4c4e69ac4d3476e7f53":[1,3,24], "group__stream__cli.html#ga7892eb77d40f08a254f654786d0b996b":[1,3,34], "group__stream__cli.html#ga798f23db7e2e1d999775589db8a73d03":[1,3,33], "group__stream__cli.html#ga79a09e9c9b8cc98991cd5eebdb41ed57":[1,3,11], "group__stream__cli.html#ga86b4b9c8e563f8426d3cdae803e3ec38":[1,3,12], "group__stream__cli.html#ga889f96540a1a2271a40dee063eaf5e9d":[1,3,38], "group__stream__cli.html#ga91d57aa94a370520540d7272af66a23b":[1,3,32], "group__stream__cli.html#ga9d0dac2f390c660c85fa347765f4f45a":[1,3,4], "group__stream__cli.html#gaa196e78db6ca32abb1473566b4f1b04b":[1,3,28], "group__stream__cli.html#gaab1e7ef0ccc88e124c5f7bbb5e46c29c":[1,3,18], "group__stream__cli.html#gaacf415b97e1184baadeee5c60387422b":[1,3,16], "group__stream__cli.html#gab6094559935824750d82b9164ed76910":[1,3,36], "group__stream__cli.html#gab8b9f65bebfeb83c6e33d102e9439770":[1,3,30], "group__stream__cli.html#gac32d0489dd05ab89fb0c54dfd360d5b3":[1,3,7], "group__stream__cli.html#gac3ec56e61ce062300ad1df73a5f2c7f8":[1,3,31], "group__stream__cli.html#gad217c1c1b83ac852e090afd49146db19":[1,3,2], "group__stream__cli.html#gade74792afe35f31dd2584c888db3dd62":[1,3,35], "group__stream__cli.html#gaeb712dc553735736047f9b11d9583baa":[1,3,27], "group__stream__cli.html#gaecd148ae11f2f619aa52dd2900a15827":[1,3,10], "group__stream__cli.html#gaf62f1dbe4570d8ffd00b3bdc3f28d24b":[1,3,37], "group__stream__cli.html#gafa39b1dcc139ad12cbc38d51049bf14f":[1,3,1], "group__stream__cli.html#gaffc6ac3b28d87c910294a2f522a1eaab":[1,3,6], "group__stream__srv.html":[1,2], "group__stream__srv.html#ga136b426790b6322f58f89059b88aaa0b":[1,2,1], "group__stream__srv.html#ga1903f9aa2e6f9283ebcf20f573b1d970":[1,2,35], "group__stream__srv.html#ga196834d254fd94922d6be91b7b5b1ed3":[1,2,41], "group__stream__srv.html#ga1eea525d4e1e7a24c9c08881994ceb7e":[1,2,21], "group__stream__srv.html#ga2508987133a93863d2a50103004b0f36":[1,2,33], "group__stream__srv.html#ga28243be108ed0302b0f5a9d1dfc96b22":[1,2,19], "group__stream__srv.html#ga348c4560f69403fc3a3dfcbe874c2593":[1,2,44], "group__stream__srv.html#ga3bfcfe6f09fa8f87dacb7ea215c64bae":[1,2,32], "group__stream__srv.html#ga41e8ad2c761aaa00313aa11d1f29a3ed":[1,2,29], "group__stream__srv.html#ga47bbca4f12717db2e6158eefe6310b9b":[1,2,9], "group__stream__srv.html#ga47f18e063f64f22cb74d58d8b7243bed":[1,2,3], "group__stream__srv.html#ga4f176a35751509dc741fbd2b52f45b22":[1,2,10], "group__stream__srv.html#ga53be410e4b8cf79e850b8cd5c01b4c78":[1,2,26], "group__stream__srv.html#ga560a6d868bf95bf2f3a4b716bfd5cac9":[1,2,43], "group__stream__srv.html#ga5b6beeb3ec1effa8afa948deb7a4fc15":[1,2,0], "group__stream__srv.html#ga5ef0f0c85a52c08e8c10d36a8f44e392":[1,2,24], "group__stream__srv.html#ga603b89074d3e8c0fb44144ab1864f0d4":[1,2,20], "group__stream__srv.html#ga67520942e5a404a0b3a6960b8a161de8":[1,2,16], "group__stream__srv.html#ga759bceb4ce155f88e3e7817ce4c9449d":[1,2,30], "group__stream__srv.html#ga76bbbafd1d8dc9c9ebffd301503b6dd9":[1,2,31], "group__stream__srv.html#ga7b8981351a154c357fcefd39c31ad42a":[1,2,17], "group__stream__srv.html#ga7d7b6af7df24e90dc758a088bae6316d":[1,2,18], "group__stream__srv.html#ga803c8ba415f66cc1029b3899cc53b807":[1,2,5], "group__stream__srv.html#ga8390ce6740e56eb22215e1c5805c95f1":[1,2,40], "group__stream__srv.html#ga882acaaa5935422b0e09a2ce8c8019ec":[1,2,13], "group__stream__srv.html#ga8be283e1a143e346b4d6ccf33cbb9b98":[1,2,2], "group__stream__srv.html#ga925981abcacca9f9a3375d511309cb32":[1,2,27], "group__stream__srv.html#ga9629b516297c31f34af48e4630973dab":[1,2,25], "group__stream__srv.html#ga9891663b20714d72f992e44ad1e92eea":[1,2,39], "group__stream__srv.html#ga9cf689935bf6ffac4f86f56219d73c8e":[1,2,7], "group__stream__srv.html#ga9e00a9172d5b2708afa269d52c118eff":[1,2,6], "group__stream__srv.html#gaa1589994cf6eab27742cafee6b7fb491":[1,2,37], "group__stream__srv.html#gaad262988c7ac365566f03843c560f892":[1,2,12], "group__stream__srv.html#gaadabca7d23c52c39e291bf7e05f0055b":[1,2,23], "group__stream__srv.html#gac86242c41223c525c770ff7e7515d83e":[1,2,36], "group__stream__srv.html#gacb5d68c2a6a9663f99266c70747bce04":[1,2,14], "group__stream__srv.html#gacece90116484e34540def69b05c66f57":[1,2,22], "group__stream__srv.html#gad0d7b7e236826c52f10a7b4f50009d01":[1,2,42], "group__stream__srv.html#gad325d97b09c724e830c98d76b890520d":[1,2,11], "group__stream__srv.html#gad34dc0f7ebf7c84653514566e431a1d2":[1,2,8], "group__stream__srv.html#gad88e9249699c53894cb34c099b5e0c4b":[1,2,34], "group__stream__srv.html#gadef998825a4739660b198151fcee4201":[1,2,28], "group__stream__srv.html#gae2a0ef01097d964c71e38600b4c078d5":[1,2,4], "group__stream__srv.html#gae2ef09bc8da55db30d967563dfc6561a":[1,2,15], "group__stream__srv.html#gaed83d9686289eee534d77a61b96fbd90":[1,2,38], "index.html":[], "ipa_8h_source.html":[3,0,0,0,0,2], "ipa__unit_8h_source.html":[3,0,0,0,0,3], "jibuf_8c.html":[3,0,1,1], "jibuf_8h.html":[1,1,0], "modules.html":[1], "osmux_8c.html":[1,4,1], "osmux_8h.html":[1,4,0], "osmux__input_8c.html":[1,4,2], "osmux__output_8c.html":[1,4,3], "pages.html":[], "prim_8h_source.html":[3,0,0,0,0,6], "rs232_8h_source.html":[3,0,0,0,0,7], "rtp_8h_source.html":[3,0,0,0,0,8], "sctp_8h_source.html":[3,0,0,0,0,9], "stream_8h.html":[3,0,0,0,0,10], "stream_8h.html#a123b7866ed4985a81246bfede79a8ea9":[3,0,0,0,0,10,2], "stream_8h.html#a2693c0cc5c6222dd9ed42c8c4bf8aec8":[3,0,0,0,0,10,0], "stream_8h.html#ac2c359892ad63309b59a4b402f6a3e81":[3,0,0,0,0,10,1], "stream_8h_source.html":[3,0,0,0,0,10], "stream__cli_8c.html":[3,0,1,5], "stream__private_8h_source.html":[3,0,0,0,0,11], "stream__srv_8c.html":[3,0,1,6], "structamr__hdr.html":[2,0,0], "structamr__hdr__bwe.html":[2,0,1], "structipa__head.html":[2,0,2], "structipa__head__ext.html":[2,0,3], "structosmo__ipa__msgb__cb.html":[2,0,4], "structosmo__jibuf.html":[1,1,1], "structosmux__hdr.html":[1,4,4], "structosmux__in__handle.html":[1,4,5], "structosmux__in__handle.html#a1ba076a41ef9c3413665b7444c6521cc":[1,4,5,0], "structosmux__out__handle.html":[1,4,6], "structrtcp__hdr.html":[2,0,9], "structrtp__hdr.html":[2,0,10], "structrtp__x__hdr.html":[2,0,11] }; html/group__osmux.html0000644000175000017500000013754614752517766014462 0ustar buildbuild libosmo-netif: Osmocom Multiplex Protocol
libosmo-netif 1.5.1.34-ada6
Osmocom network interface library
Osmocom Multiplex Protocol

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. More...

Files

file  osmux.h
 Osmocom multiplex protocol 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)
 

Data Structures

struct  osmux_hdr
 Osmux protocol header. More...
 
struct  osmux_in_handle
 one to handle all existing RTP flows More...
 
struct  osmux_out_handle
 one per OSmux circuit_id, ie. More...
 

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
 

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))
 
int osmux_snprintf (char *buf, size_t size, struct msgb *msg)
 Print osmux header fields and payload from msg into buffer buf. More...
 
struct osmux_in_handleosmux_xfrm_input_alloc (void *ctx)
 Allocate a new osmux in handle (osmux source, tx side) More...
 
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)
 osmux_xfrm_input - add RTP message to OSmux batch More...
 
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

struct osmux_in_handle __attribute__
 

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

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_input_alloc()

struct osmux_in_handle * osmux_xfrm_input_alloc ( void *  ctx)

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.

◆ osmux_xfrm_input_fini()

void osmux_xfrm_input_fini ( struct osmux_in_handle h)
Deprecated:
: Use talloc_free() instead (will call osmux_xfrm_input_talloc_destructor())

◆ osmux_xfrm_input_init()

void osmux_xfrm_input_init ( struct osmux_in_handle h)

◆ 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_init()

void osmux_xfrm_output_init ( struct osmux_out_handle h,
uint32_t  rtp_ssrc 
)
Deprecated:
: Use osmux_xfrm_output_alloc() and osmux_xfrm_output_set_rtp_*() instead

◆ osmux_xfrm_output_init2()

void osmux_xfrm_output_init2 ( struct osmux_out_handle h,
uint32_t  rtp_ssrc,
uint8_t  rtp_payload_type 
)
Deprecated:
: Use osmux_xfrm_output_alloc() and osmux_xfrm_output_set_rtp_*() instead

◆ 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.

html/jibuf_8c.js0000644000175000017500000000142114752517766013053 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.html0000644000175000017500000004223014752517766015040 0ustar buildbuild libosmo-netif: src/osmux_input.c File Reference
libosmo-netif 1.5.1.34-ada6
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>

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

void osmux_xfrm_input_deliver (struct osmux_in_handle *h)
 
int osmux_xfrm_input (struct osmux_in_handle *h, struct msgb *msg, int ccid)
 osmux_xfrm_input - add RTP message to OSmux batch More...
 
struct osmux_in_handleosmux_xfrm_input_alloc (void *ctx)
 Allocate a new osmux in handle (osmux source, tx side) More...
 
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")
 

Detailed Description

Osmocom multiplex protocol helpers (input)

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)
html/globals_func.html0000644000175000017500000005466014752517766014365 0ustar buildbuild libosmo-netif: Globals
libosmo-netif 1.5.1.34-ada6
Osmocom network interface library
 

- o -

html/datagram_8h_source.html0000644000175000017500000007252214752517766015463 0ustar buildbuild libosmo-netif: include/osmocom/netif/datagram.h Source File
libosmo-netif 1.5.1.34-ada6
Osmocom network interface library
datagram.h
Go to the documentation of this file.
1#ifndef _OSMO_DGRAM_H_
2#define _OSMO_DGRAM_H_
3
17struct osmo_dgram_tx;
18
19struct osmo_dgram_tx *osmo_dgram_tx_create(void *ctx);
20void osmo_dgram_tx_destroy(struct osmo_dgram_tx *conn);
21
22void osmo_dgram_tx_set_addr(struct osmo_dgram_tx *conn, const char *addr);
23void osmo_dgram_tx_set_port(struct osmo_dgram_tx *conn, uint16_t port);
24void osmo_dgram_tx_set_local_addr(struct osmo_dgram_tx *conn, const char *addr);
25void osmo_dgram_tx_set_local_port(struct osmo_dgram_tx *conn, uint16_t port);
26void osmo_dgram_tx_set_data(struct osmo_dgram_tx *conn, void *data);
27
28int osmo_dgram_tx_open(struct osmo_dgram_tx *conn);
29void osmo_dgram_tx_close(struct osmo_dgram_tx *conn);
30
31void osmo_dgram_tx_send(struct osmo_dgram_tx *conn, struct msgb *msg);
32
33struct osmo_dgram_rx;
34
35struct osmo_dgram_rx *osmo_dgram_rx_create(void *ctx);
36
37void osmo_dgram_rx_set_addr(struct osmo_dgram_rx *conn, const char *addr);
38void osmo_dgram_rx_set_port(struct osmo_dgram_rx *conn, uint16_t port);
39void osmo_dgram_rx_set_read_cb(struct osmo_dgram_rx *conn, int (*read_cb)(struct osmo_dgram_rx *conn));
40void osmo_dgram_rx_destroy(struct osmo_dgram_rx *conn);
41
42int osmo_dgram_rx_open(struct osmo_dgram_rx *conn);
43void osmo_dgram_rx_close(struct osmo_dgram_rx *conn);
44
45int osmo_dgram_rx_recv(struct osmo_dgram_rx *conn, struct msgb *msg);
46
47struct osmo_dgram;
48
49struct osmo_dgram *osmo_dgram_create(void *ctx);
50void osmo_dgram_destroy(struct osmo_dgram *conn);
51
52int osmo_dgram_open(struct osmo_dgram *conn);
53void osmo_dgram_close(struct osmo_dgram *conn);
54
55void osmo_dgram_set_local_addr(struct osmo_dgram *conn, const char *addr);
56void osmo_dgram_set_remote_addr(struct osmo_dgram *conn, const char *addr);
57void osmo_dgram_set_local_port(struct osmo_dgram *conn, uint16_t port);
58void osmo_dgram_set_remote_port(struct osmo_dgram *conn, uint16_t port);
59void osmo_dgram_set_read_cb(struct osmo_dgram *conn, int (*read_cb)(struct osmo_dgram *conn));
60void osmo_dgram_set_data(struct osmo_dgram *conn, void *data);
61void *osmo_dgram_get_data(struct osmo_dgram *conn);
62
63void osmo_dgram_send(struct osmo_dgram *conn, struct msgb *msg);
64int osmo_dgram_recv(struct osmo_dgram *conn, struct msgb *msg);
65
66#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:376
void osmo_dgram_destroy(struct osmo_dgram *conn)
Destroy a Osmocom datagram transceiver.
Definition: datagram.c:440
void osmo_dgram_tx_set_data(struct osmo_dgram_tx *conn, void *data)
Set application private data of the datagram transmitter.
Definition: datagram.c:188
void osmo_dgram_tx_close(struct osmo_dgram_tx *conn)
Close an Osmocom Datagram Transmitter.
Definition: datagram.c:77
int osmo_dgram_rx_recv(struct osmo_dgram_rx *conn, struct msgb *msg)
Receive data via Osmocom datagram receiver.
Definition: datagram.c:256
void osmo_dgram_set_remote_port(struct osmo_dgram *conn, uint16_t port)
Set the remote port to which we transmit.
Definition: datagram.c:477
void * osmo_dgram_get_data(struct osmo_dgram *conn)
Get application private data of the datagram transceiver.
Definition: datagram.c:502
void osmo_dgram_close(struct osmo_dgram *conn)
Close an Osmocom Datagram Transceiver.
Definition: datagram.c:530
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:157
struct osmo_dgram * osmo_dgram_create(void *ctx)
Create an Osmocom datagram transceiver (bidirectional)
Definition: datagram.c:414
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:331
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:459
void osmo_dgram_send(struct osmo_dgram *conn, struct msgb *msg)
Enqueue data to be sent via an Osmocom datagram transceiver.
Definition: datagram.c:539
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:485
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:168
void osmo_dgram_rx_destroy(struct osmo_dgram_rx *conn)
Destroy the datagram receiver.
Definition: datagram.c:339
int osmo_dgram_tx_open(struct osmo_dgram_tx *conn)
Open connection of an Osmocom datagram transmitter.
Definition: datagram.c:204
void osmo_dgram_set_local_port(struct osmo_dgram *conn, uint16_t port)
Set the local port to which we bind.
Definition: datagram.c:468
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:146
void osmo_dgram_set_data(struct osmo_dgram *conn, void *data)
Set application private data of the datagram transmitter.
Definition: datagram.c:494
void osmo_dgram_tx_destroy(struct osmo_dgram_tx *conn)
Destroy a Osmocom datagram transmitter.
Definition: datagram.c:195
int osmo_dgram_recv(struct osmo_dgram *conn, struct msgb *msg)
Receive data via Osmocom datagram transceiver.
Definition: datagram.c:548
int osmo_dgram_open(struct osmo_dgram *conn)
Open the datagram transceiver.
Definition: datagram.c:510
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:311
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:232
struct osmo_dgram_rx * osmo_dgram_rx_create(void *ctx)
Create an Osmocom datagram receiver.
Definition: datagram.c:295
struct osmo_dgram_tx * osmo_dgram_tx_create(void *ctx)
Create an Osmocom datagram transmitter.
Definition: datagram.c:127
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:178
void osmo_dgram_set_local_addr(struct osmo_dgram *conn, const char *addr)
Set the local address to which we bind.
Definition: datagram.c:450
int osmo_dgram_rx_open(struct osmo_dgram_rx *conn)
Open the datagram receiver.
Definition: datagram.c:348
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:321
html/resize.js0000644000175000017500000001261614752517766012673 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/dir_68267d1309a1af8e8297ef4c3efbcdba.js0000644000175000017500000000072414752517766017036 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_cli.c", "stream__cli_8c.html", "stream__cli_8c" ], [ "stream_srv.c", "stream__srv_8c.html", "stream__srv_8c" ] ];html/stream_8h.html0000644000175000017500000022207114752517766013612 0ustar buildbuild libosmo-netif: include/osmocom/netif/stream.h File Reference
libosmo-netif 1.5.1.34-ada6
Osmocom network interface library
stream.h File Reference
#include <stdbool.h>
#include <stdint.h>
#include <unistd.h>
#include <osmocom/core/msgb.h>

Go to the source code of this file.

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.
 

Typedefs

typedef int(* osmo_stream_srv_link_accept_cb_t) (struct osmo_stream_srv_link *link, int fd)
 
typedef int(* osmo_stream_srv_read_cb_t) (struct osmo_stream_srv *conn)
 
typedef int(* osmo_stream_srv_closed_cb_t) (struct osmo_stream_srv *conn)
 
typedef int(* osmo_stream_srv_read_cb2_t) (struct osmo_stream_srv *conn, int res, struct msgb *msg)
 Completion call-back function when something was read from from the stream client socket. More...
 
typedef int(* osmo_stream_srv_segmentation_cb_t) (struct msgb *msg)
 
typedef int(* osmo_stream_srv_segmentation_cb2_t) (struct osmo_stream_srv *conn, struct msgb *msg)
 
typedef int(* osmo_stream_cli_connect_cb_t) (struct osmo_stream_cli *cli)
 
typedef int(* osmo_stream_cli_disconnect_cb_t) (struct osmo_stream_cli *cli)
 
typedef int(* osmo_stream_cli_read_cb_t) (struct osmo_stream_cli *cli)
 
typedef int(* osmo_stream_cli_read_cb2_t) (struct osmo_stream_cli *cli, int res, struct msgb *msg)
 Completion call-back function when something was read from from the stream client socket. More...
 
typedef int(* osmo_stream_cli_segmentation_cb_t) (struct msgb *msg)
 
typedef int(* osmo_stream_cli_segmentation_cb2_t) (struct osmo_stream_cli *cli, struct msgb *msg)
 

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
}
 

Functions

struct osmo_stream_srv_link * osmo_stream_srv_link_create (void *ctx)
 Create an Osmocom Stream Server Link. More...
 
void osmo_stream_srv_link_destroy (struct osmo_stream_srv_link *link)
 Destroy the stream server link. 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...
 
const char * osmo_stream_srv_link_get_name (const struct osmo_stream_srv_link *link)
 Retrieve name previously set on the srv_link object (see osmo_stream_srv_link_set_name()). 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. More...
 
int osmo_stream_srv_link_set_priority (struct osmo_stream_srv_link *link, int sk_prio)
 Set the priority value of the stream socket. More...
 
int osmo_stream_srv_link_set_ip_dscp (struct osmo_stream_srv_link *link, uint8_t ip_dscp)
 Set the DSCP (differentiated services code point) of the stream socket. 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. 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)
 Retrieve application private data of the stream server link. More...
 
int osmo_stream_srv_link_set_tx_queue_max_length (struct osmo_stream_srv_link *link, unsigned int size)
 Set the maximum length queue of the stream servers accepted and allocated from this server link. More...
 
char * osmo_stream_srv_link_get_sockname (const struct osmo_stream_srv_link *link)
 Retrieve description of the stream server link e. More...
 
struct osmo_fd * osmo_stream_srv_link_get_ofd (struct osmo_stream_srv_link *link)
 Retrieve Osmocom File Descriptor of the stream server link. More...
 
int osmo_stream_srv_link_get_fd (const struct osmo_stream_srv_link *link)
 Retrieve File Descriptor of the stream server link. More...
 
int osmo_stream_srv_link_set_msgb_alloc_info (struct osmo_stream_srv_link *link, unsigned int size, unsigned int headroom)
 Set the msgb allocation parameters on child osmo_stream_srv objects. 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. More...
 
void osmo_stream_srv_link_close (struct osmo_stream_srv_link *link)
 Close the stream server link and unregister from select loop. 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)
 Set given parameter of stream_srv_link to given value. More...
 
struct osmo_stream_srv * osmo_stream_srv_create (void *ctx, struct osmo_stream_srv_link *link, int fd, osmo_stream_srv_read_cb_t read_cb, osmo_stream_srv_closed_cb_t closed_cb, void *data)
 Create a legacy osmo_fd mode Stream Server inside the specified link. More...
 
struct osmo_stream_srv * osmo_stream_srv_create2 (void *ctx, struct osmo_stream_srv_link *link, int fd, void *data)
 Create an osmo_iofd mode 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...
 
const char * osmo_stream_srv_get_name (const struct osmo_stream_srv *conn)
 Retrieve name previously set on the srv object (see osmo_stream_srv_set_name()). More...
 
void osmo_stream_srv_set_read_cb (struct osmo_stream_srv *conn, osmo_stream_srv_read_cb2_t read_cb)
 Set the call-back function for incoming data on an osmo_io stream_srv. More...
 
void osmo_stream_srv_set_closed_cb (struct osmo_stream_srv *conn, osmo_stream_srv_closed_cb_t closed_cb)
 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)
 Retrieve application private data of the stream server. More...
 
struct osmo_stream_srv_link * osmo_stream_srv_get_master (struct osmo_stream_srv *conn)
 Retrieve the master (Link) from a Stream Server. More...
 
const char * osmo_stream_srv_get_sockname (const struct osmo_stream_srv *conn)
 Retrieve the stream server socket description. More...
 
struct osmo_fd * osmo_stream_srv_get_ofd (struct osmo_stream_srv *conn)
 Retrieve Osmocom File Descriptor of a stream server in osmo_fd mode. More...
 
int osmo_stream_srv_get_fd (const struct osmo_stream_srv *conn)
 Retrieve File Descriptor of the stream server. More...
 
struct osmo_io_fd * osmo_stream_srv_get_iofd (const struct osmo_stream_srv *srv)
 Retrieve osmo_io descriptor of the stream server socket. More...
 
void osmo_stream_srv_destroy (struct osmo_stream_srv *conn)
 Destroy given Stream Server. 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. 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, osmo_stream_srv_segmentation_cb_t segmentation_cb)
 Set the segmentation callback for target osmo_stream_srv structure. More...
 
void osmo_stream_srv_set_segmentation_cb2 (struct osmo_stream_srv *conn, osmo_stream_srv_segmentation_cb2_t segmentation_cb2)
 Set the segmentation callback for target osmo_stream_srv structure. 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 an Osmocom stream server in osmo_fd mode. 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...
 
const char * osmo_stream_cli_get_name (const struct osmo_stream_cli *cli)
 Retrieve name previously set on the cli object (see osmo_stream_cli_set_name()). More...
 
void osmo_stream_cli_set_nodelay (struct osmo_stream_cli *cli, bool nodelay)
 Set the NODELAY socket option to avoid Nagle-like behavior. More...
 
int osmo_stream_cli_set_priority (struct osmo_stream_cli *cli, int sk_prio)
 Set the priority value of the stream socket. More...
 
int osmo_stream_cli_set_ip_dscp (struct osmo_stream_cli *cli, uint8_t ip_dscp)
 Set the DSCP (differentiated services code point) of the stream 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. 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 bind. 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)
 Retrieve application private data of the stream client socket. More...
 
int osmo_stream_cli_set_tx_queue_max_length (struct osmo_stream_cli *cli, unsigned int size)
 Set the maximum length queue of the stream client. More...
 
char * osmo_stream_cli_get_sockname (const struct osmo_stream_cli *cli)
 Retrieve the stream client socket description. More...
 
struct osmo_fd * osmo_stream_cli_get_ofd (struct osmo_stream_cli *cli)
 Retrieve Osmocom File Descriptor of the stream client socket. More...
 
int osmo_stream_cli_get_fd (const struct osmo_stream_cli *cli)
 Retrieve file descriptor of the stream client socket. More...
 
struct osmo_io_fd * osmo_stream_cli_get_iofd (const struct osmo_stream_cli *cli)
 Retrieve osmo_io descriptor of the stream client socket. More...
 
void osmo_stream_cli_set_connect_cb (struct osmo_stream_cli *cli, osmo_stream_cli_connect_cb_t connect_cb)
 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, osmo_stream_cli_disconnect_cb_t disconnect_cb)
 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, osmo_stream_cli_read_cb_t read_cb)
 Set the call-back function called to read from the stream client socket. More...
 
void osmo_stream_cli_set_read_cb2 (struct osmo_stream_cli *cli, osmo_stream_cli_read_cb2_t read_cb)
 Set the call-back function called to read from the stream client socket. More...
 
void osmo_stream_cli_set_segmentation_cb (struct osmo_stream_cli *cli, osmo_stream_cli_segmentation_cb_t segmentation_cb)
 Set the segmentation callback for the client. More...
 
void osmo_stream_cli_set_segmentation_cb2 (struct osmo_stream_cli *cli, osmo_stream_cli_segmentation_cb2_t segmentation_cb2)
 Set the segmentation callback for the client. More...
 
void osmo_stream_cli_reconnect (struct osmo_stream_cli *cli)
 Re-connect an Osmocom Stream Client. More...
 
bool osmo_stream_cli_is_connected (struct osmo_stream_cli *cli)
 Check if Osmocom Stream Client is in connected state. More...
 
struct osmo_stream_cli * osmo_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. 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 in osmo_fd mode. More...
 
void osmo_stream_cli_clear_tx_queue (struct osmo_stream_cli *cli)
 Clear the transmit queue of the stream client. More...
 
int osmo_stream_cli_set_param (struct osmo_stream_cli *cli, enum osmo_stream_cli_param par, void *val, size_t val_len)
 Set given parameter of stream client to given value. More...
 
html/jibuf_8c.html0000644000175000017500000003774514752517766013425 0ustar buildbuild libosmo-netif: src/jibuf.c File Reference
libosmo-netif 1.5.1.34-ada6
Osmocom network interface library
jibuf.c File Reference

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>

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

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.html0000644000175000017500000000746614752517766014774 0ustar buildbuild libosmo-netif: Data Fields - Variables
libosmo-netif 1.5.1.34-ada6
Osmocom network interface library
 
html/menu.js0000644000175000017500000001335214752517766012334 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/tab_b.png0000644000175000017500000000025114752517766012601 0ustar buildbuildPNG  IHDR$[pIDATxM EǻԸu`V0}:t]Ds䮂u|x>1&m8SxLU޲iEOsnxKN~jIENDB`html/osmux_8c.html0000644000175000017500000002010214752517766013454 0ustar buildbuild libosmo-netif: src/osmux.c File Reference
    libosmo-netif 1.5.1.34-ada6
    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

    int osmux_snprintf (char *buf, size_t size, struct msgb *msg)
     Print osmux header fields and payload from msg into buffer buf. More...
     

    Detailed Description

    Osmocom multiplex protocol helpers.

    Macro Definition Documentation

    ◆ 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;
    html/stream__cli_8c.html0000644000175000017500000011437714752517766014604 0ustar buildbuild libosmo-netif: src/stream_cli.c File Reference
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
    stream_cli.c File Reference
    #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>

    Macros

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

    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. More...
     
    bool osmo_stream_cli_is_connected (struct osmo_stream_cli *cli)
     Check if Osmocom Stream Client is in connected state. More...
     
    int osmo_stream_cli_get_fd (const struct osmo_stream_cli *cli)
     Retrieve file descriptor of the stream client socket. More...
     
    struct osmo_io_fd * osmo_stream_cli_get_iofd (const struct osmo_stream_cli *cli)
     Retrieve osmo_io descriptor of the stream client socket. More...
     
    struct osmo_stream_cli * osmo_stream_cli_create (void *ctx)
     Create an Osmocom stream client. More...
     
    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...
     
    const char * osmo_stream_cli_get_name (const struct osmo_stream_cli *cli)
     Retrieve name previously set on the cli object (see osmo_stream_cli_set_name()). 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. 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 bind. 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_segmentation_cb (struct osmo_stream_cli *cli, osmo_stream_cli_segmentation_cb_t segmentation_cb)
     Set the segmentation callback for the client. More...
     
    void osmo_stream_cli_set_segmentation_cb2 (struct osmo_stream_cli *cli, osmo_stream_cli_segmentation_cb2_t segmentation_cb2)
     Set the segmentation callback for the client. 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)
     Retrieve application private data of the stream client socket. More...
     
    int osmo_stream_cli_set_tx_queue_max_length (struct osmo_stream_cli *cli, unsigned int size)
     Set the maximum length queue of the stream client. More...
     
    char * osmo_stream_cli_get_sockname (const struct osmo_stream_cli *cli)
     Retrieve the stream client socket description. More...
     
    struct osmo_fd * osmo_stream_cli_get_ofd (struct osmo_stream_cli *cli)
     Retrieve Osmocom File Descriptor of the stream client socket. More...
     
    void osmo_stream_cli_set_connect_cb (struct osmo_stream_cli *cli, osmo_stream_cli_connect_cb_t connect_cb)
     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, osmo_stream_cli_disconnect_cb_t disconnect_cb)
     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, osmo_stream_cli_read_cb_t read_cb)
     Set the call-back function called to read from the stream client socket. More...
     
    void osmo_stream_cli_set_read_cb2 (struct osmo_stream_cli *cli, osmo_stream_cli_read_cb2_t read_cb)
     Set the call-back function called to read from the stream client socket. 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. More...
     
    int osmo_stream_cli_set_priority (struct osmo_stream_cli *cli, int sk_prio)
     Set the priority value of the stream socket. More...
     
    int osmo_stream_cli_set_ip_dscp (struct osmo_stream_cli *cli, uint8_t ip_dscp)
     Set the DSCP (differentiated services code point) of the stream socket. More...
     
    int osmo_stream_cli_open (struct osmo_stream_cli *cli)
     Open connection of 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 in osmo_fd mode. More...
     
    void osmo_stream_cli_clear_tx_queue (struct osmo_stream_cli *cli)
     Clear the transmit queue of the stream client. More...
     
    int osmo_stream_cli_set_param (struct osmo_stream_cli *cli, enum osmo_stream_cli_param par, void *val, size_t val_len)
     Set given parameter of stream client to given value. More...
     

    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)
    html/datagram_8h.js0000644000175000017500000000575114752517766013553 0ustar buildbuildvar datagram_8h = [ [ "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/splitbar.png0000644000175000017500000000047214752517766013357 0ustar buildbuildPNG  IHDRMIDATxݡJCa( %4 bȘͶ3v^EL ,b;{Ï/aYկq:\IIIIIIIIIIIIIIIIII-l揊_t/ϻYQVYivk_ۣI@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$C[V=[fIENDB`html/group__jibuf.js0000644000175000017500000000156514752517766014045 0ustar buildbuildvar group__jibuf = [ [ "jibuf.h", "jibuf_8h.html", null ], [ "osmo_jibuf", "structosmo__jibuf.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/amr_8h_source.html0000644000175000017500000010442014752517766014453 0ustar buildbuild libosmo-netif: include/osmocom/netif/amr.h Source File
    libosmo-netif 1.5.1.34-ada6
    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.js0000644000175000017500000000062414752517766013036 0ustar buildbuildvar modules = [ [ "Osmocom Datagram Socket", "group__datagram.html", "group__datagram" ], [ "Osmocom Jitter Buffer", "group__jibuf.html", "group__jibuf" ], [ "Osmocom Stream Server", "group__stream__srv.html", "group__stream__srv" ], [ "Osmocom Stream Client", "group__stream__cli.html", "group__stream__cli" ], [ "Osmocom Multiplex Protocol", "group__osmux.html", "group__osmux" ] ];html/dir_abe9b486a10ccc5afdf8abc29637e0c1.html0000644000175000017500000001072014752517766017501 0ustar buildbuild libosmo-netif: include/osmocom Directory Reference
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
    osmocom Directory Reference

    Directories

    directory  netif
     
    html/structrtp__hdr.html0000644000175000017500000001342514752517766014767 0ustar buildbuild libosmo-netif: rtp_hdr Struct Reference
    libosmo-netif 1.5.1.34-ada6
    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.js0000644000175000017500000001012214752517766014233 0ustar buildbuildvar stream__cli_8c = [ [ "osmo_stream_cli_clear_tx_queue", "group__stream__cli.html#gafa39b1dcc139ad12cbc38d51049bf14f", null ], [ "osmo_stream_cli_close", "group__stream__cli.html#gad217c1c1b83ac852e090afd49146db19", null ], [ "osmo_stream_cli_create", "group__stream__cli.html#ga1754a498abc27577a8e0b3b0f236c05b", null ], [ "osmo_stream_cli_destroy", "group__stream__cli.html#ga9d0dac2f390c660c85fa347765f4f45a", null ], [ "osmo_stream_cli_get_data", "group__stream__cli.html#ga606a53840677f3f5200887dc92f5de4d", null ], [ "osmo_stream_cli_get_fd", "group__stream__cli.html#gaffc6ac3b28d87c910294a2f522a1eaab", null ], [ "osmo_stream_cli_get_iofd", "group__stream__cli.html#gac32d0489dd05ab89fb0c54dfd360d5b3", null ], [ "osmo_stream_cli_get_name", "group__stream__cli.html#ga0967921ed380123e3f54fd35375741bf", null ], [ "osmo_stream_cli_get_ofd", "group__stream__cli.html#ga0615daa4aac253a3d530f35fddbc68bd", null ], [ "osmo_stream_cli_get_sockname", "group__stream__cli.html#gaecd148ae11f2f619aa52dd2900a15827", null ], [ "osmo_stream_cli_is_connected", "group__stream__cli.html#ga79a09e9c9b8cc98991cd5eebdb41ed57", null ], [ "osmo_stream_cli_open", "group__stream__cli.html#ga86b4b9c8e563f8426d3cdae803e3ec38", null ], [ "osmo_stream_cli_open2", "group__stream__cli.html#ga127866794591d16a0eb7244f2fe666ef", null ], [ "osmo_stream_cli_reconnect", "group__stream__cli.html#ga11d2615f6197f33073ba7245e5ba95ee", null ], [ "osmo_stream_cli_recv", "group__stream__cli.html#ga06f9743c19068bb720a4949ae8467243", null ], [ "osmo_stream_cli_send", "group__stream__cli.html#gaacf415b97e1184baadeee5c60387422b", null ], [ "osmo_stream_cli_set_addr", "group__stream__cli.html#ga0038e937cf0f36c59e0e3991523219a1", null ], [ "osmo_stream_cli_set_addrs", "group__stream__cli.html#gaab1e7ef0ccc88e124c5f7bbb5e46c29c", null ], [ "osmo_stream_cli_set_connect_cb", "group__stream__cli.html#ga6a7d4b7df43a3f0487d343fe3cd0c6a7", null ], [ "osmo_stream_cli_set_data", "group__stream__cli.html#ga5e94c511d537f63337912bb50fb2dc28", null ], [ "osmo_stream_cli_set_disconnect_cb", "group__stream__cli.html#ga6640b82a47028434455471bb52d9f577", null ], [ "osmo_stream_cli_set_domain", "group__stream__cli.html#ga33ce730fc91ebade9b7188fa220656c6", null ], [ "osmo_stream_cli_set_ip_dscp", "group__stream__cli.html#ga18526a340625c84a69ccc067ce2cda58", null ], [ "osmo_stream_cli_set_local_addr", "group__stream__cli.html#ga70420e7c664cc4c4e69ac4d3476e7f53", null ], [ "osmo_stream_cli_set_local_addrs", "group__stream__cli.html#ga090fc3fcd1706b815ef5a729921c100e", null ], [ "osmo_stream_cli_set_local_port", "group__stream__cli.html#ga4d83e3cf7fdf7eb354c2015ff9bed98a", null ], [ "osmo_stream_cli_set_name", "group__stream__cli.html#gaeb712dc553735736047f9b11d9583baa", null ], [ "osmo_stream_cli_set_nodelay", "group__stream__cli.html#gaa196e78db6ca32abb1473566b4f1b04b", null ], [ "osmo_stream_cli_set_param", "group__stream__cli.html#ga0638e98001fa4bdd36533718472dfac7", null ], [ "osmo_stream_cli_set_port", "group__stream__cli.html#gab8b9f65bebfeb83c6e33d102e9439770", null ], [ "osmo_stream_cli_set_priority", "group__stream__cli.html#gac3ec56e61ce062300ad1df73a5f2c7f8", null ], [ "osmo_stream_cli_set_proto", "group__stream__cli.html#ga91d57aa94a370520540d7272af66a23b", null ], [ "osmo_stream_cli_set_read_cb", "group__stream__cli.html#ga798f23db7e2e1d999775589db8a73d03", null ], [ "osmo_stream_cli_set_read_cb2", "group__stream__cli.html#ga7892eb77d40f08a254f654786d0b996b", null ], [ "osmo_stream_cli_set_reconnect_timeout", "group__stream__cli.html#gade74792afe35f31dd2584c888db3dd62", null ], [ "osmo_stream_cli_set_segmentation_cb", "group__stream__cli.html#gab6094559935824750d82b9164ed76910", null ], [ "osmo_stream_cli_set_segmentation_cb2", "group__stream__cli.html#gaf62f1dbe4570d8ffd00b3bdc3f28d24b", null ], [ "osmo_stream_cli_set_tx_queue_max_length", "group__stream__cli.html#ga889f96540a1a2271a40dee063eaf5e9d", null ], [ "osmo_stream_cli_set_type", "group__stream__cli.html#ga5e5c4c9aacc1cd1d303c0295018594cb", null ] ];html/doc.png0000644000175000017500000000135214752517766012302 0ustar buildbuildPNG  IHDR}\IDATxMOS[sa?-XZ(PD4 AWbu`b 77wHFCԁ/`voAPqP@ 980 +y^Z9SW\83g3'Nçl_bpV"ֆXd]3xM[1W *PGz/Eg{ aoV:这1$RW,@56-,m/蹖 r5T*S(Vf89u գwa=<{ҡUr+dDF$`zNܮ0Q3~_^N=vpTLT}kqm<?ZhX_ݥ[) `ga_*2`'=F2EP l=8Wv%THqɿ<"GxH{#֫aJmKsVءM^ T ݛr߽m_?Wİ#uIENDB`html/datagram_8c.js0000644000175000017500000000575114752517766013546 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.html0000644000175000017500000003415114752517766015646 0ustar buildbuild libosmo-netif: include/osmocom/netif/ipa_unit.h Source File
    libosmo-netif 1.5.1.34-ada6
    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_ */
    html/tab_s.png0000644000175000017500000000027014752517766012623 0ustar buildbuildPNG  IHDR$[IDATx݁ @@ѣ?Q"%If6[HQ<]dr s?O=w'F -~rÍ[芭m֬ݯнF)Y% `n,9B!ь\<#IENDB`html/globals_type.html0000644000175000017500000000766714752517766014420 0ustar buildbuild libosmo-netif: Globals
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
     
    • osmo_stream_cli_read_cb2_t : stream.h
    • osmo_stream_srv_read_cb2_t : stream.h
    html/stream__srv_8c.html0000644000175000017500000012502214752517766014634 0ustar buildbuild libosmo-netif: src/stream_srv.c File Reference
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
    stream_srv.c File Reference
    #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/un.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>

    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

    struct osmo_stream_srv_link * osmo_stream_srv_link_create (void *ctx)
     Create an Osmocom Stream Server Link. 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...
     
    const char * osmo_stream_srv_link_get_name (const struct osmo_stream_srv_link *link)
     Retrieve name previously set on the srv_link object (see osmo_stream_srv_link_set_name()). 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. More...
     
    int osmo_stream_srv_link_set_priority (struct osmo_stream_srv_link *link, int sk_prio)
     Set the priority value of the stream socket. More...
     
    int osmo_stream_srv_link_set_ip_dscp (struct osmo_stream_srv_link *link, uint8_t ip_dscp)
     Set the DSCP (differentiated services code point) of the stream socket. 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. 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)
     Retrieve application private data of the stream server link. More...
     
    int osmo_stream_srv_link_set_tx_queue_max_length (struct osmo_stream_srv_link *link, unsigned int size)
     Set the maximum length queue of the stream servers accepted and allocated from this server link. More...
     
    char * osmo_stream_srv_link_get_sockname (const struct osmo_stream_srv_link *link)
     Retrieve description of the stream server link e. More...
     
    struct osmo_fd * osmo_stream_srv_link_get_ofd (struct osmo_stream_srv_link *link)
     Retrieve Osmocom File Descriptor of the stream server link. More...
     
    int osmo_stream_srv_link_get_fd (const struct osmo_stream_srv_link *link)
     Retrieve 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...
     
    int osmo_stream_srv_link_set_msgb_alloc_info (struct osmo_stream_srv_link *link, unsigned int size, unsigned int headroom)
     Set the msgb allocation parameters on child osmo_stream_srv objects. More...
     
    void osmo_stream_srv_link_destroy (struct osmo_stream_srv_link *link)
     Destroy the stream server link. More...
     
    int osmo_stream_srv_link_open (struct osmo_stream_srv_link *link)
     Open 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...
     
    void osmo_stream_srv_link_close (struct osmo_stream_srv_link *link)
     Close the stream server link and unregister from select loop. 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)
     Set given parameter of stream_srv_link to given value. More...
     
    struct osmo_stream_srv * osmo_stream_srv_create (void *ctx, struct osmo_stream_srv_link *link, int fd, osmo_stream_srv_read_cb_t read_cb, osmo_stream_srv_closed_cb_t closed_cb, void *data)
     Create a legacy osmo_fd mode Stream Server inside the specified link. More...
     
    struct osmo_stream_srv * osmo_stream_srv_create2 (void *ctx, struct osmo_stream_srv_link *link, int fd, void *data)
     Create an osmo_iofd mode 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...
     
    const char * osmo_stream_srv_get_name (const struct osmo_stream_srv *conn)
     Retrieve name previously set on the srv object (see osmo_stream_srv_set_name()). More...
     
    void osmo_stream_srv_set_read_cb (struct osmo_stream_srv *conn, osmo_stream_srv_read_cb2_t read_cb)
     Set the call-back function for incoming data on an osmo_io stream_srv. More...
     
    void osmo_stream_srv_set_closed_cb (struct osmo_stream_srv *conn, osmo_stream_srv_closed_cb_t closed_cb)
     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. 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, osmo_stream_srv_segmentation_cb_t segmentation_cb)
     Set the segmentation callback for target osmo_stream_srv structure. More...
     
    void osmo_stream_srv_set_segmentation_cb2 (struct osmo_stream_srv *conn, osmo_stream_srv_segmentation_cb2_t segmentation_cb2)
     Set the segmentation callback for target osmo_stream_srv structure. More...
     
    void * osmo_stream_srv_get_data (struct osmo_stream_srv *conn)
     Retrieve application private data of the stream server. More...
     
    const char * osmo_stream_srv_get_sockname (const struct osmo_stream_srv *conn)
     Retrieve the stream server socket description. More...
     
    struct osmo_fd * osmo_stream_srv_get_ofd (struct osmo_stream_srv *conn)
     Retrieve Osmocom File Descriptor of a stream server in osmo_fd mode. More...
     
    int osmo_stream_srv_get_fd (const struct osmo_stream_srv *conn)
     Retrieve File Descriptor of the stream server. More...
     
    struct osmo_io_fd * osmo_stream_srv_get_iofd (const struct osmo_stream_srv *srv)
     Retrieve osmo_io descriptor of the stream server socket. More...
     
    struct osmo_stream_srv_link * osmo_stream_srv_get_master (struct osmo_stream_srv *conn)
     Retrieve the master (Link) from a Stream Server. More...
     
    void osmo_stream_srv_destroy (struct osmo_stream_srv *conn)
     Destroy given Stream Server. 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 an Osmocom stream server in osmo_fd mode. More...
     
    void osmo_stream_srv_clear_tx_queue (struct osmo_stream_srv *conn)
     

    Macro Definition Documentation

    ◆ 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)
    html/doxygen.css0000644000175000017500000010161414752517766013220 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.html0000644000175000017500000005641614752517766013353 0ustar buildbuild libosmo-netif: Globals
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
    Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:

    - m -

    - o -

    • osmo_dgram_close() : datagram.h
    • osmo_dgram_create() : datagram.h
    • osmo_dgram_destroy() : datagram.h
    • osmo_dgram_get_data() : datagram.h
    • osmo_dgram_open() : datagram.h
    • osmo_dgram_recv() : datagram.h
    • osmo_dgram_rx_close() : datagram.h
    • osmo_dgram_rx_create() : datagram.h
    • osmo_dgram_rx_destroy() : datagram.h
    • osmo_dgram_rx_open() : datagram.h
    • osmo_dgram_rx_recv() : datagram.h
    • osmo_dgram_rx_set_addr() : datagram.h
    • osmo_dgram_rx_set_port() : datagram.h
    • osmo_dgram_rx_set_read_cb() : datagram.h
    • osmo_dgram_send() : datagram.h
    • osmo_dgram_set_data() : datagram.h
    • osmo_dgram_set_local_addr() : datagram.h
    • osmo_dgram_set_local_port() : datagram.h
    • osmo_dgram_set_read_cb() : datagram.h
    • osmo_dgram_set_remote_addr() : datagram.h
    • osmo_dgram_set_remote_port() : datagram.h
    • osmo_dgram_tx_close() : datagram.h
    • osmo_dgram_tx_create() : datagram.h
    • osmo_dgram_tx_destroy() : datagram.h
    • osmo_dgram_tx_open() : datagram.h
    • osmo_dgram_tx_send() : datagram.h
    • osmo_dgram_tx_set_addr() : datagram.h
    • osmo_dgram_tx_set_data() : datagram.h
    • osmo_dgram_tx_set_local_addr() : datagram.h
    • osmo_dgram_tx_set_local_port() : datagram.h
    • osmo_dgram_tx_set_port() : datagram.h
    • osmo_jibuf_alloc() : jibuf.h
    • osmo_jibuf_delete() : jibuf.h
    • osmo_jibuf_empty() : jibuf.h
    • osmo_jibuf_enable_skew_compensation() : jibuf.h
    • osmo_jibuf_enqueue() : jibuf.h
    • osmo_jibuf_set_dequeue_cb() : jibuf.h
    • osmo_jibuf_set_max_delay() : jibuf.h
    • osmo_jibuf_set_min_delay() : jibuf.h
    • osmo_stream_cli_clear_tx_queue() : stream.h
    • osmo_stream_cli_close() : stream.h
    • osmo_stream_cli_create() : stream.h
    • osmo_stream_cli_destroy() : stream.h
    • osmo_stream_cli_get_data() : stream.h
    • osmo_stream_cli_get_fd() : stream.h
    • osmo_stream_cli_get_iofd() : stream.h
    • osmo_stream_cli_get_name() : stream.h
    • osmo_stream_cli_get_ofd() : stream.h
    • osmo_stream_cli_get_sockname() : stream.h
    • osmo_stream_cli_is_connected() : stream.h
    • osmo_stream_cli_open() : stream.h
    • osmo_stream_cli_open2() : stream.h
    • osmo_stream_cli_read_cb2_t : stream.h
    • osmo_stream_cli_reconnect() : stream.h
    • osmo_stream_cli_recv() : stream.h
    • osmo_stream_cli_send() : stream.h
    • osmo_stream_cli_set_addr() : stream.h
    • osmo_stream_cli_set_addrs() : stream.h
    • osmo_stream_cli_set_connect_cb() : stream.h
    • osmo_stream_cli_set_data() : stream.h
    • osmo_stream_cli_set_disconnect_cb() : stream.h
    • osmo_stream_cli_set_domain() : stream.h
    • osmo_stream_cli_set_ip_dscp() : stream.h
    • osmo_stream_cli_set_local_addr() : stream.h
    • osmo_stream_cli_set_local_addrs() : stream.h
    • osmo_stream_cli_set_local_port() : stream.h
    • osmo_stream_cli_set_name() : stream.h
    • osmo_stream_cli_set_nodelay() : stream.h
    • osmo_stream_cli_set_param() : stream.h
    • osmo_stream_cli_set_port() : stream.h
    • osmo_stream_cli_set_priority() : stream.h
    • osmo_stream_cli_set_proto() : stream.h
    • osmo_stream_cli_set_read_cb() : stream.h
    • osmo_stream_cli_set_read_cb2() : stream.h
    • osmo_stream_cli_set_reconnect_timeout() : stream.h
    • osmo_stream_cli_set_segmentation_cb() : stream.h
    • osmo_stream_cli_set_segmentation_cb2() : stream.h
    • osmo_stream_cli_set_tx_queue_max_length() : stream.h
    • osmo_stream_cli_set_type() : stream.h
    • OSMO_STREAM_SCTP_MSG_FLAGS_NOTIFICATION : stream.h
    • osmo_stream_srv_create() : stream.h
    • osmo_stream_srv_create2() : stream.h
    • osmo_stream_srv_destroy() : stream.h
    • osmo_stream_srv_get_data() : stream.h
    • osmo_stream_srv_get_fd() : stream.h
    • osmo_stream_srv_get_iofd() : stream.h
    • osmo_stream_srv_get_master() : stream.h
    • osmo_stream_srv_get_name() : stream.h
    • osmo_stream_srv_get_ofd() : stream.h
    • osmo_stream_srv_get_sockname() : stream.h
    • osmo_stream_srv_link_close() : stream.h
    • osmo_stream_srv_link_create() : stream.h
    • osmo_stream_srv_link_destroy() : stream.h
    • osmo_stream_srv_link_get_data() : stream.h
    • osmo_stream_srv_link_get_fd() : stream.h
    • osmo_stream_srv_link_get_name() : stream.h
    • osmo_stream_srv_link_get_ofd() : stream.h
    • osmo_stream_srv_link_get_sockname() : stream.h
    • osmo_stream_srv_link_is_opened() : stream.h
    • osmo_stream_srv_link_open() : stream.h
    • osmo_stream_srv_link_set_accept_cb() : stream.h
    • osmo_stream_srv_link_set_addr() : stream.h
    • osmo_stream_srv_link_set_addrs() : stream.h
    • osmo_stream_srv_link_set_data() : stream.h
    • osmo_stream_srv_link_set_domain() : stream.h
    • osmo_stream_srv_link_set_ip_dscp() : stream.h
    • osmo_stream_srv_link_set_msgb_alloc_info() : stream.h
    • osmo_stream_srv_link_set_name() : stream.h
    • osmo_stream_srv_link_set_nodelay() : stream.h
    • osmo_stream_srv_link_set_param() : stream.h
    • osmo_stream_srv_link_set_port() : stream.h
    • osmo_stream_srv_link_set_priority() : stream.h
    • osmo_stream_srv_link_set_proto() : stream.h
    • osmo_stream_srv_link_set_tx_queue_max_length() : stream.h
    • osmo_stream_srv_link_set_type() : stream.h
    • osmo_stream_srv_read_cb2_t : stream.h
    • osmo_stream_srv_recv() : stream.h
    • osmo_stream_srv_send() : stream.h
    • osmo_stream_srv_set_closed_cb() : stream.h
    • osmo_stream_srv_set_data() : stream.h
    • osmo_stream_srv_set_flush_and_destroy() : stream.h
    • osmo_stream_srv_set_name() : stream.h
    • osmo_stream_srv_set_read_cb() : stream.h
    • osmo_stream_srv_set_segmentation_cb() : stream.h
    • osmo_stream_srv_set_segmentation_cb2() : stream.h
    • osmux_snprintf() : osmux.h
    • osmux_xfrm_input() : osmux.h
    • osmux_xfrm_input_alloc() : osmux.h
    • osmux_xfrm_input_fini() : osmux.h
    • osmux_xfrm_input_init() : osmux.h
    • osmux_xfrm_output_alloc() : osmux.h
    • osmux_xfrm_output_flush() : osmux.h
    • osmux_xfrm_output_init() : osmux.h
    • osmux_xfrm_output_init2() : osmux.h
    • osmux_xfrm_output_sched() : osmux.h
    • osmux_xfrm_output_set_rtp_msgb_alloc_cb() : osmux.h
    • osmux_xfrm_output_set_rtp_pl_type() : osmux.h
    • osmux_xfrm_output_set_rtp_ssrc() : osmux.h
    • osmux_xfrm_output_set_tx_cb() : osmux.h
    html/structosmux__in__handle.html0000644000175000017500000002141014752517766016631 0ustar buildbuild libosmo-netif: osmux_in_handle Struct Reference
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
    osmux_in_handle Struct Reference

    one to handle all existing RTP flows More...

    #include <osmux.h>

    Data Fields

    uint8_t osmux_seq
     Initial Osmux seqnum for each circuit, set during osmux_xfrm_input_open_circuit()
     
    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
     

    Detailed Description

    one to handle all existing RTP flows


    The documentation for this struct was generated from the following file:
    html/annotated_dup.js0000644000175000017500000000131314752517766014207 0ustar buildbuildvar annotated_dup = [ [ "amr_hdr", "structamr__hdr.html", null ], [ "amr_hdr_bwe", "structamr__hdr__bwe.html", null ], [ "ipa_head", "structipa__head.html", null ], [ "ipa_head_ext", "structipa__head__ext.html", null ], [ "osmo_ipa_msgb_cb", "structosmo__ipa__msgb__cb.html", null ], [ "osmo_jibuf", "structosmo__jibuf.html", null ], [ "osmux_hdr", "structosmux__hdr.html", null ], [ "osmux_in_handle", "structosmux__in__handle.html", "structosmux__in__handle" ], [ "osmux_out_handle", "structosmux__out__handle.html", null ], [ "rtcp_hdr", "structrtcp__hdr.html", null ], [ "rtp_hdr", "structrtp__hdr.html", null ], [ "rtp_x_hdr", "structrtp__x__hdr.html", null ] ];html/datagram_8c.html0000644000175000017500000006624314752517766014101 0ustar buildbuild libosmo-netif: src/datagram.c File Reference
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
    datagram.c File Reference

    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>

    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...
     
    struct osmo_dgram_tx * osmo_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...
     
    struct osmo_dgram_rx * osmo_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. More...
     
    int osmo_dgram_rx_open (struct osmo_dgram_rx *conn)
     Open the datagram receiver. 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...
     
    struct osmo_dgram * osmo_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. 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.html0000644000175000017500000002000014752517766017204 0ustar buildbuild libosmo-netif: include/osmocom/netif Directory Reference
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
    netif Directory Reference

    Files

    file  amr.h [code]
     
    file  datagram.h [code]
     Osmocom datagram socket helpers.
     
    file  ipa.h [code]
     
    file  ipa_unit.h [code]
     
    file  jibuf.h [code]
     Osmocom Jitter Buffer helpers.
     
    file  osmux.h [code]
     Osmocom multiplex protocol helpers.
     
    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.svg0000644000175000017500000003602614752517766013233 0ustar buildbuild html/sync_off.png0000644000175000017500000000152514752517766013345 0ustar buildbuildPNG  IHDRw=IDATxKhTW1I&38MII3b$c I1V1-(T.* t!K[čf`l(l"Y6gT}sgܹ d{8?̝;u`:!FB?Űm'y>ѝlU_?]Y(N8f1qn-etm 0}b%׌=0?1s08;_ W|%\Zð >舽lnp.a{ )t; b n652?>Oдunm`׭ZWjC~>־0+ {{fMŕټ` ݛ%uA6,]kWu]7ihu1 l Ҷ̺:\cxhRQt$ fd<4B[fd7=.M9//O a},j?.5ښm?X2#d p(?c!a1ޗةܾ7dK:)3],H+ku<|`LhC7e םt H$^2%l.aeÉ|s }D^hz~Rá]|#@חև[k<|(*ݹdtM:,]' X_n| /cfOIENDB`html/stream__private_8h_source.html0000644000175000017500000002400614752517766017061 0ustar buildbuild libosmo-netif: include/osmocom/netif/stream_private.h Source File
    libosmo-netif 1.5.1.34-ada6
    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
    26enum osmo_stream_mode {
    27 OSMO_STREAM_MODE_UNKNOWN,
    28 OSMO_STREAM_MODE_OSMO_FD,
    29 OSMO_STREAM_MODE_OSMO_IO,
    30};
    31
    32struct osmo_io_fd;
    33struct msghdr;
    34
    35int stream_sctp_sock_activate_events(int fd);
    36int stream_setsockopt_nodelay(int fd, int proto, int on);
    37int stream_sctp_recvmsg_wrapper(int fd, struct msgb *msg, const char *log_pfx);
    38
    39int stream_iofd_sctp_send_msgb(struct osmo_io_fd *iofd, struct msgb *msg, int sendmsg_flags);
    40int stream_iofd_sctp_recvmsg_trailer(struct osmo_io_fd *iofd, struct msgb *msg, int ret, const struct msghdr *msgh);
    41
    html/tab_h.png0000644000175000017500000000026114752517766012610 0ustar buildbuildPNG  IHDR$[xIDATxM@~ΒEv"!d*rGq={SݧH uO^[_Xvyұ=VCff{R%_rug(?gh\i>|sIENDB`html/group__datagram.js0000644000175000017500000000611514752517766014522 0ustar buildbuildvar group__datagram = [ [ "datagram.h", "datagram_8h.html", null ], [ "datagram.c", "datagram_8c.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.png0000644000175000017500000000112514752517766013670 0ustar buildbuildPNG  IHDR}\IDATx]?oP9i4i;iiZ7`b٬,HU'$*T]TDP6w};C; aӝߟjAInS}9Hӎ|? =_Ɗue*;YEsYBėsٌ ɫYq !Gǿv̇خ F}qb]70)d-}PfY{4@}2ԗNIǃc%UImcƝ>xt9$ OVE*Û#׈r@l$PrHaa dZrqIoT\,tj2FAxv-Lp׌p TI/ \sf; jViTo^cpb]€<a՜y9:+,E f6NEKU}^;nZuUS4 ѬbN.kjT% iV )GJ@TxIENDB`html/osmux_8h.html0000644000175000017500000006344414752517766013501 0ustar buildbuild libosmo-netif: include/osmocom/netif/osmux.h File Reference
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library

    Osmocom multiplex protocol helpers. More...

    #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
     Osmux protocol header. More...
     
    struct  osmux_in_handle
     one to handle all existing RTP flows More...
     
    struct  osmux_out_handle
     one per OSmux circuit_id, ie. More...
     

    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))
     
    int osmux_snprintf (char *buf, size_t size, struct msgb *msg)
     Print osmux header fields and payload from msg into buffer buf. More...
     
    struct osmux_in_handleosmux_xfrm_input_alloc (void *ctx)
     Allocate a new osmux in handle (osmux source, tx side) More...
     
    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)
     osmux_xfrm_input - add RTP message to OSmux batch More...
     
    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.html0000644000175000017500000004214514752517766015000 0ustar buildbuild libosmo-netif: include/osmocom/netif/jibuf.h Source File
    libosmo-netif 1.5.1.34-ada6
    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:450
    struct osmo_jibuf * osmo_jibuf_alloc(void *talloc_ctx)
    Allocate a new jitter buffer instance.
    Definition: jibuf.c:299
    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:461
    int osmo_jibuf_enqueue(struct osmo_jibuf *jb, struct msgb *msg)
    Try to enqueue a packet into the jitter buffer.
    Definition: jibuf.c:343
    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:438
    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:428
    void osmo_jibuf_delete(struct osmo_jibuf *jb)
    Destroy a previously allocated jitter buffer instance.
    Definition: jibuf.c:321
    bool osmo_jibuf_empty(struct osmo_jibuf *jb)
    Check whether the jitter buffer instance has packets queued or not.
    Definition: jibuf.c:419
    A structure representing a single instance of a jitter buffer.
    Definition: jibuf.h:20
    html/navtreedata.js0000644000175000017500000000424314752517766013665 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", [ [ "Deprecated List", "deprecated.html", null ], [ "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 ], [ "Typedefs", "globals_type.html", null ], [ "Macros", "globals_defs.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.png0000644000175000017500000000014214752517766012624 0ustar buildbuildPNG  IHDR ,@)IDATxA @BQۛТ) ) aܿoRlIENDB`html/structrtp__x__hdr.html0000644000175000017500000001203314752517766015447 0ustar buildbuild libosmo-netif: rtp_x_hdr Struct Reference
    libosmo-netif 1.5.1.34-ada6
    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.js0000644000175000017500000000022414752517766017147 0ustar buildbuildvar dir_abe9b486a10ccc5afdf8abc29637e0c1 = [ [ "netif", "dir_15662fdf1b5c37dde6a3ed82e5410e57.html", "dir_15662fdf1b5c37dde6a3ed82e5410e57" ] ];html/rs232_8h_source.html0000644000175000017500000001735414752517766014560 0ustar buildbuild libosmo-netif: include/osmocom/netif/rs232.h Source File
    libosmo-netif 1.5.1.34-ada6
    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_ */
    html/rtp_8h_source.html0000644000175000017500000004322514752517766014506 0ustar buildbuild libosmo-netif: include/osmocom/netif/rtp.h Source File
    libosmo-netif 1.5.1.34-ada6
    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.h:43
    Definition: rtp.h:7
    Definition: rtp.h:37
    html/menudata.js0000644000175000017500000000407514752517766013170 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:"Related Pages",url:"pages.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:"m",url:"globals.html#index_m"}, {text:"o",url:"globals.html#index_o"}]}, {text:"Functions",url:"globals_func.html",children:[ {text:"o",url:"globals_func.html#index_o"}]}, {text:"Typedefs",url:"globals_type.html"}, {text:"Macros",url:"globals_defs.html"}]}]}]} html/navtree.js0000644000175000017500000003653514752517766013044 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: amr_hdr Struct Reference
    libosmo-netif 1.5.1.34-ada6
    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.png0000644000175000017500000000124414752517766012443 0ustar buildbuildPNG  IHDR_ kIDATxkQϝ̤I&m&156*nąܸR,4 +H(Ub1J.(EmߏhJmKS'C(х & r3g(z&_9}՟@mu ` h`ԯ &~M4%3?h)\Yi>Jb @giވkg\轭EUv+?E"pB\Y&$vM+Dn)}:Xo 3گ'.f0u9Ljf6%3Gf#sm(,k*ʒJJˢou_~ r]%%mnu]zr5[ưXeI libosmo-netif: ipa_head_ext Struct Reference
    libosmo-netif 1.5.1.34-ada6
    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.html0000644000175000017500000001513514752517766017370 0ustar buildbuild libosmo-netif: src Directory Reference
    libosmo-netif 1.5.1.34-ada6
    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_cli.c
     
    file  stream_srv.c
     
    html/globals_defs.html0000644000175000017500000001003514752517766014337 0ustar buildbuild libosmo-netif: Globals
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
     
    html/files_dup.js0000644000175000017500000000033714752517766013341 0ustar buildbuildvar files_dup = [ [ "include", "dir_d44c64559bbebec7f509842c48db8b23.html", "dir_d44c64559bbebec7f509842c48db8b23" ], [ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ] ];html/index.html0000644000175000017500000000740614752517766013032 0ustar buildbuild libosmo-netif: Main Page
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
    libosmo-netif Documentation
    html/group__stream__cli.js0000644000175000017500000001030014752517766015212 0ustar buildbuildvar group__stream__cli = [ [ "osmo_stream_cli_read_cb2_t", "group__stream__cli.html#ga113d99fd2e25ce01e98db0a6aa21c89c", null ], [ "osmo_stream_cli_clear_tx_queue", "group__stream__cli.html#gafa39b1dcc139ad12cbc38d51049bf14f", null ], [ "osmo_stream_cli_close", "group__stream__cli.html#gad217c1c1b83ac852e090afd49146db19", null ], [ "osmo_stream_cli_create", "group__stream__cli.html#ga1754a498abc27577a8e0b3b0f236c05b", null ], [ "osmo_stream_cli_destroy", "group__stream__cli.html#ga9d0dac2f390c660c85fa347765f4f45a", null ], [ "osmo_stream_cli_get_data", "group__stream__cli.html#ga606a53840677f3f5200887dc92f5de4d", null ], [ "osmo_stream_cli_get_fd", "group__stream__cli.html#gaffc6ac3b28d87c910294a2f522a1eaab", null ], [ "osmo_stream_cli_get_iofd", "group__stream__cli.html#gac32d0489dd05ab89fb0c54dfd360d5b3", null ], [ "osmo_stream_cli_get_name", "group__stream__cli.html#ga0967921ed380123e3f54fd35375741bf", null ], [ "osmo_stream_cli_get_ofd", "group__stream__cli.html#ga0615daa4aac253a3d530f35fddbc68bd", null ], [ "osmo_stream_cli_get_sockname", "group__stream__cli.html#gaecd148ae11f2f619aa52dd2900a15827", null ], [ "osmo_stream_cli_is_connected", "group__stream__cli.html#ga79a09e9c9b8cc98991cd5eebdb41ed57", null ], [ "osmo_stream_cli_open", "group__stream__cli.html#ga86b4b9c8e563f8426d3cdae803e3ec38", null ], [ "osmo_stream_cli_open2", "group__stream__cli.html#ga127866794591d16a0eb7244f2fe666ef", null ], [ "osmo_stream_cli_reconnect", "group__stream__cli.html#ga11d2615f6197f33073ba7245e5ba95ee", null ], [ "osmo_stream_cli_recv", "group__stream__cli.html#ga06f9743c19068bb720a4949ae8467243", null ], [ "osmo_stream_cli_send", "group__stream__cli.html#gaacf415b97e1184baadeee5c60387422b", null ], [ "osmo_stream_cli_set_addr", "group__stream__cli.html#ga0038e937cf0f36c59e0e3991523219a1", null ], [ "osmo_stream_cli_set_addrs", "group__stream__cli.html#gaab1e7ef0ccc88e124c5f7bbb5e46c29c", null ], [ "osmo_stream_cli_set_connect_cb", "group__stream__cli.html#ga6a7d4b7df43a3f0487d343fe3cd0c6a7", null ], [ "osmo_stream_cli_set_data", "group__stream__cli.html#ga5e94c511d537f63337912bb50fb2dc28", null ], [ "osmo_stream_cli_set_disconnect_cb", "group__stream__cli.html#ga6640b82a47028434455471bb52d9f577", null ], [ "osmo_stream_cli_set_domain", "group__stream__cli.html#ga33ce730fc91ebade9b7188fa220656c6", null ], [ "osmo_stream_cli_set_ip_dscp", "group__stream__cli.html#ga18526a340625c84a69ccc067ce2cda58", null ], [ "osmo_stream_cli_set_local_addr", "group__stream__cli.html#ga70420e7c664cc4c4e69ac4d3476e7f53", null ], [ "osmo_stream_cli_set_local_addrs", "group__stream__cli.html#ga090fc3fcd1706b815ef5a729921c100e", null ], [ "osmo_stream_cli_set_local_port", "group__stream__cli.html#ga4d83e3cf7fdf7eb354c2015ff9bed98a", null ], [ "osmo_stream_cli_set_name", "group__stream__cli.html#gaeb712dc553735736047f9b11d9583baa", null ], [ "osmo_stream_cli_set_nodelay", "group__stream__cli.html#gaa196e78db6ca32abb1473566b4f1b04b", null ], [ "osmo_stream_cli_set_param", "group__stream__cli.html#ga0638e98001fa4bdd36533718472dfac7", null ], [ "osmo_stream_cli_set_port", "group__stream__cli.html#gab8b9f65bebfeb83c6e33d102e9439770", null ], [ "osmo_stream_cli_set_priority", "group__stream__cli.html#gac3ec56e61ce062300ad1df73a5f2c7f8", null ], [ "osmo_stream_cli_set_proto", "group__stream__cli.html#ga91d57aa94a370520540d7272af66a23b", null ], [ "osmo_stream_cli_set_read_cb", "group__stream__cli.html#ga798f23db7e2e1d999775589db8a73d03", null ], [ "osmo_stream_cli_set_read_cb2", "group__stream__cli.html#ga7892eb77d40f08a254f654786d0b996b", null ], [ "osmo_stream_cli_set_reconnect_timeout", "group__stream__cli.html#gade74792afe35f31dd2584c888db3dd62", null ], [ "osmo_stream_cli_set_segmentation_cb", "group__stream__cli.html#gab6094559935824750d82b9164ed76910", null ], [ "osmo_stream_cli_set_segmentation_cb2", "group__stream__cli.html#gaf62f1dbe4570d8ffd00b3bdc3f28d24b", null ], [ "osmo_stream_cli_set_tx_queue_max_length", "group__stream__cli.html#ga889f96540a1a2271a40dee063eaf5e9d", null ], [ "osmo_stream_cli_set_type", "group__stream__cli.html#ga5e5c4c9aacc1cd1d303c0295018594cb", null ] ];html/sync_on.png0000644000175000017500000000151514752517766013206 0ustar buildbuildPNG  IHDRw=IDATx_HTY8i4-g6&kQ)!0URKڅ/PE>K-+K.YdEPaAZSܝ;3wgfsWK.Da'q_k DQCg 0Y:qZ)~L0HV z-C%g68%wUϿ }? ?3 K@h aaUe s~2&&B*Alji*˨,oƣT,d[3-*> LɟfkҠw#*AEjKUy>&{8m5Ki jjD*Nigw7DmzK۾M!k?o_lX#~XӑR*EՂדE;6e"Q(=Ezæ5Kؼָ_ 1zBJ X96jL^7{J1i@%8'7M_\Q#Uy Wo x8sv|Sn q_m >b[JX,4[T{Ratjjzz'ȶiIws KC^Y%6ꈺ]vhiWvh'̂|[^YrD= libosmo-netif: Data Structure Index
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
    html/group__osmux.js0000644000175000017500000000352014752517766014112 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", [ [ "osmux_seq", "structosmux__in__handle.html#a1ba076a41ef9c3413665b7444c6521cc", null ] ] ], [ "osmux_out_handle", "structosmux__out__handle.html", null ], [ "osmux_snprintf", "group__osmux.html#gaf654e092ca97dd764f59905a2ed21650", null ], [ "osmux_xfrm_input", "group__osmux.html#ga9c7d30c0d7d9bc0caf744799d629d4cc", null ], [ "osmux_xfrm_input_alloc", "group__osmux.html#gad61cdde332496df6d7350d147e50b8be", null ], [ "osmux_xfrm_input_fini", "group__osmux.html#ga13655a3bdc68f5e96ad1fe1c03dc235e", null ], [ "osmux_xfrm_input_init", "group__osmux.html#ga96230b0431d5d4d91f2dd57a9c85c366", null ], [ "osmux_xfrm_output_alloc", "group__osmux.html#ga41a217bffa1b0ac095c98ab0fab82c25", null ], [ "osmux_xfrm_output_flush", "group__osmux.html#gaaac410425f6470396ae9db53ebb8dc44", null ], [ "osmux_xfrm_output_init", "group__osmux.html#ga90d58246bcd24a6126898cd6c47dddf4", null ], [ "osmux_xfrm_output_init2", "group__osmux.html#gaa076e54fa0d249721a4c7b174a8ed2d1", 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/dynsections.js0000644000175000017500000001054414752517766013732 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 (l libosmo-netif: Related Pages
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
    Related Pages
    Here is a list of all related documentation pages:
    html/tabs.css0000644000175000017500000002334514752517766012500 0ustar buildbuild.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>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.html0000644000175000017500000000763714752517766017242 0ustar buildbuild libosmo-netif: include Directory Reference
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
    include Directory Reference
    html/prim_8h_source.html0000644000175000017500000003627714752517766014661 0ustar buildbuild libosmo-netif: include/osmocom/netif/prim.h Source File
    libosmo-netif 1.5.1.34-ada6
    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
    27struct osmo_prim_srv_link;
    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);
    48void osmo_prim_srv_link_set_name(struct osmo_prim_srv_link *prim_link, const char *name);
    49int osmo_prim_srv_link_set_addr(struct osmo_prim_srv_link *prim_link, const char *path);
    50const char *osmo_prim_srv_link_get_addr(struct osmo_prim_srv_link *prim_link);
    51void osmo_prim_srv_link_set_priv(struct osmo_prim_srv_link *prim_link, void *priv);
    52void *osmo_prim_srv_link_get_priv(const struct osmo_prim_srv_link *prim_link);
    53void osmo_prim_srv_link_set_log_category(struct osmo_prim_srv_link *prim_link, int log_cat);
    54void osmo_prim_srv_link_set_opened_conn_cb(struct osmo_prim_srv_link *prim_link, osmo_prim_srv_conn_cb opened_conn_cb);
    55void osmo_prim_srv_link_set_closed_conn_cb(struct osmo_prim_srv_link *prim_link, osmo_prim_srv_conn_cb closed_conn_cb);
    56void 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);
    57void osmo_prim_srv_link_set_rx_cb(struct osmo_prim_srv_link *prim_link, osmo_prim_srv_rx_cb rx_cb);
    58void osmo_prim_srv_link_set_rx_msgb_alloc_len(struct osmo_prim_srv_link *prim_link, size_t alloc_len);
    59int osmo_prim_srv_link_open(struct osmo_prim_srv_link *prim_link);
    60
    61int osmo_prim_srv_send(struct osmo_prim_srv *prim_srv, struct msgb *msg);
    62struct osmo_prim_srv_link *osmo_prim_srv_get_link(struct osmo_prim_srv *prims_srv);
    63void osmo_prim_srv_set_name(struct osmo_prim_srv *prim_srv, const char *name);
    64void osmo_prim_srv_set_priv(struct osmo_prim_srv *prim_srv, void *priv);
    65void *osmo_prim_srv_get_priv(const struct osmo_prim_srv *prim_srv);
    66void osmo_prim_srv_close(struct osmo_prim_srv *prim_srv);
    html/dir_15662fdf1b5c37dde6a3ed82e5410e57.js0000644000175000017500000000121414752517766016662 0ustar buildbuildvar dir_15662fdf1b5c37dde6a3ed82e5410e57 = [ [ "amr.h", "amr_8h_source.html", null ], [ "datagram.h", "datagram_8h.html", "datagram_8h" ], [ "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.html", "stream_8h" ], [ "stream_private.h", "stream__private_8h_source.html", null ] ];html/group__stream__cli.html0000644000175000017500000027467514752517766015575 0ustar buildbuild libosmo-netif: Osmocom Stream Client
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
    Osmocom Stream Client

    This code is intended to abstract any client use of stream-type sockets, such as TCP and SCTP. More...

    Typedefs

    typedef int(* osmo_stream_cli_connect_cb_t) (struct osmo_stream_cli *cli)
     
    typedef int(* osmo_stream_cli_disconnect_cb_t) (struct osmo_stream_cli *cli)
     
    typedef int(* osmo_stream_cli_read_cb_t) (struct osmo_stream_cli *cli)
     
    typedef int(* osmo_stream_cli_read_cb2_t) (struct osmo_stream_cli *cli, int res, struct msgb *msg)
     Completion call-back function when something was read from from the stream client socket. More...
     
    typedef int(* osmo_stream_cli_segmentation_cb_t) (struct msgb *msg)
     
    typedef int(* osmo_stream_cli_segmentation_cb2_t) (struct osmo_stream_cli *cli, struct msgb *msg)
     

    Enumerations

    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
    }
     

    Functions

    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...
     
    const char * osmo_stream_cli_get_name (const struct osmo_stream_cli *cli)
     Retrieve name previously set on the cli object (see osmo_stream_cli_set_name()). More...
     
    void osmo_stream_cli_set_nodelay (struct osmo_stream_cli *cli, bool nodelay)
     Set the NODELAY socket option to avoid Nagle-like behavior. More...
     
    int osmo_stream_cli_set_priority (struct osmo_stream_cli *cli, int sk_prio)
     Set the priority value of the stream socket. More...
     
    int osmo_stream_cli_set_ip_dscp (struct osmo_stream_cli *cli, uint8_t ip_dscp)
     Set the DSCP (differentiated services code point) of the stream 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. 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 bind. 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)
     Retrieve application private data of the stream client socket. More...
     
    int osmo_stream_cli_set_tx_queue_max_length (struct osmo_stream_cli *cli, unsigned int size)
     Set the maximum length queue of the stream client. More...
     
    char * osmo_stream_cli_get_sockname (const struct osmo_stream_cli *cli)
     Retrieve the stream client socket description. More...
     
    struct osmo_fd * osmo_stream_cli_get_ofd (struct osmo_stream_cli *cli)
     Retrieve Osmocom File Descriptor of the stream client socket. More...
     
    int osmo_stream_cli_get_fd (const struct osmo_stream_cli *cli)
     Retrieve file descriptor of the stream client socket. More...
     
    struct osmo_io_fd * osmo_stream_cli_get_iofd (const struct osmo_stream_cli *cli)
     Retrieve osmo_io descriptor of the stream client socket. More...
     
    void osmo_stream_cli_set_connect_cb (struct osmo_stream_cli *cli, osmo_stream_cli_connect_cb_t connect_cb)
     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, osmo_stream_cli_disconnect_cb_t disconnect_cb)
     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, osmo_stream_cli_read_cb_t read_cb)
     Set the call-back function called to read from the stream client socket. More...
     
    void osmo_stream_cli_set_read_cb2 (struct osmo_stream_cli *cli, osmo_stream_cli_read_cb2_t read_cb)
     Set the call-back function called to read from the stream client socket. More...
     
    void osmo_stream_cli_set_segmentation_cb (struct osmo_stream_cli *cli, osmo_stream_cli_segmentation_cb_t segmentation_cb)
     Set the segmentation callback for the client. More...
     
    void osmo_stream_cli_set_segmentation_cb2 (struct osmo_stream_cli *cli, osmo_stream_cli_segmentation_cb2_t segmentation_cb2)
     Set the segmentation callback for the client. More...
     
    void osmo_stream_cli_reconnect (struct osmo_stream_cli *cli)
     Re-connect an Osmocom Stream Client. More...
     
    bool osmo_stream_cli_is_connected (struct osmo_stream_cli *cli)
     Check if Osmocom Stream Client is in connected state. More...
     
    struct osmo_stream_cli * osmo_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. 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 in osmo_fd mode. More...
     
    void osmo_stream_cli_clear_tx_queue (struct osmo_stream_cli *cli)
     Clear the transmit queue of the stream client. More...
     
    int osmo_stream_cli_set_param (struct osmo_stream_cli *cli, enum osmo_stream_cli_param par, void *val, size_t val_len)
     Set given parameter of stream client to given value. More...
     

    Detailed Description

    This code is intended to abstract any client use of stream-type sockets, such as TCP and SCTP.

    An osmo_stream_cli represents a client implementation of a SOCK_STREAM or SOCK_SEQPACKET socket. It contains all the common logic like non-blocking outbound connect to a remote server, re-connecting after disconnect or connect failure, etc.

    osmo_stream_cli can operate in two different modes:

    1. The legacy mode using osmo_fd (from libosmocore)
    2. The modern (2023) mode using osmo_io_fd (from libosmocore)

    For any new applications, you definitely should use the modern mode, as it provides you with a higher layer of abstraction and allows you to perform efficient I/O using the io_uring backend of osmo_io.

    The modern mode is chosen by invoking osmo_stream_cli_set_read_cb2(). The legacy mode is chosen by invoking the older osmo_stream_cli_set_read_cb().

    A typical usage of osmo_stream_cli would look as follows:

    Once the connection is established, your connect_cb is called to notify you.

    You may send data to the connection using osmo_tream_cli_send().

    Any received inbound data on the connection is reported vie the read_cb.

    Typedef Documentation

    ◆ osmo_stream_cli_read_cb2_t

    typedef int(* osmo_stream_cli_read_cb2_t) (struct osmo_stream_cli *cli, int res, struct msgb *msg)

    Completion call-back function when something was read from from the stream client socket.

    Parameters
    [in]cliStream Client that got receive event.
    [in]resreturn value of the read()/recvmsg()/... call, or -errno in case of error.
    [in]msgmessage buffer containing the read data. Ownership is transferred to the call-back, and it must make sure to msgb_free() it eventually!

    Function Documentation

    ◆ osmo_stream_cli_clear_tx_queue()

    void osmo_stream_cli_clear_tx_queue ( struct osmo_stream_cli *  cli)

    Clear the transmit queue of the stream client.

    Calling this function wil clear (delete) any pending, not-yet transmitted data from the transmit queue.

    ◆ 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

    ◆ 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

    ◆ osmo_stream_cli_get_data()

    void * osmo_stream_cli_get_data ( struct osmo_stream_cli *  cli)

    Retrieve 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_fd()

    int osmo_stream_cli_get_fd ( const struct osmo_stream_cli *  cli)

    Retrieve file descriptor of the stream client socket.

    Parameters
    [in]cliStream Client of which we want to obtain the file descriptor
    Returns
    File descriptor or negative in case of error

    Referenced by osmo_stream_cli_get_sockname().

    ◆ osmo_stream_cli_get_iofd()

    struct osmo_io_fd * osmo_stream_cli_get_iofd ( const struct osmo_stream_cli *  cli)

    Retrieve osmo_io descriptor of the stream client socket.

    This function must not be called on a stream client in legacy osmo_fd mode! The iofd is only valid once/after osmo_stream_cli_open() has successfully returned.

    Parameters
    [in]cliStream Client of which we want to obtain the file descriptor
    Returns
    osmo_io_fd of stream client, or NULL if stream not yet opened.

    ◆ osmo_stream_cli_get_name()

    const char * osmo_stream_cli_get_name ( const struct osmo_stream_cli *  cli)

    Retrieve name previously set on the cli object (see osmo_stream_cli_set_name()).

    Parameters
    [in]clistream_cli whose name is to be retrieved
    Returns
    The name to be set on cli; NULL if never set

    ◆ osmo_stream_cli_get_ofd()

    struct osmo_fd * osmo_stream_cli_get_ofd ( struct osmo_stream_cli *  cli)

    Retrieve Osmocom File Descriptor of the stream client socket.

    This function only works in case you operate osmo_stream_cli in osmo_fd mode!

    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)

    Retrieve the stream client socket description.

    Calling this function will build a string that describes the socket in terms of its local/remote address/port. The returned name is stored in a static buffer; it is hence not re-entrant or thread-safe.

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

    References osmo_stream_cli_get_fd().

    ◆ 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

    Referenced by osmo_stream_cli_send().

    ◆ osmo_stream_cli_open()

    int osmo_stream_cli_open ( struct osmo_stream_cli *  cli)

    Open connection of an Osmocom stream client.

    This will initiate an non-blocking outbound connect to the configured destination (server) address. By default the client will automatically attempt to 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_reconnect()

    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

    ◆ osmo_stream_cli_recv()

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

    Receive data via an Osmocom stream client in osmo_fd mode.

    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

    Application programs using the legacy osmo_fd mode of osmo_stream_cli will use this function to read/receive from a stream client socket after they have been notified that it is readable (via select/poll).

    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.

    This is the function you use for writing/sending/transmitting data via the osmo_stream_cli.

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

    References osmo_stream_cli_is_connected().

    ◆ 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.

    Any changes to this setting will only become active upon next (re)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) Any changes to this setting will only become active upon next (re)connect.

    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,
    osmo_stream_cli_connect_cb_t  connect_cb 
    )

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

    The call-back function registered via this function will be called upon completion of the non-blocking outbound connect operation.

    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,
    osmo_stream_cli_disconnect_cb_t  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.

    Any changes to this setting will only become active upon next (re)connect.

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

    ◆ osmo_stream_cli_set_ip_dscp()

    int osmo_stream_cli_set_ip_dscp ( struct osmo_stream_cli *  cli,
    uint8_t  ip_dscp 
    )

    Set the DSCP (differentiated services code point) of the stream socket.

    Setting this will automatically set the IP DSCP option on any socket established via osmo_stream_cli_open or any re-connect. This can be set either before or after opening the socket.

    Parameters
    [in]cliStream client whose sockets are to be configured
    [in]ip_dscpDSCP value. Value range 0..63.
    Returns
    negative on error, 0 on success

    ◆ 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).

    Any changes to this setting will only become active upon next (re)connect.

    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 bind.

    Useful for protocols allowing bind to more than one address (such as SCTP) Any changes to this setting will only become active upon next (re)connect.

    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).

    Any changes to this setting will only become active upon next (re)connect.

    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. This can be set either before or after 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_param()

    int osmo_stream_cli_set_param ( struct osmo_stream_cli *  cli,
    enum osmo_stream_cli_param  par,
    void *  val,
    size_t  val_len 
    )

    Set given parameter of stream client to given value.

    Parameters
    [in]clistream client on which to set parameter.
    [in]paridentifier of the parameter to be set.
    [in]valvalue of the parameter to be set.
    [in]val_lenlength of the parameter value.
    Returns
    0 in success; negative -errno on error.

    ◆ 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.

    Any changes to this setting will only become active upon next (re)connect.

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

    ◆ osmo_stream_cli_set_priority()

    int osmo_stream_cli_set_priority ( struct osmo_stream_cli *  cli,
    int  sk_prio 
    )

    Set the priority value of the stream socket.

    Setting this will automatically set the socket priority option on any socket established via osmo_stream_cli_open or any re-connect. This can be set either before or after opening the socket.

    Parameters
    [in]cliStream client whose sockets are to be configured
    [in]sk_priopriority value. Values outside 0..6 require CAP_NET_ADMIN.
    Returns
    negative on error, 0 on success

    ◆ 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.

    Any changes to this setting will only become active upon next (re)connect.

    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,
    osmo_stream_cli_read_cb_t  read_cb 
    )

    Set the call-back function called to read from the stream client socket.

    This function will implicitly configure osmo_stream_cli to use legacy osmo_ofd mode.

    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,
    osmo_stream_cli_read_cb2_t  read_cb 
    )

    Set the call-back function called to read from the stream client socket.

    This function will implicitly configure osmo_stream_cli to use osmo_iofd mode.

    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_segmentation_cb()

    void osmo_stream_cli_set_segmentation_cb ( struct osmo_stream_cli *  cli,
    osmo_stream_cli_segmentation_cb_t  segmentation_cb 
    )

    Set the segmentation callback for the client.

    Parameters
    [in,out]cliStream Client to modify
    [in]segmentation_cbTarget segmentation callback

    A segmentation call-back can optionally be used when a packet based protocol (like TCP) is used within a STREAM style socket that does not preserve message boundaries within the stream. If a segmentation call-back is given, the osmo_stream_srv library code will makes sure that the read_cb called only for complete single messages, and not arbitrary segments of the stream.

    ◆ osmo_stream_cli_set_segmentation_cb2()

    void osmo_stream_cli_set_segmentation_cb2 ( struct osmo_stream_cli *  cli,
    osmo_stream_cli_segmentation_cb2_t  segmentation_cb2 
    )

    Set the segmentation callback for the client.

    Parameters
    [in,out]cliStream Client to modify
    [in]segmentation_cb2Target segmentation callback

    Same as osmo_stream_cli_set_segmentation_cb(), but a osmo_stream_cli_segmentation_cb2_t is called instead which allows access to the related cli object.

    ◆ osmo_stream_cli_set_tx_queue_max_length()

    int osmo_stream_cli_set_tx_queue_max_length ( struct osmo_stream_cli *  cli,
    unsigned int  size 
    )

    Set the maximum length queue of the stream client.

    Parameters
    [in]cliStream Client to modify
    [in]sizemaximum amount of msgbs which can be queued in the internal tx queue.
    Returns
    0 on success, negative on error.

    The maximum length queue default value is 1024 msgbs.

    ◆ 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.

    Any changes to this setting will only become active upon next (re)connect.

    Parameters
    [in]cliStream Client to modify
    [in]typeSocket Type (like SOCK_STREAM (default), SOCK_SEQPACKET, ...)
    Returns
    zero on success, negative -errno on error.
    html/structipa__head.html0000644000175000017500000001261714752517766015061 0ustar buildbuild libosmo-netif: ipa_head Struct Reference
    libosmo-netif 1.5.1.34-ada6
    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.html0000644000175000017500000010230514752517766015047 0ustar buildbuild libosmo-netif: include/osmocom/netif/osmux.h Source File
    libosmo-netif 1.5.1.34-ada6
    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
    32#define OSMUX_FT_SIGNAL 0
    33#define OSMUX_FT_VOICE_AMR 1
    34#define OSMUX_FT_DUMMY 2
    35
    37struct osmux_hdr {
    38#if OSMO_IS_LITTLE_ENDIAN
    39 uint8_t amr_q:1,
    40 amr_f:1,
    41 ctr:3,
    42 ft:2,
    43 rtp_m:1;
    44#elif OSMO_IS_BIG_ENDIAN
    45/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianness.py) */
    46 uint8_t rtp_m:1, ft:2, ctr:3, amr_f:1, amr_q:1;
    47#endif
    48 uint8_t seq;
    49#define OSMUX_CID_MAX 255 /* determined by circuit_id */
    50 uint8_t circuit_id;
    51#if OSMO_IS_LITTLE_ENDIAN
    52 uint8_t amr_cmr:4,
    53 amr_ft:4;
    54#elif OSMO_IS_BIG_ENDIAN
    55/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianness.py) */
    56 uint8_t amr_ft:4, amr_cmr:4;
    57#endif
    58 uint8_t data[0];
    59} __attribute__((packed));
    60
    64 uint8_t osmux_seq;
    65 uint8_t batch_factor;
    66 uint16_t batch_size;
    67
    68 struct {
    69 uint32_t input_rtp_msgs;
    70 uint32_t output_osmux_msgs;
    71 uint64_t input_rtp_bytes;
    72 uint64_t output_osmux_bytes;
    73 } stats;
    74
    75 void (*deliver)(struct msgb *msg, void *data);
    76 void *data;
    77 char *internal_data; /* internal data to store batch */
    78};
    79
    80#define OSMUX_MAX_CONCURRENT_CALLS 8
    81
    82typedef struct msgb *(*rtp_msgb_alloc_cb_t)(void *rtp_msgb_alloc_priv_data,
    83 unsigned int msg_len);
    86 uint16_t rtp_seq;
    87 uint32_t rtp_timestamp;
    88 uint32_t rtp_ssrc;
    89 uint8_t rtp_payload_type;
    90 uint8_t osmux_seq_ack; /* Latest received seq num */
    91 struct osmo_timer_list timer;
    92 struct llist_head list;
    93 void (*tx_cb)(struct msgb *msg, void *data); /* Used defined rtp tx callback */
    94 void *data; /* User defined opaque data structure */
    95 rtp_msgb_alloc_cb_t rtp_msgb_alloc_cb; /* User defined msgb alloc function for generated RTP pkts */
    96 void *rtp_msgb_alloc_cb_data; /* Opaque data pointer set by user and passed in rtp_msgb_alloc_cb() */
    97};
    98
    100static inline uint8_t *osmux_get_payload(struct osmux_hdr *osmuxh)
    101{
    102 return (uint8_t *)osmuxh + sizeof(struct osmux_hdr);
    103}
    104
    105int osmux_snprintf(char *buf, size_t size, struct msgb *msg);
    106
    107/* 1500 - sizeof(iphdr) = 20 bytes - sizeof(udphdr) = 8 bytes. */
    108#define OSMUX_BATCH_DEFAULT_MAX 1472
    109
    110struct osmux_in_handle *osmux_xfrm_input_alloc(void *ctx);
    111void osmux_xfrm_input_init(struct osmux_in_handle *h) OSMO_DEPRECATED("Use osmux_xfrm_input_alloc() instead");
    112void osmux_xfrm_input_fini(struct osmux_in_handle *h) OSMO_DEPRECATED("Use talloc_free() instead");
    113void osmux_xfrm_input_set_name(struct osmux_in_handle *h, const char *name);
    114int osmux_xfrm_input_set_batch_factor(struct osmux_in_handle *h, uint8_t batch_factor);
    115void osmux_xfrm_input_set_batch_size(struct osmux_in_handle *h, uint16_t batch_size);
    116void osmux_xfrm_input_set_initial_seqnum(struct osmux_in_handle *h, uint8_t osmux_seqnum);
    117void osmux_xfrm_input_set_deliver_cb(struct osmux_in_handle *h, void (*deliver_cb)(struct msgb *msg, void *data), void *data);
    118void *osmux_xfrm_input_get_deliver_cb_data(struct osmux_in_handle *h);
    119
    120int osmux_xfrm_input_open_circuit(struct osmux_in_handle *h, int ccid, int dummy);
    121void osmux_xfrm_input_close_circuit(struct osmux_in_handle *h, int ccid);
    122
    123int osmux_xfrm_input(struct osmux_in_handle *h, struct msgb *msg, int ccid);
    124void osmux_xfrm_input_deliver(struct osmux_in_handle *h);
    125
    127void 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");
    128void 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");
    129void osmux_xfrm_output_set_rtp_ssrc(struct osmux_out_handle *h, uint32_t rtp_ssrc);
    130void osmux_xfrm_output_set_rtp_pl_type(struct osmux_out_handle *h, uint32_t rtp_payload_type);
    131void osmux_xfrm_output_set_tx_cb(struct osmux_out_handle *h, void (*tx_cb)(struct msgb *msg, void *data), void *data);
    132void osmux_xfrm_output_set_rtp_msgb_alloc_cb(struct osmux_out_handle *h, rtp_msgb_alloc_cb_t cb, void *cb_data);
    133int osmux_xfrm_output_sched(struct osmux_out_handle *h, struct osmux_hdr *osmuxh);
    135struct osmux_hdr *osmux_xfrm_output_pull(struct msgb *msg);
    138#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_input_fini(struct osmux_in_handle *h) OSMO_DEPRECATED("Use talloc_free() instead")
    Definition: osmux_input.c:852
    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_init(struct osmux_out_handle *h, uint32_t rtp_ssrc) OSMO_DEPRECATED("Use osmux_xfrm_output_alloc() and osmux_xfrm_output_set_rtp_*() instead")
    Definition: osmux_output.c:341
    void osmux_xfrm_input_init(struct osmux_in_handle *h) OSMO_DEPRECATED("Use osmux_xfrm_input_alloc() instead")
    Definition: osmux_input.c:738
    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)
    osmux_xfrm_input - add RTP message to OSmux batch
    Definition: osmux_input.c:616
    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")
    Definition: osmux_output.c:334
    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
    struct osmux_in_handle * osmux_xfrm_input_alloc(void *ctx)
    Allocate a new osmux in handle (osmux source, tx side)
    Definition: osmux_input.c:711
    int osmux_snprintf(char *buf, size_t size, struct msgb *msg)
    Print osmux header fields and payload from msg into buffer buf.
    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
    Osmux protocol header.
    Definition: osmux.h:37
    one to handle all existing RTP flows
    Definition: osmux.h:62
    uint8_t osmux_seq
    Initial Osmux seqnum for each circuit, set during osmux_xfrm_input_open_circuit()
    Definition: osmux.h:64
    one per OSmux circuit_id, ie.
    Definition: osmux.h:85
    html/dir_d44c64559bbebec7f509842c48db8b23.js0000644000175000017500000000022614752517766016675 0ustar buildbuildvar dir_d44c64559bbebec7f509842c48db8b23 = [ [ "osmocom", "dir_abe9b486a10ccc5afdf8abc29637e0c1.html", "dir_abe9b486a10ccc5afdf8abc29637e0c1" ] ];html/group__stream__srv.js0000644000175000017500000001145414752517766015270 0ustar buildbuildvar group__stream__srv = [ [ "osmo_stream_srv_read_cb2_t", "group__stream__srv.html#ga5b6beeb3ec1effa8afa948deb7a4fc15", null ], [ "osmo_stream_srv_create", "group__stream__srv.html#ga136b426790b6322f58f89059b88aaa0b", null ], [ "osmo_stream_srv_create2", "group__stream__srv.html#ga8be283e1a143e346b4d6ccf33cbb9b98", null ], [ "osmo_stream_srv_destroy", "group__stream__srv.html#ga47f18e063f64f22cb74d58d8b7243bed", null ], [ "osmo_stream_srv_get_data", "group__stream__srv.html#gae2a0ef01097d964c71e38600b4c078d5", null ], [ "osmo_stream_srv_get_fd", "group__stream__srv.html#ga803c8ba415f66cc1029b3899cc53b807", null ], [ "osmo_stream_srv_get_iofd", "group__stream__srv.html#ga9e00a9172d5b2708afa269d52c118eff", null ], [ "osmo_stream_srv_get_master", "group__stream__srv.html#ga9cf689935bf6ffac4f86f56219d73c8e", null ], [ "osmo_stream_srv_get_name", "group__stream__srv.html#gad34dc0f7ebf7c84653514566e431a1d2", null ], [ "osmo_stream_srv_get_ofd", "group__stream__srv.html#ga47bbca4f12717db2e6158eefe6310b9b", null ], [ "osmo_stream_srv_get_sockname", "group__stream__srv.html#ga4f176a35751509dc741fbd2b52f45b22", null ], [ "osmo_stream_srv_link_close", "group__stream__srv.html#gad325d97b09c724e830c98d76b890520d", null ], [ "osmo_stream_srv_link_create", "group__stream__srv.html#gaad262988c7ac365566f03843c560f892", null ], [ "osmo_stream_srv_link_destroy", "group__stream__srv.html#ga882acaaa5935422b0e09a2ce8c8019ec", null ], [ "osmo_stream_srv_link_get_data", "group__stream__srv.html#gacb5d68c2a6a9663f99266c70747bce04", null ], [ "osmo_stream_srv_link_get_fd", "group__stream__srv.html#gae2ef09bc8da55db30d967563dfc6561a", null ], [ "osmo_stream_srv_link_get_name", "group__stream__srv.html#ga67520942e5a404a0b3a6960b8a161de8", null ], [ "osmo_stream_srv_link_get_ofd", "group__stream__srv.html#ga7b8981351a154c357fcefd39c31ad42a", null ], [ "osmo_stream_srv_link_get_sockname", "group__stream__srv.html#ga7d7b6af7df24e90dc758a088bae6316d", null ], [ "osmo_stream_srv_link_is_opened", "group__stream__srv.html#ga28243be108ed0302b0f5a9d1dfc96b22", null ], [ "osmo_stream_srv_link_open", "group__stream__srv.html#ga603b89074d3e8c0fb44144ab1864f0d4", null ], [ "osmo_stream_srv_link_set_accept_cb", "group__stream__srv.html#ga1eea525d4e1e7a24c9c08881994ceb7e", null ], [ "osmo_stream_srv_link_set_addr", "group__stream__srv.html#gacece90116484e34540def69b05c66f57", null ], [ "osmo_stream_srv_link_set_addrs", "group__stream__srv.html#gaadabca7d23c52c39e291bf7e05f0055b", null ], [ "osmo_stream_srv_link_set_data", "group__stream__srv.html#ga5ef0f0c85a52c08e8c10d36a8f44e392", null ], [ "osmo_stream_srv_link_set_domain", "group__stream__srv.html#ga9629b516297c31f34af48e4630973dab", null ], [ "osmo_stream_srv_link_set_ip_dscp", "group__stream__srv.html#ga53be410e4b8cf79e850b8cd5c01b4c78", null ], [ "osmo_stream_srv_link_set_msgb_alloc_info", "group__stream__srv.html#ga925981abcacca9f9a3375d511309cb32", null ], [ "osmo_stream_srv_link_set_name", "group__stream__srv.html#gadef998825a4739660b198151fcee4201", null ], [ "osmo_stream_srv_link_set_nodelay", "group__stream__srv.html#ga41e8ad2c761aaa00313aa11d1f29a3ed", null ], [ "osmo_stream_srv_link_set_param", "group__stream__srv.html#ga759bceb4ce155f88e3e7817ce4c9449d", null ], [ "osmo_stream_srv_link_set_port", "group__stream__srv.html#ga76bbbafd1d8dc9c9ebffd301503b6dd9", null ], [ "osmo_stream_srv_link_set_priority", "group__stream__srv.html#ga3bfcfe6f09fa8f87dacb7ea215c64bae", null ], [ "osmo_stream_srv_link_set_proto", "group__stream__srv.html#ga2508987133a93863d2a50103004b0f36", null ], [ "osmo_stream_srv_link_set_tx_queue_max_length", "group__stream__srv.html#gad88e9249699c53894cb34c099b5e0c4b", null ], [ "osmo_stream_srv_link_set_type", "group__stream__srv.html#ga1903f9aa2e6f9283ebcf20f573b1d970", null ], [ "osmo_stream_srv_recv", "group__stream__srv.html#gac86242c41223c525c770ff7e7515d83e", null ], [ "osmo_stream_srv_send", "group__stream__srv.html#gaa1589994cf6eab27742cafee6b7fb491", null ], [ "osmo_stream_srv_set_closed_cb", "group__stream__srv.html#gaed83d9686289eee534d77a61b96fbd90", null ], [ "osmo_stream_srv_set_data", "group__stream__srv.html#ga9891663b20714d72f992e44ad1e92eea", null ], [ "osmo_stream_srv_set_flush_and_destroy", "group__stream__srv.html#ga8390ce6740e56eb22215e1c5805c95f1", null ], [ "osmo_stream_srv_set_name", "group__stream__srv.html#ga196834d254fd94922d6be91b7b5b1ed3", null ], [ "osmo_stream_srv_set_read_cb", "group__stream__srv.html#gad0d7b7e236826c52f10a7b4f50009d01", null ], [ "osmo_stream_srv_set_segmentation_cb", "group__stream__srv.html#ga560a6d868bf95bf2f3a4b716bfd5cac9", null ], [ "osmo_stream_srv_set_segmentation_cb2", "group__stream__srv.html#ga348c4560f69403fc3a3dfcbe874c2593", null ] ];html/structrtcp__hdr.html0000644000175000017500000001261614752517766015133 0ustar buildbuild libosmo-netif: rtcp_hdr Struct Reference
    libosmo-netif 1.5.1.34-ada6
    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.png0000644000175000017500000000020414752517766013001 0ustar buildbuildPNG  IHDR KIDATxm @!Gk7-`&sts@k}2 P%_N .:0Dk›x" ֛)x5IENDB`html/functions.html0000644000175000017500000000766114752517766013736 0ustar buildbuild libosmo-netif: Data Fields
    libosmo-netif 1.5.1.34-ada6
    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.html0000644000175000017500000003123614752517766015461 0ustar buildbuild libosmo-netif: osmo_jibuf Struct Reference
    libosmo-netif 1.5.1.34-ada6
    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/group__jibuf.html0000644000175000017500000005402114752517766014370 0ustar buildbuild libosmo-netif: Osmocom Jitter Buffer
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
    Osmocom Jitter Buffer

    Files

    file  jibuf.h
     Osmocom Jitter Buffer helpers.
     

    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

    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/stream_8h.js0000644000175000017500000002233614752517766013264 0ustar buildbuildvar stream_8h = [ [ "msgb_sctp_ppid", "stream_8h.html#a2693c0cc5c6222dd9ed42c8c4bf8aec8", null ], [ "msgb_sctp_stream", "stream_8h.html#ac2c359892ad63309b59a4b402f6a3e81", null ], [ "OSMO_STREAM_SCTP_MSG_FLAGS_NOTIFICATION", "stream_8h.html#a123b7866ed4985a81246bfede79a8ea9", null ], [ "osmo_stream_cli_read_cb2_t", "group__stream__cli.html#ga113d99fd2e25ce01e98db0a6aa21c89c", null ], [ "osmo_stream_srv_read_cb2_t", "group__stream__srv.html#ga5b6beeb3ec1effa8afa948deb7a4fc15", null ], [ "osmo_stream_cli_clear_tx_queue", "group__stream__cli.html#gafa39b1dcc139ad12cbc38d51049bf14f", null ], [ "osmo_stream_cli_close", "group__stream__cli.html#gad217c1c1b83ac852e090afd49146db19", null ], [ "osmo_stream_cli_create", "group__stream__cli.html#ga1754a498abc27577a8e0b3b0f236c05b", null ], [ "osmo_stream_cli_destroy", "group__stream__cli.html#ga9d0dac2f390c660c85fa347765f4f45a", null ], [ "osmo_stream_cli_get_data", "group__stream__cli.html#ga606a53840677f3f5200887dc92f5de4d", null ], [ "osmo_stream_cli_get_fd", "group__stream__cli.html#gaffc6ac3b28d87c910294a2f522a1eaab", null ], [ "osmo_stream_cli_get_iofd", "group__stream__cli.html#gac32d0489dd05ab89fb0c54dfd360d5b3", null ], [ "osmo_stream_cli_get_name", "group__stream__cli.html#ga0967921ed380123e3f54fd35375741bf", null ], [ "osmo_stream_cli_get_ofd", "group__stream__cli.html#ga0615daa4aac253a3d530f35fddbc68bd", null ], [ "osmo_stream_cli_get_sockname", "group__stream__cli.html#gaecd148ae11f2f619aa52dd2900a15827", null ], [ "osmo_stream_cli_is_connected", "group__stream__cli.html#ga79a09e9c9b8cc98991cd5eebdb41ed57", null ], [ "osmo_stream_cli_open", "group__stream__cli.html#ga86b4b9c8e563f8426d3cdae803e3ec38", null ], [ "osmo_stream_cli_open2", "group__stream__cli.html#ga127866794591d16a0eb7244f2fe666ef", null ], [ "osmo_stream_cli_reconnect", "group__stream__cli.html#ga11d2615f6197f33073ba7245e5ba95ee", null ], [ "osmo_stream_cli_recv", "group__stream__cli.html#ga06f9743c19068bb720a4949ae8467243", null ], [ "osmo_stream_cli_send", "group__stream__cli.html#gaacf415b97e1184baadeee5c60387422b", null ], [ "osmo_stream_cli_set_addr", "group__stream__cli.html#ga0038e937cf0f36c59e0e3991523219a1", null ], [ "osmo_stream_cli_set_addrs", "group__stream__cli.html#gaab1e7ef0ccc88e124c5f7bbb5e46c29c", null ], [ "osmo_stream_cli_set_connect_cb", "group__stream__cli.html#ga6a7d4b7df43a3f0487d343fe3cd0c6a7", null ], [ "osmo_stream_cli_set_data", "group__stream__cli.html#ga5e94c511d537f63337912bb50fb2dc28", null ], [ "osmo_stream_cli_set_disconnect_cb", "group__stream__cli.html#ga6640b82a47028434455471bb52d9f577", null ], [ "osmo_stream_cli_set_domain", "group__stream__cli.html#ga33ce730fc91ebade9b7188fa220656c6", null ], [ "osmo_stream_cli_set_ip_dscp", "group__stream__cli.html#ga18526a340625c84a69ccc067ce2cda58", null ], [ "osmo_stream_cli_set_local_addr", "group__stream__cli.html#ga70420e7c664cc4c4e69ac4d3476e7f53", null ], [ "osmo_stream_cli_set_local_addrs", "group__stream__cli.html#ga090fc3fcd1706b815ef5a729921c100e", null ], [ "osmo_stream_cli_set_local_port", "group__stream__cli.html#ga4d83e3cf7fdf7eb354c2015ff9bed98a", null ], [ "osmo_stream_cli_set_name", "group__stream__cli.html#gaeb712dc553735736047f9b11d9583baa", null ], [ "osmo_stream_cli_set_nodelay", "group__stream__cli.html#gaa196e78db6ca32abb1473566b4f1b04b", null ], [ "osmo_stream_cli_set_param", "group__stream__cli.html#ga0638e98001fa4bdd36533718472dfac7", null ], [ "osmo_stream_cli_set_port", "group__stream__cli.html#gab8b9f65bebfeb83c6e33d102e9439770", null ], [ "osmo_stream_cli_set_priority", "group__stream__cli.html#gac3ec56e61ce062300ad1df73a5f2c7f8", null ], [ "osmo_stream_cli_set_proto", "group__stream__cli.html#ga91d57aa94a370520540d7272af66a23b", null ], [ "osmo_stream_cli_set_read_cb", "group__stream__cli.html#ga798f23db7e2e1d999775589db8a73d03", null ], [ "osmo_stream_cli_set_read_cb2", "group__stream__cli.html#ga7892eb77d40f08a254f654786d0b996b", null ], [ "osmo_stream_cli_set_reconnect_timeout", "group__stream__cli.html#gade74792afe35f31dd2584c888db3dd62", null ], [ "osmo_stream_cli_set_segmentation_cb", "group__stream__cli.html#gab6094559935824750d82b9164ed76910", null ], [ "osmo_stream_cli_set_segmentation_cb2", "group__stream__cli.html#gaf62f1dbe4570d8ffd00b3bdc3f28d24b", null ], [ "osmo_stream_cli_set_tx_queue_max_length", "group__stream__cli.html#ga889f96540a1a2271a40dee063eaf5e9d", null ], [ "osmo_stream_cli_set_type", "group__stream__cli.html#ga5e5c4c9aacc1cd1d303c0295018594cb", null ], [ "osmo_stream_srv_create", "group__stream__srv.html#ga136b426790b6322f58f89059b88aaa0b", null ], [ "osmo_stream_srv_create2", "group__stream__srv.html#ga8be283e1a143e346b4d6ccf33cbb9b98", null ], [ "osmo_stream_srv_destroy", "group__stream__srv.html#ga47f18e063f64f22cb74d58d8b7243bed", null ], [ "osmo_stream_srv_get_data", "group__stream__srv.html#gae2a0ef01097d964c71e38600b4c078d5", null ], [ "osmo_stream_srv_get_fd", "group__stream__srv.html#ga803c8ba415f66cc1029b3899cc53b807", null ], [ "osmo_stream_srv_get_iofd", "group__stream__srv.html#ga9e00a9172d5b2708afa269d52c118eff", null ], [ "osmo_stream_srv_get_master", "group__stream__srv.html#ga9cf689935bf6ffac4f86f56219d73c8e", null ], [ "osmo_stream_srv_get_name", "group__stream__srv.html#gad34dc0f7ebf7c84653514566e431a1d2", null ], [ "osmo_stream_srv_get_ofd", "group__stream__srv.html#ga47bbca4f12717db2e6158eefe6310b9b", null ], [ "osmo_stream_srv_get_sockname", "group__stream__srv.html#ga4f176a35751509dc741fbd2b52f45b22", null ], [ "osmo_stream_srv_link_close", "group__stream__srv.html#gad325d97b09c724e830c98d76b890520d", null ], [ "osmo_stream_srv_link_create", "group__stream__srv.html#gaad262988c7ac365566f03843c560f892", null ], [ "osmo_stream_srv_link_destroy", "group__stream__srv.html#ga882acaaa5935422b0e09a2ce8c8019ec", null ], [ "osmo_stream_srv_link_get_data", "group__stream__srv.html#gacb5d68c2a6a9663f99266c70747bce04", null ], [ "osmo_stream_srv_link_get_fd", "group__stream__srv.html#gae2ef09bc8da55db30d967563dfc6561a", null ], [ "osmo_stream_srv_link_get_name", "group__stream__srv.html#ga67520942e5a404a0b3a6960b8a161de8", null ], [ "osmo_stream_srv_link_get_ofd", "group__stream__srv.html#ga7b8981351a154c357fcefd39c31ad42a", null ], [ "osmo_stream_srv_link_get_sockname", "group__stream__srv.html#ga7d7b6af7df24e90dc758a088bae6316d", null ], [ "osmo_stream_srv_link_is_opened", "group__stream__srv.html#ga28243be108ed0302b0f5a9d1dfc96b22", null ], [ "osmo_stream_srv_link_open", "group__stream__srv.html#ga603b89074d3e8c0fb44144ab1864f0d4", null ], [ "osmo_stream_srv_link_set_accept_cb", "group__stream__srv.html#ga1eea525d4e1e7a24c9c08881994ceb7e", null ], [ "osmo_stream_srv_link_set_addr", "group__stream__srv.html#gacece90116484e34540def69b05c66f57", null ], [ "osmo_stream_srv_link_set_addrs", "group__stream__srv.html#gaadabca7d23c52c39e291bf7e05f0055b", null ], [ "osmo_stream_srv_link_set_data", "group__stream__srv.html#ga5ef0f0c85a52c08e8c10d36a8f44e392", null ], [ "osmo_stream_srv_link_set_domain", "group__stream__srv.html#ga9629b516297c31f34af48e4630973dab", null ], [ "osmo_stream_srv_link_set_ip_dscp", "group__stream__srv.html#ga53be410e4b8cf79e850b8cd5c01b4c78", null ], [ "osmo_stream_srv_link_set_msgb_alloc_info", "group__stream__srv.html#ga925981abcacca9f9a3375d511309cb32", null ], [ "osmo_stream_srv_link_set_name", "group__stream__srv.html#gadef998825a4739660b198151fcee4201", null ], [ "osmo_stream_srv_link_set_nodelay", "group__stream__srv.html#ga41e8ad2c761aaa00313aa11d1f29a3ed", null ], [ "osmo_stream_srv_link_set_param", "group__stream__srv.html#ga759bceb4ce155f88e3e7817ce4c9449d", null ], [ "osmo_stream_srv_link_set_port", "group__stream__srv.html#ga76bbbafd1d8dc9c9ebffd301503b6dd9", null ], [ "osmo_stream_srv_link_set_priority", "group__stream__srv.html#ga3bfcfe6f09fa8f87dacb7ea215c64bae", null ], [ "osmo_stream_srv_link_set_proto", "group__stream__srv.html#ga2508987133a93863d2a50103004b0f36", null ], [ "osmo_stream_srv_link_set_tx_queue_max_length", "group__stream__srv.html#gad88e9249699c53894cb34c099b5e0c4b", null ], [ "osmo_stream_srv_link_set_type", "group__stream__srv.html#ga1903f9aa2e6f9283ebcf20f573b1d970", null ], [ "osmo_stream_srv_recv", "group__stream__srv.html#gac86242c41223c525c770ff7e7515d83e", null ], [ "osmo_stream_srv_send", "group__stream__srv.html#gaa1589994cf6eab27742cafee6b7fb491", null ], [ "osmo_stream_srv_set_closed_cb", "group__stream__srv.html#gaed83d9686289eee534d77a61b96fbd90", null ], [ "osmo_stream_srv_set_data", "group__stream__srv.html#ga9891663b20714d72f992e44ad1e92eea", null ], [ "osmo_stream_srv_set_flush_and_destroy", "group__stream__srv.html#ga8390ce6740e56eb22215e1c5805c95f1", null ], [ "osmo_stream_srv_set_name", "group__stream__srv.html#ga196834d254fd94922d6be91b7b5b1ed3", null ], [ "osmo_stream_srv_set_read_cb", "group__stream__srv.html#gad0d7b7e236826c52f10a7b4f50009d01", null ], [ "osmo_stream_srv_set_segmentation_cb", "group__stream__srv.html#ga560a6d868bf95bf2f3a4b716bfd5cac9", null ], [ "osmo_stream_srv_set_segmentation_cb2", "group__stream__srv.html#ga348c4560f69403fc3a3dfcbe874c2593", null ] ];html/ipa_8h_source.html0000644000175000017500000005067014752517766014454 0ustar buildbuild libosmo-netif: include/osmocom/netif/ipa.h Source File
    libosmo-netif 1.5.1.34-ada6
    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
    27/* We don't just cast to 'struct osmo_ipa_msgb_cb *', because that would
    28 * break the strict aliasing rule. Casting to a reference to a union with
    29 * a compatible struct member seems to be allowed, though, see:
    30 * N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x,
    31 * Section 6.5, §7 */
    32#define OSMO_IPA_MSGB_CB(__msg) (&((( \
    33 union { \
    34 unsigned long cb; \
    35 struct osmo_ipa_msgb_cb _cb; \
    36 } \
    37 *)&((__msg)->cb[0]))->_cb))
    38
    39#define osmo_ipa_msgb_cb_proto(__x) OSMO_IPA_MSGB_CB(__x)->proto
    40#define osmo_ipa_msgb_cb_proto_ext(__x) OSMO_IPA_MSGB_CB(__x)->proto_ext
    41
    42struct msgb *osmo_ipa_msg_alloc(int headroom);
    43struct msgb *osmo_ipa_ext_msg_alloc(size_t headroom);
    44
    45void osmo_ipa_msg_push_header(struct msgb *msg, uint8_t proto);
    46
    47int osmo_ipa_process_msg(struct msgb *msg);
    48
    49struct osmo_fd;
    50struct tlv_parsed;
    51
    52int osmo_ipa_rcvmsg_base(struct msgb *msg, struct osmo_fd *bfd, int server);
    53int osmo_ipa_parse_unitid(const char *str, struct ipaccess_unit *unit_data);
    54
    55int ipaccess_send_pong(int fd);
    56int ipaccess_send_id_ack(int fd);
    57int ipaccess_send_id_req(int fd);
    58
    59struct osmo_ipa_unit;
    60
    61struct msgb *ipa_cli_id_resp(struct osmo_ipa_unit *dev, uint8_t *data, int len);
    62struct msgb *ipa_cli_id_ack(void);
    63
    64int osmo_ipa_parse_msg_id_resp(struct msgb *msg, struct ipaccess_unit *unit_data);
    65
    66int osmo_ipa_segmentation_cb(struct msgb *msg);
    67
    68void osmo_ipa_msg_push_headers(struct msgb *msg, enum ipaccess_proto p, enum ipaccess_proto_ext pe);
    69
    70/***********************************************************************
    71 * IPA Keep-Alive FSM
    72 ***********************************************************************/
    73struct osmo_ipa_ka_fsm_inst;
    74typedef int (*osmo_ipa_ka_fsm_timeout_cb_t)(struct osmo_ipa_ka_fsm_inst *ka_fi, void *data);
    75
    76typedef int (*osmo_ipa_ka_fsm_send_cb_t)(struct osmo_ipa_ka_fsm_inst *ka_fi, struct msgb *msg, void *data);
    77
    78struct osmo_ipa_ka_fsm_inst *osmo_ipa_ka_fsm_alloc(void *ctx, const char *id);
    79void osmo_ipa_ka_fsm_free(struct osmo_ipa_ka_fsm_inst *ka_fi);
    80
    81int osmo_ipa_ka_fsm_set_id(struct osmo_ipa_ka_fsm_inst *ka_fi, const char *id);
    82int osmo_ipa_ka_fsm_set_ping_interval(struct osmo_ipa_ka_fsm_inst *ka_fi, unsigned int interval);
    83int osmo_ipa_ka_fsm_set_pong_timeout(struct osmo_ipa_ka_fsm_inst *ka_fi, unsigned int timeout);
    84void osmo_ipa_ka_fsm_set_data(struct osmo_ipa_ka_fsm_inst *ka_fi, void *cb_data);
    85void *osmo_ipa_ka_fsm_get_data(const struct osmo_ipa_ka_fsm_inst *ka_fi);
    86
    87void osmo_ipa_ka_fsm_set_send_cb(struct osmo_ipa_ka_fsm_inst *ka_fi, osmo_ipa_ka_fsm_send_cb_t send_cb);
    88void osmo_ipa_ka_fsm_set_timeout_cb(struct osmo_ipa_ka_fsm_inst *ka_fi, osmo_ipa_ka_fsm_timeout_cb_t timeout_cb);
    89
    90void osmo_ipa_ka_fsm_start(struct osmo_ipa_ka_fsm_inst *ka_fi);
    91void osmo_ipa_ka_fsm_pong_received(struct osmo_ipa_ka_fsm_inst *ka_fi);
    92void osmo_ipa_ka_fsm_stop(struct osmo_ipa_ka_fsm_inst *ka_fi);
    93
    94#endif
    Definition: ipa.h:16
    Definition: ipa.h:10
    Definition: ipa.h:21
    html/osmux_8c.js0000644000175000017500000000015214752517766013127 0ustar buildbuildvar osmux_8c = [ [ "osmux_snprintf", "group__osmux.html#gaf654e092ca97dd764f59905a2ed21650", null ] ];html/structosmo__ipa__msgb__cb.html0000644000175000017500000001207414752517766017104 0ustar buildbuild libosmo-netif: osmo_ipa_msgb_cb Struct Reference
    libosmo-netif 1.5.1.34-ada6
    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/stream__srv_8c.js0000644000175000017500000001127614752517766014311 0ustar buildbuildvar stream__srv_8c = [ [ "osmo_stream_srv_create", "group__stream__srv.html#ga136b426790b6322f58f89059b88aaa0b", null ], [ "osmo_stream_srv_create2", "group__stream__srv.html#ga8be283e1a143e346b4d6ccf33cbb9b98", null ], [ "osmo_stream_srv_destroy", "group__stream__srv.html#ga47f18e063f64f22cb74d58d8b7243bed", null ], [ "osmo_stream_srv_get_data", "group__stream__srv.html#gae2a0ef01097d964c71e38600b4c078d5", null ], [ "osmo_stream_srv_get_fd", "group__stream__srv.html#ga803c8ba415f66cc1029b3899cc53b807", null ], [ "osmo_stream_srv_get_iofd", "group__stream__srv.html#ga9e00a9172d5b2708afa269d52c118eff", null ], [ "osmo_stream_srv_get_master", "group__stream__srv.html#ga9cf689935bf6ffac4f86f56219d73c8e", null ], [ "osmo_stream_srv_get_name", "group__stream__srv.html#gad34dc0f7ebf7c84653514566e431a1d2", null ], [ "osmo_stream_srv_get_ofd", "group__stream__srv.html#ga47bbca4f12717db2e6158eefe6310b9b", null ], [ "osmo_stream_srv_get_sockname", "group__stream__srv.html#ga4f176a35751509dc741fbd2b52f45b22", null ], [ "osmo_stream_srv_link_close", "group__stream__srv.html#gad325d97b09c724e830c98d76b890520d", null ], [ "osmo_stream_srv_link_create", "group__stream__srv.html#gaad262988c7ac365566f03843c560f892", null ], [ "osmo_stream_srv_link_destroy", "group__stream__srv.html#ga882acaaa5935422b0e09a2ce8c8019ec", null ], [ "osmo_stream_srv_link_get_data", "group__stream__srv.html#gacb5d68c2a6a9663f99266c70747bce04", null ], [ "osmo_stream_srv_link_get_fd", "group__stream__srv.html#gae2ef09bc8da55db30d967563dfc6561a", null ], [ "osmo_stream_srv_link_get_name", "group__stream__srv.html#ga67520942e5a404a0b3a6960b8a161de8", null ], [ "osmo_stream_srv_link_get_ofd", "group__stream__srv.html#ga7b8981351a154c357fcefd39c31ad42a", null ], [ "osmo_stream_srv_link_get_sockname", "group__stream__srv.html#ga7d7b6af7df24e90dc758a088bae6316d", null ], [ "osmo_stream_srv_link_is_opened", "group__stream__srv.html#ga28243be108ed0302b0f5a9d1dfc96b22", null ], [ "osmo_stream_srv_link_open", "group__stream__srv.html#ga603b89074d3e8c0fb44144ab1864f0d4", null ], [ "osmo_stream_srv_link_set_accept_cb", "group__stream__srv.html#ga1eea525d4e1e7a24c9c08881994ceb7e", null ], [ "osmo_stream_srv_link_set_addr", "group__stream__srv.html#gacece90116484e34540def69b05c66f57", null ], [ "osmo_stream_srv_link_set_addrs", "group__stream__srv.html#gaadabca7d23c52c39e291bf7e05f0055b", null ], [ "osmo_stream_srv_link_set_data", "group__stream__srv.html#ga5ef0f0c85a52c08e8c10d36a8f44e392", null ], [ "osmo_stream_srv_link_set_domain", "group__stream__srv.html#ga9629b516297c31f34af48e4630973dab", null ], [ "osmo_stream_srv_link_set_ip_dscp", "group__stream__srv.html#ga53be410e4b8cf79e850b8cd5c01b4c78", null ], [ "osmo_stream_srv_link_set_msgb_alloc_info", "group__stream__srv.html#ga925981abcacca9f9a3375d511309cb32", null ], [ "osmo_stream_srv_link_set_name", "group__stream__srv.html#gadef998825a4739660b198151fcee4201", null ], [ "osmo_stream_srv_link_set_nodelay", "group__stream__srv.html#ga41e8ad2c761aaa00313aa11d1f29a3ed", null ], [ "osmo_stream_srv_link_set_param", "group__stream__srv.html#ga759bceb4ce155f88e3e7817ce4c9449d", null ], [ "osmo_stream_srv_link_set_port", "group__stream__srv.html#ga76bbbafd1d8dc9c9ebffd301503b6dd9", null ], [ "osmo_stream_srv_link_set_priority", "group__stream__srv.html#ga3bfcfe6f09fa8f87dacb7ea215c64bae", null ], [ "osmo_stream_srv_link_set_proto", "group__stream__srv.html#ga2508987133a93863d2a50103004b0f36", null ], [ "osmo_stream_srv_link_set_tx_queue_max_length", "group__stream__srv.html#gad88e9249699c53894cb34c099b5e0c4b", null ], [ "osmo_stream_srv_link_set_type", "group__stream__srv.html#ga1903f9aa2e6f9283ebcf20f573b1d970", null ], [ "osmo_stream_srv_recv", "group__stream__srv.html#gac86242c41223c525c770ff7e7515d83e", null ], [ "osmo_stream_srv_send", "group__stream__srv.html#gaa1589994cf6eab27742cafee6b7fb491", null ], [ "osmo_stream_srv_set_closed_cb", "group__stream__srv.html#gaed83d9686289eee534d77a61b96fbd90", null ], [ "osmo_stream_srv_set_data", "group__stream__srv.html#ga9891663b20714d72f992e44ad1e92eea", null ], [ "osmo_stream_srv_set_flush_and_destroy", "group__stream__srv.html#ga8390ce6740e56eb22215e1c5805c95f1", null ], [ "osmo_stream_srv_set_name", "group__stream__srv.html#ga196834d254fd94922d6be91b7b5b1ed3", null ], [ "osmo_stream_srv_set_read_cb", "group__stream__srv.html#gad0d7b7e236826c52f10a7b4f50009d01", null ], [ "osmo_stream_srv_set_segmentation_cb", "group__stream__srv.html#ga560a6d868bf95bf2f3a4b716bfd5cac9", null ], [ "osmo_stream_srv_set_segmentation_cb2", "group__stream__srv.html#ga348c4560f69403fc3a3dfcbe874c2593", null ] ];html/osmux__output_8c.js0000644000175000017500000000164714752517766014720 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_init", "group__osmux.html#ga90d58246bcd24a6126898cd6c47dddf4", null ], [ "osmux_xfrm_output_init2", "group__osmux.html#gaa076e54fa0d249721a4c7b174a8ed2d1", 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.html0000644000175000017500000020325314752517766015054 0ustar buildbuild libosmo-netif: Osmocom Datagram Socket
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
    Osmocom Datagram Socket

    This code is intended to abstract any use of datagram type sockets, such as UDP. More...

    Files

    file  datagram.h
     Osmocom datagram socket helpers.
     
    file  datagram.c
     Osmocom datagram socket helpers.
     

    Functions

    struct osmo_dgram_tx * osmo_dgram_tx_create (void *ctx)
     Create an Osmocom datagram transmitter. More...
     
    void osmo_dgram_tx_destroy (struct osmo_dgram_tx *conn)
     Destroy a 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...
     
    int osmo_dgram_tx_open (struct osmo_dgram_tx *conn)
     Open connection of an Osmocom datagram transmitter. More...
     
    void osmo_dgram_tx_close (struct osmo_dgram_tx *conn)
     Close 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...
     
    struct osmo_dgram_rx * osmo_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. More...
     
    int osmo_dgram_rx_open (struct osmo_dgram_rx *conn)
     Open the datagram receiver. 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...
     
    int osmo_dgram_rx_recv (struct osmo_dgram_rx *conn, struct msgb *msg)
     Receive data via Osmocom datagram receiver. More...
     
    struct osmo_dgram * osmo_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...
     
    int osmo_dgram_open (struct osmo_dgram *conn)
     Open the datagram transceiver. More...
     
    void osmo_dgram_close (struct osmo_dgram *conn)
     Close an 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...
     
    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/deprecated.html0000644000175000017500000001374014752517766014021 0ustar buildbuild libosmo-netif: Deprecated List
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
    Deprecated List
    Global osmux_xfrm_input_fini (struct osmux_in_handle *h) OSMO_DEPRECATED("Use talloc_free() instead")
    : Use talloc_free() instead (will call osmux_xfrm_input_talloc_destructor())
    Global osmux_xfrm_input_init (struct osmux_in_handle *h) OSMO_DEPRECATED("Use osmux_xfrm_input_alloc() instead")
    : Use osmux_xfrm_input_alloc() instead
    Global 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")
    : Use osmux_xfrm_output_alloc() and osmux_xfrm_output_set_rtp_*() instead
    Global 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")
    : Use osmux_xfrm_output_alloc() and osmux_xfrm_output_set_rtp_*() instead
    html/osmux__output_8c.html0000644000175000017500000003247714752517766015255 0ustar buildbuild libosmo-netif: src/osmux_output.c File Reference
    libosmo-netif 1.5.1.34-ada6
    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>

    Macros

    #define DELTA_RTP_MSG   20000
     
    #define DELTA_RTP_TIMESTAMP   160
     

    Functions

    struct osmux_hdrosmux_xfrm_output_pull (struct msgb *msg)
     
    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_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.js0000644000175000017500000000142114752517766013060 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.html0000644000175000017500000025117114752517766015175 0ustar buildbuild libosmo-netif: include/osmocom/netif/stream.h Source File
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
    stream.h
    Go to the documentation of this file.
    1#pragma once
    2
    3#include <stdbool.h>
    4#include <stdint.h>
    5#include <unistd.h>
    6
    7#include <osmocom/core/msgb.h>
    8
    12#define OSMO_STREAM_SCTP_MSG_FLAGS_NOTIFICATION 0x80 /* sctp_recvmsg() flags=MSG_NOTIFICATION, msgb_data() contains "union sctp_notification*" */
    13#define msgb_sctp_msg_flags(msg) (msg)->cb[2]
    14
    16#define msgb_sctp_ppid(msg) (msg)->cb[3]
    18#define msgb_sctp_stream(msg) (msg)->cb[4]
    19
    66struct osmo_stream_srv_link;
    67
    68typedef int (*osmo_stream_srv_link_accept_cb_t)(struct osmo_stream_srv_link *link, int fd);
    69
    70struct osmo_stream_srv_link *osmo_stream_srv_link_create(void *ctx);
    71void osmo_stream_srv_link_destroy(struct osmo_stream_srv_link *link);
    72
    73void osmo_stream_srv_link_set_name(struct osmo_stream_srv_link *link, const char *name);
    74const char *osmo_stream_srv_link_get_name(const struct osmo_stream_srv_link *link);
    75void osmo_stream_srv_link_set_nodelay(struct osmo_stream_srv_link *link, bool nodelay);
    76int osmo_stream_srv_link_set_priority(struct osmo_stream_srv_link *link, int sk_prio);
    77int osmo_stream_srv_link_set_ip_dscp(struct osmo_stream_srv_link *link, uint8_t ip_dscp);
    78void osmo_stream_srv_link_set_addr(struct osmo_stream_srv_link *link, const char *addr);
    79int osmo_stream_srv_link_set_addrs(struct osmo_stream_srv_link *link, const char **addr, size_t addrcnt);
    80void osmo_stream_srv_link_set_port(struct osmo_stream_srv_link *link, uint16_t port);
    81void osmo_stream_srv_link_set_proto(struct osmo_stream_srv_link *link, uint16_t proto);
    82int osmo_stream_srv_link_set_type(struct osmo_stream_srv_link *link, int type);
    83int osmo_stream_srv_link_set_domain(struct osmo_stream_srv_link *link, int domain);
    84void osmo_stream_srv_link_set_accept_cb(struct osmo_stream_srv_link *link, osmo_stream_srv_link_accept_cb_t accept_cb);
    85void osmo_stream_srv_link_set_data(struct osmo_stream_srv_link *link, void *data);
    86void *osmo_stream_srv_link_get_data(struct osmo_stream_srv_link *link);
    87int osmo_stream_srv_link_set_tx_queue_max_length(struct osmo_stream_srv_link *link, unsigned int size);
    88char *osmo_stream_srv_link_get_sockname(const struct osmo_stream_srv_link *link);
    89struct osmo_fd *osmo_stream_srv_link_get_ofd(struct osmo_stream_srv_link *link);
    90int osmo_stream_srv_link_get_fd(const struct osmo_stream_srv_link *link);
    91int osmo_stream_srv_link_set_msgb_alloc_info(struct osmo_stream_srv_link *link, unsigned int size, unsigned int headroom);
    92bool osmo_stream_srv_link_is_opened(const struct osmo_stream_srv_link *link);
    93int osmo_stream_srv_link_open(struct osmo_stream_srv_link *link);
    94void osmo_stream_srv_link_close(struct osmo_stream_srv_link *link);
    95
    96enum osmo_stream_srv_link_param {
    97 OSMO_STREAM_SRV_LINK_PAR_SCTP_SOCKOPT_AUTH_SUPPORTED, /* uint8_t: 0 disable, 1 enable, 2 force disable, 3 force enable */
    98 OSMO_STREAM_SRV_LINK_PAR_SCTP_SOCKOPT_ASCONF_SUPPORTED, /* uint8_t: 0 disable, 1 enable, 2 force disable, 3 force enable */
    99 OSMO_STREAM_SRV_LINK_PAR_SCTP_INIT_NUM_OSTREAMS, /* uint16_t: amount of streams */
    100 OSMO_STREAM_SRV_LINK_PAR_SCTP_INIT_MAX_INSTREAMS, /* uint16_t: amount of streams */
    101};
    102
    103int osmo_stream_srv_link_set_param(struct osmo_stream_srv_link *link, enum osmo_stream_srv_link_param par,
    104 void *val, size_t val_len);
    105
    108struct osmo_stream_srv;
    109
    110typedef int (*osmo_stream_srv_read_cb_t)(struct osmo_stream_srv *conn);
    111typedef int (*osmo_stream_srv_closed_cb_t)(struct osmo_stream_srv *conn);
    112
    118typedef int (*osmo_stream_srv_read_cb2_t)(struct osmo_stream_srv *conn, int res, struct msgb *msg);
    119
    120typedef int (*osmo_stream_srv_segmentation_cb_t)(struct msgb *msg);
    121typedef int (*osmo_stream_srv_segmentation_cb2_t)(struct osmo_stream_srv *conn, struct msgb *msg);
    122
    123struct osmo_stream_srv *osmo_stream_srv_create(void *ctx, struct osmo_stream_srv_link *link, int fd,
    124 osmo_stream_srv_read_cb_t read_cb,
    125 osmo_stream_srv_closed_cb_t closed_cb,
    126 void *data);
    127struct osmo_stream_srv *osmo_stream_srv_create2(void *ctx, struct osmo_stream_srv_link *link, int fd, void *data);
    128void osmo_stream_srv_set_name(struct osmo_stream_srv *conn, const char *name);
    129const char *osmo_stream_srv_get_name(const struct osmo_stream_srv *conn);
    130void osmo_stream_srv_set_read_cb(struct osmo_stream_srv *conn, osmo_stream_srv_read_cb2_t read_cb);
    131void osmo_stream_srv_set_closed_cb(struct osmo_stream_srv *conn, osmo_stream_srv_closed_cb_t close_cb);
    132void *osmo_stream_srv_get_data(struct osmo_stream_srv *conn);
    133struct osmo_stream_srv_link *osmo_stream_srv_get_master(struct osmo_stream_srv *conn);
    134const char *osmo_stream_srv_get_sockname(const struct osmo_stream_srv *conn);
    135struct osmo_fd *osmo_stream_srv_get_ofd(struct osmo_stream_srv *srv);
    136int osmo_stream_srv_get_fd(const struct osmo_stream_srv *srv);
    137struct osmo_io_fd *osmo_stream_srv_get_iofd(const struct osmo_stream_srv *srv);
    138void osmo_stream_srv_destroy(struct osmo_stream_srv *conn);
    139
    140void osmo_stream_srv_set_flush_and_destroy(struct osmo_stream_srv *conn);
    141void osmo_stream_srv_set_data(struct osmo_stream_srv *conn, void *data);
    142
    143void osmo_stream_srv_set_segmentation_cb(struct osmo_stream_srv *conn, osmo_stream_srv_segmentation_cb_t segmentation_cb);
    144void osmo_stream_srv_set_segmentation_cb2(struct osmo_stream_srv *conn, osmo_stream_srv_segmentation_cb2_t segmentation_cb2);
    145
    146void osmo_stream_srv_send(struct osmo_stream_srv *conn, struct msgb *msg);
    147int osmo_stream_srv_recv(struct osmo_stream_srv *conn, struct msgb *msg);
    148
    149void osmo_stream_srv_clear_tx_queue(struct osmo_stream_srv *conn);
    150
    189struct osmo_stream_cli;
    190
    191typedef int (*osmo_stream_cli_connect_cb_t)(struct osmo_stream_cli *cli);
    192typedef int (*osmo_stream_cli_disconnect_cb_t)(struct osmo_stream_cli *cli);
    193typedef int (*osmo_stream_cli_read_cb_t)(struct osmo_stream_cli *cli);
    194
    200typedef int (*osmo_stream_cli_read_cb2_t)(struct osmo_stream_cli *cli, int res, struct msgb *msg);
    201
    202typedef int (*osmo_stream_cli_segmentation_cb_t)(struct msgb *msg);
    203typedef int (*osmo_stream_cli_segmentation_cb2_t)(struct osmo_stream_cli *cli, struct msgb *msg);
    204
    205void osmo_stream_cli_set_name(struct osmo_stream_cli *cli, const char *name);
    206const char *osmo_stream_cli_get_name(const struct osmo_stream_cli *cli);
    207void osmo_stream_cli_set_nodelay(struct osmo_stream_cli *cli, bool nodelay);
    208int osmo_stream_cli_set_priority(struct osmo_stream_cli *cli, int sk_prio);
    209int osmo_stream_cli_set_ip_dscp(struct osmo_stream_cli *cli, uint8_t ip_dscp);
    210void osmo_stream_cli_set_addr(struct osmo_stream_cli *cli, const char *addr);
    211int osmo_stream_cli_set_addrs(struct osmo_stream_cli *cli, const char **addr, size_t addrcnt);
    212void osmo_stream_cli_set_port(struct osmo_stream_cli *cli, uint16_t port);
    213int osmo_stream_cli_set_type(struct osmo_stream_cli *cli, int type);
    214int osmo_stream_cli_set_domain(struct osmo_stream_cli *cli, int domain);
    215void osmo_stream_cli_set_proto(struct osmo_stream_cli *cli, uint16_t proto);
    216void osmo_stream_cli_set_local_addr(struct osmo_stream_cli *cli, const char *addr);
    217int osmo_stream_cli_set_local_addrs(struct osmo_stream_cli *cli, const char **addr, size_t addrcnt);
    218void osmo_stream_cli_set_local_port(struct osmo_stream_cli *cli, uint16_t port);
    219void osmo_stream_cli_set_data(struct osmo_stream_cli *cli, void *data);
    220void osmo_stream_cli_set_reconnect_timeout(struct osmo_stream_cli *cli, int timeout);
    221void *osmo_stream_cli_get_data(struct osmo_stream_cli *cli);
    222int osmo_stream_cli_set_tx_queue_max_length(struct osmo_stream_cli *cli, unsigned int size);
    223char *osmo_stream_cli_get_sockname(const struct osmo_stream_cli *cli);
    224struct osmo_fd *osmo_stream_cli_get_ofd(struct osmo_stream_cli *cli);
    225int osmo_stream_cli_get_fd(const struct osmo_stream_cli *cli);
    226struct osmo_io_fd *osmo_stream_cli_get_iofd(const struct osmo_stream_cli *cli);
    227void osmo_stream_cli_set_connect_cb(struct osmo_stream_cli *cli, osmo_stream_cli_connect_cb_t connect_cb);
    228void osmo_stream_cli_set_disconnect_cb(struct osmo_stream_cli *cli, osmo_stream_cli_disconnect_cb_t disconnect_cb);
    229void osmo_stream_cli_set_read_cb(struct osmo_stream_cli *cli, osmo_stream_cli_read_cb_t read_cb);
    230void osmo_stream_cli_set_read_cb2(struct osmo_stream_cli *cli, osmo_stream_cli_read_cb2_t read_cb);
    231void osmo_stream_cli_set_segmentation_cb(struct osmo_stream_cli *cli, osmo_stream_cli_segmentation_cb_t segmentation_cb);
    232void osmo_stream_cli_set_segmentation_cb2(struct osmo_stream_cli *cli, osmo_stream_cli_segmentation_cb2_t segmentation_cb2);
    233void osmo_stream_cli_reconnect(struct osmo_stream_cli *cli);
    234bool osmo_stream_cli_is_connected(struct osmo_stream_cli *cli);
    235
    236struct osmo_stream_cli *osmo_stream_cli_create(void *ctx);
    237void osmo_stream_cli_destroy(struct osmo_stream_cli *cli);
    238
    239int osmo_stream_cli_open(struct osmo_stream_cli *cli);
    240int osmo_stream_cli_open2(struct osmo_stream_cli *cli, int reconnect) \
    241 OSMO_DEPRECATED("Use osmo_stream_cli_set_reconnect_timeout() or osmo_stream_cli_reconnect() instead");
    242void osmo_stream_cli_close(struct osmo_stream_cli *cli);
    243
    244void osmo_stream_cli_send(struct osmo_stream_cli *cli, struct msgb *msg);
    245int osmo_stream_cli_recv(struct osmo_stream_cli *cli, struct msgb *msg);
    246
    247void osmo_stream_cli_clear_tx_queue(struct osmo_stream_cli *cli);
    248
    249enum osmo_stream_cli_param {
    250 OSMO_STREAM_CLI_PAR_SCTP_SOCKOPT_AUTH_SUPPORTED, /* uint8_t: 0 disable, 1 enable, 2 force disable, 3 force enable */
    251 OSMO_STREAM_CLI_PAR_SCTP_SOCKOPT_ASCONF_SUPPORTED, /* uint8_t: 0 disable, 1 enable, 2 force disable, 3 force enable */
    252 OSMO_STREAM_CLI_PAR_SCTP_INIT_NUM_OSTREAMS, /* uint16_t: amount of streams */
    253 OSMO_STREAM_CLI_PAR_SCTP_INIT_MAX_INSTREAMS, /* uint16_t: amount of streams */
    254 OSMO_STREAM_CLI_PAR_SCTP_INIT_MAX_ATTEMPTS, /* uint16_t: amount of attempts */
    255 OSMO_STREAM_CLI_PAR_SCTP_INIT_TIMEOUT, /* uint16_t: milliseconds */
    256};
    257
    258int osmo_stream_cli_set_param(struct osmo_stream_cli *cli, enum osmo_stream_cli_param par,
    259 void *val, size_t val_len);
    260
    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:690
    struct osmo_fd * osmo_stream_cli_get_ofd(struct osmo_stream_cli *cli)
    Retrieve Osmocom File Descriptor of the stream client socket.
    Definition: stream_cli.c:962
    int osmo_stream_cli_set_param(struct osmo_stream_cli *cli, enum osmo_stream_cli_param par, void *val, size_t val_len)
    Set given parameter of stream client to given value.
    Definition: stream_cli.c:1463
    int osmo_stream_cli_recv(struct osmo_stream_cli *cli, struct msgb *msg)
    Receive data via an Osmocom stream client in osmo_fd mode.
    Definition: stream_cli.c:1383
    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 bind.
    Definition: stream_cli.c:763
    const char * osmo_stream_cli_get_name(const struct osmo_stream_cli *cli)
    Retrieve name previously set on the cli object (see osmo_stream_cli_set_name()).
    Definition: stream_cli.c:679
    int(* osmo_stream_cli_read_cb2_t)(struct osmo_stream_cli *cli, int res, struct msgb *msg)
    Completion call-back function when something was read from from the stream client socket.
    Definition: stream.h:200
    void osmo_stream_cli_reconnect(struct osmo_stream_cli *cli)
    Re-connect an Osmocom Stream Client.
    Definition: stream_cli.c:253
    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:1048
    struct osmo_stream_cli * osmo_stream_cli_create(void *ctx)
    Create an Osmocom stream client.
    Definition: stream_cli.c:499
    int osmo_stream_cli_set_ip_dscp(struct osmo_stream_cli *cli, uint8_t ip_dscp)
    Set the DSCP (differentiated services code point) of the stream socket.
    Definition: stream_cli.c:1173
    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:882
    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:739
    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:862
    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:911
    void * osmo_stream_cli_get_data(struct osmo_stream_cli *cli)
    Retrieve application private data of the stream client socket.
    Definition: stream_cli.c:919
    void osmo_stream_cli_set_disconnect_cb(struct osmo_stream_cli *cli, osmo_stream_cli_disconnect_cb_t disconnect_cb)
    Set the call-back function called on disconnect of the stream client socket.
    Definition: stream_cli.c:983
    void osmo_stream_cli_set_connect_cb(struct osmo_stream_cli *cli, osmo_stream_cli_connect_cb_t connect_cb)
    Set the call-back function called on connect of the stream client socket.
    Definition: stream_cli.c:974
    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:751
    void osmo_stream_cli_set_read_cb2(struct osmo_stream_cli *cli, osmo_stream_cli_read_cb2_t read_cb)
    Set the call-back function called to read from the stream client socket.
    Definition: stream_cli.c:1007
    void osmo_stream_cli_set_read_cb(struct osmo_stream_cli *cli, osmo_stream_cli_read_cb_t read_cb)
    Set the call-back function called to read from the stream client socket.
    Definition: stream_cli.c:994
    bool osmo_stream_cli_is_connected(struct osmo_stream_cli *cli)
    Check if Osmocom Stream Client is in connected state.
    Definition: stream_cli.c:262
    int osmo_stream_cli_open(struct osmo_stream_cli *cli)
    Open connection of an Osmocom stream client.
    Definition: stream_cli.c:1202
    int osmo_stream_cli_set_tx_queue_max_length(struct osmo_stream_cli *cli, unsigned int size)
    Set the maximum length queue of the stream client.
    Definition: stream_cli.c:930
    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:788
    void osmo_stream_cli_destroy(struct osmo_stream_cli *cli)
    Destroy a Osmocom stream client (includes close).
    Definition: stream_cli.c:1017
    void osmo_stream_cli_set_nodelay(struct osmo_stream_cli *cli, bool nodelay)
    Set the NODELAY socket option to avoid Nagle-like behavior.
    Definition: stream_cli.c:1113
    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.
    Definition: stream_cli.c:702
    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:1326
    void osmo_stream_cli_set_segmentation_cb(struct osmo_stream_cli *cli, osmo_stream_cli_segmentation_cb_t segmentation_cb)
    Set the segmentation callback for the client.
    Definition: stream_cli.c:830
    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:727
    struct osmo_io_fd * osmo_stream_cli_get_iofd(const struct osmo_stream_cli *cli)
    Retrieve osmo_io descriptor of the stream client socket.
    Definition: stream_cli.c:302
    int osmo_stream_cli_set_priority(struct osmo_stream_cli *cli, int sk_prio)
    Set the priority value of the stream socket.
    Definition: stream_cli.c:1142
    void osmo_stream_cli_close(struct osmo_stream_cli *cli)
    Close an Osmocom Stream Client.
    Definition: stream_cli.c:221
    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:902
    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:668
    char * osmo_stream_cli_get_sockname(const struct osmo_stream_cli *cli)
    Retrieve the stream client socket description.
    Definition: stream_cli.c:947
    void osmo_stream_cli_set_segmentation_cb2(struct osmo_stream_cli *cli, osmo_stream_cli_segmentation_cb2_t segmentation_cb2)
    Set the segmentation callback for the client.
    Definition: stream_cli.c:847
    void osmo_stream_cli_clear_tx_queue(struct osmo_stream_cli *cli)
    Clear the transmit queue of the stream client.
    Definition: stream_cli.c:1438
    int osmo_stream_cli_get_fd(const struct osmo_stream_cli *cli)
    Retrieve file descriptor of the stream client socket.
    Definition: stream_cli.c:282
    struct osmo_stream_srv * osmo_stream_srv_create(void *ctx, struct osmo_stream_srv_link *link, int fd, osmo_stream_srv_read_cb_t read_cb, osmo_stream_srv_closed_cb_t closed_cb, void *data)
    Create a legacy osmo_fd mode Stream Server inside the specified link.
    Definition: stream_srv.c:921
    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:355
    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:1012
    void osmo_stream_srv_link_set_accept_cb(struct osmo_stream_srv_link *link, osmo_stream_srv_link_accept_cb_t accept_cb)
    Set the accept() call-back of the stream server link.
    Definition: stream_srv.c:512
    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:341
    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:606
    void osmo_stream_srv_set_segmentation_cb2(struct osmo_stream_srv *conn, osmo_stream_srv_segmentation_cb2_t segmentation_cb2)
    Set the segmentation callback for target osmo_stream_srv structure.
    Definition: stream_srv.c:1137
    int osmo_stream_srv_link_set_priority(struct osmo_stream_srv_link *link, int sk_prio)
    Set the priority value of the stream socket.
    Definition: stream_srv.c:267
    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.
    Definition: stream_srv.c:251
    struct osmo_fd * osmo_stream_srv_get_ofd(struct osmo_stream_srv *srv)
    Retrieve Osmocom File Descriptor of a stream server in osmo_fd mode.
    Definition: stream_srv.c:1174
    void osmo_stream_srv_destroy(struct osmo_stream_srv *conn)
    Destroy given Stream Server.
    Definition: stream_srv.c:1222
    const char * osmo_stream_srv_get_sockname(const struct osmo_stream_srv *conn)
    Retrieve the stream server socket description.
    Definition: stream_srv.c:1160
    int osmo_stream_srv_link_set_ip_dscp(struct osmo_stream_srv_link *link, uint8_t ip_dscp)
    Set the DSCP (differentiated services code point) of the stream socket.
    Definition: stream_srv.c:280
    void osmo_stream_srv_set_segmentation_cb(struct osmo_stream_srv *conn, osmo_stream_srv_segmentation_cb_t segmentation_cb)
    Set the segmentation callback for target osmo_stream_srv structure.
    Definition: stream_srv.c:1118
    int(* osmo_stream_srv_read_cb2_t)(struct osmo_stream_srv *conn, int res, struct msgb *msg)
    Completion call-back function when something was read from from the stream client socket.
    Definition: stream.h:118
    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:395
    int osmo_stream_srv_link_open(struct osmo_stream_srv_link *link)
    Open the stream server link.
    Definition: stream_srv.c:553
    const char * osmo_stream_srv_link_get_name(const struct osmo_stream_srv_link *link)
    Retrieve name previously set on the srv_link object (see osmo_stream_srv_link_set_name()).
    Definition: stream_srv.c:239
    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)
    Set given parameter of stream_srv_link to given value.
    Definition: stream_srv.c:636
    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:328
    struct osmo_fd * osmo_stream_srv_link_get_ofd(struct osmo_stream_srv_link *link)
    Retrieve Osmocom File Descriptor of the stream server link.
    Definition: stream_srv.c:493
    char * osmo_stream_srv_link_get_sockname(const struct osmo_stream_srv_link *link)
    Retrieve description of the stream server link e.
    Definition: stream_srv.c:480
    int osmo_stream_srv_get_fd(const struct osmo_stream_srv *srv)
    Retrieve File Descriptor of the stream server.
    Definition: stream_srv.c:1184
    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.
    Definition: stream_srv.c:1062
    void osmo_stream_srv_link_destroy(struct osmo_stream_srv_link *link)
    Destroy the stream server link.
    Definition: stream_srv.c:541
    struct osmo_stream_srv * osmo_stream_srv_create2(void *ctx, struct osmo_stream_srv_link *link, int fd, void *data)
    Create an osmo_iofd mode Stream Server inside the specified link.
    Definition: stream_srv.c:964
    int osmo_stream_srv_link_set_msgb_alloc_info(struct osmo_stream_srv_link *link, unsigned int size, unsigned int headroom)
    Set the msgb allocation parameters on child osmo_stream_srv objects.
    Definition: stream_srv.c:527
    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:375
    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:1071
    struct osmo_stream_srv_link * osmo_stream_srv_get_master(struct osmo_stream_srv *conn)
    Retrieve the master (Link) from a Stream Server.
    Definition: stream_srv.c:1212
    struct osmo_io_fd * osmo_stream_srv_get_iofd(const struct osmo_stream_srv *srv)
    Retrieve osmo_io descriptor of the stream server socket.
    Definition: stream_srv.c:1203
    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:1250
    struct osmo_stream_srv_link * osmo_stream_srv_link_create(void *ctx)
    Create an Osmocom Stream Server Link.
    Definition: stream_srv.c:206
    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.
    Definition: stream_srv.c:304
    int osmo_stream_srv_recv(struct osmo_stream_srv *conn, struct msgb *msg)
    Receive data via an Osmocom stream server in osmo_fd mode.
    Definition: stream_srv.c:1304
    void * osmo_stream_srv_link_get_data(struct osmo_stream_srv_link *link)
    Retrieve application private data of the stream server link.
    Definition: stream_srv.c:404
    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:291
    void osmo_stream_srv_set_read_cb(struct osmo_stream_srv *conn, osmo_stream_srv_read_cb2_t read_cb)
    Set the call-back function for incoming data on an osmo_io stream_srv.
    Definition: stream_srv.c:1037
    void osmo_stream_srv_link_close(struct osmo_stream_srv_link *link)
    Close the stream server link and unregister from select loop.
    Definition: stream_srv.c:620
    const char * osmo_stream_srv_get_name(const struct osmo_stream_srv *conn)
    Retrieve name previously set on the srv object (see osmo_stream_srv_set_name()).
    Definition: stream_srv.c:1023
    int osmo_stream_srv_link_set_tx_queue_max_length(struct osmo_stream_srv_link *link, unsigned int size)
    Set the maximum length queue of the stream servers accepted and allocated from this server link.
    Definition: stream_srv.c:415
    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:230
    void * osmo_stream_srv_get_data(struct osmo_stream_srv *conn)
    Retrieve application private data of the stream server.
    Definition: stream_srv.c:1151
    int osmo_stream_srv_link_get_fd(const struct osmo_stream_srv_link *link)
    Retrieve File Descriptor of the stream server link.
    Definition: stream_srv.c:501
    void osmo_stream_srv_set_closed_cb(struct osmo_stream_srv *conn, osmo_stream_srv_closed_cb_t close_cb)
    Set the call-back function called when the stream server socket was closed.
    Definition: stream_srv.c:1050
    html/osmux_8h.js0000644000175000017500000000255714752517766013147 0ustar buildbuildvar osmux_8h = [ [ "osmux_snprintf", "group__osmux.html#gaf654e092ca97dd764f59905a2ed21650", null ], [ "osmux_xfrm_input", "group__osmux.html#ga9c7d30c0d7d9bc0caf744799d629d4cc", null ], [ "osmux_xfrm_input_alloc", "group__osmux.html#gad61cdde332496df6d7350d147e50b8be", null ], [ "osmux_xfrm_input_fini", "group__osmux.html#ga13655a3bdc68f5e96ad1fe1c03dc235e", null ], [ "osmux_xfrm_input_init", "group__osmux.html#ga96230b0431d5d4d91f2dd57a9c85c366", null ], [ "osmux_xfrm_output_alloc", "group__osmux.html#ga41a217bffa1b0ac095c98ab0fab82c25", null ], [ "osmux_xfrm_output_flush", "group__osmux.html#gaaac410425f6470396ae9db53ebb8dc44", null ], [ "osmux_xfrm_output_init", "group__osmux.html#ga90d58246bcd24a6126898cd6c47dddf4", null ], [ "osmux_xfrm_output_init2", "group__osmux.html#gaa076e54fa0d249721a4c7b174a8ed2d1", 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/datagram_8h.html0000644000175000017500000006250214752517766014100 0ustar buildbuild libosmo-netif: include/osmocom/netif/datagram.h File Reference
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
    datagram.h File Reference

    Osmocom datagram socket helpers. More...

    Go to the source code of this file.

    Functions

    struct osmo_dgram_tx * osmo_dgram_tx_create (void *ctx)
     Create an Osmocom datagram transmitter. More...
     
    void osmo_dgram_tx_destroy (struct osmo_dgram_tx *conn)
     Destroy a 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...
     
    int osmo_dgram_tx_open (struct osmo_dgram_tx *conn)
     Open connection of an Osmocom datagram transmitter. More...
     
    void osmo_dgram_tx_close (struct osmo_dgram_tx *conn)
     Close 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...
     
    struct osmo_dgram_rx * osmo_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. More...
     
    int osmo_dgram_rx_open (struct osmo_dgram_rx *conn)
     Open the datagram receiver. 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...
     
    int osmo_dgram_rx_recv (struct osmo_dgram_rx *conn, struct msgb *msg)
     Receive data via Osmocom datagram receiver. More...
     
    struct osmo_dgram * osmo_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...
     
    int osmo_dgram_open (struct osmo_dgram *conn)
     Open the datagram transceiver. More...
     
    void osmo_dgram_close (struct osmo_dgram *conn)
     Close an 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...
     
    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/annotated.html0000644000175000017500000001621714752517766013700 0ustar buildbuild libosmo-netif: Data Structures
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
    Data Structures
    Here are the data structures with brief descriptions:
     Camr_hdr
     Camr_hdr_bwe
     Cipa_head
     Cipa_head_ext
     Cosmo_ipa_msgb_cb
     Cosmo_jibufA structure representing a single instance of a jitter buffer
     Cosmux_hdrOsmux protocol header
     Cosmux_in_handleOne to handle all existing RTP flows
     Cosmux_out_handleOne per OSmux circuit_id, ie
     Crtcp_hdr
     Crtp_hdr
     Crtp_x_hdr
    html/structosmux__out__handle.html0000644000175000017500000002203114752517766017032 0ustar buildbuild libosmo-netif: osmux_out_handle Struct Reference
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
    osmux_out_handle Struct Reference

    one per OSmux circuit_id, ie. More...

    #include <osmux.h>

    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
     

    Detailed Description

    one per OSmux circuit_id, ie.

    one per RTP flow.


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

    Osmux protocol header. More...

    #include <osmux.h>

    Data Fields

    uint8_t seq
     
    uint8_t circuit_id
     
    uint8_t data [0]
     

    Detailed Description

    Osmux protocol header.

    OSmux header:

     rtp_m (1 bit):             RTP M field (RFC3550, RFC4867)
     ft (2 bits):               0=signalling, 1=voice, 2=dummy
     ctr (3 bits):              Number of batched AMR payloads (starting 0)
     amr_f (1 bit):             AMR F field (RFC3267)
     amr_q (1 bit):             AMR Q field (RFC3267)
        seq (8 bits):           Combination of RTP timestamp and seq. number
        circuit_id (8 bits):    Circuit ID, ie. Call identifier.
     amr_ft (4 bits):   AMR FT field (RFC3267)
        amr_cmr (4 bits):       AMR CMT field (RFC3267)
    

    The documentation for this struct was generated from the following file:
    html/group__stream__srv.html0000644000175000017500000032720514752517766015624 0ustar buildbuild libosmo-netif: Osmocom Stream Server
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
    Osmocom Stream Server

    This code is intended to abstract any server-side use of stream-type sockets, such as TCP and SCTP. More...

    Typedefs

    typedef int(* osmo_stream_srv_link_accept_cb_t) (struct osmo_stream_srv_link *link, int fd)
     
    typedef int(* osmo_stream_srv_read_cb_t) (struct osmo_stream_srv *conn)
     
    typedef int(* osmo_stream_srv_closed_cb_t) (struct osmo_stream_srv *conn)
     
    typedef int(* osmo_stream_srv_read_cb2_t) (struct osmo_stream_srv *conn, int res, struct msgb *msg)
     Completion call-back function when something was read from from the stream client socket. More...
     
    typedef int(* osmo_stream_srv_segmentation_cb_t) (struct msgb *msg)
     
    typedef int(* osmo_stream_srv_segmentation_cb2_t) (struct osmo_stream_srv *conn, struct msgb *msg)
     

    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 }
     

    Functions

    struct osmo_stream_srv_link * osmo_stream_srv_link_create (void *ctx)
     Create an Osmocom Stream Server Link. More...
     
    void osmo_stream_srv_link_destroy (struct osmo_stream_srv_link *link)
     Destroy the stream server link. 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...
     
    const char * osmo_stream_srv_link_get_name (const struct osmo_stream_srv_link *link)
     Retrieve name previously set on the srv_link object (see osmo_stream_srv_link_set_name()). 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. More...
     
    int osmo_stream_srv_link_set_priority (struct osmo_stream_srv_link *link, int sk_prio)
     Set the priority value of the stream socket. More...
     
    int osmo_stream_srv_link_set_ip_dscp (struct osmo_stream_srv_link *link, uint8_t ip_dscp)
     Set the DSCP (differentiated services code point) of the stream socket. 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. 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)
     Retrieve application private data of the stream server link. More...
     
    int osmo_stream_srv_link_set_tx_queue_max_length (struct osmo_stream_srv_link *link, unsigned int size)
     Set the maximum length queue of the stream servers accepted and allocated from this server link. More...
     
    char * osmo_stream_srv_link_get_sockname (const struct osmo_stream_srv_link *link)
     Retrieve description of the stream server link e. More...
     
    struct osmo_fd * osmo_stream_srv_link_get_ofd (struct osmo_stream_srv_link *link)
     Retrieve Osmocom File Descriptor of the stream server link. More...
     
    int osmo_stream_srv_link_get_fd (const struct osmo_stream_srv_link *link)
     Retrieve File Descriptor of the stream server link. More...
     
    int osmo_stream_srv_link_set_msgb_alloc_info (struct osmo_stream_srv_link *link, unsigned int size, unsigned int headroom)
     Set the msgb allocation parameters on child osmo_stream_srv objects. 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. More...
     
    void osmo_stream_srv_link_close (struct osmo_stream_srv_link *link)
     Close the stream server link and unregister from select loop. 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)
     Set given parameter of stream_srv_link to given value. More...
     
    struct osmo_stream_srv * osmo_stream_srv_create (void *ctx, struct osmo_stream_srv_link *link, int fd, osmo_stream_srv_read_cb_t read_cb, osmo_stream_srv_closed_cb_t closed_cb, void *data)
     Create a legacy osmo_fd mode Stream Server inside the specified link. More...
     
    struct osmo_stream_srv * osmo_stream_srv_create2 (void *ctx, struct osmo_stream_srv_link *link, int fd, void *data)
     Create an osmo_iofd mode 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...
     
    const char * osmo_stream_srv_get_name (const struct osmo_stream_srv *conn)
     Retrieve name previously set on the srv object (see osmo_stream_srv_set_name()). More...
     
    void osmo_stream_srv_set_read_cb (struct osmo_stream_srv *conn, osmo_stream_srv_read_cb2_t read_cb)
     Set the call-back function for incoming data on an osmo_io stream_srv. More...
     
    void osmo_stream_srv_set_closed_cb (struct osmo_stream_srv *conn, osmo_stream_srv_closed_cb_t closed_cb)
     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)
     Retrieve application private data of the stream server. More...
     
    struct osmo_stream_srv_link * osmo_stream_srv_get_master (struct osmo_stream_srv *conn)
     Retrieve the master (Link) from a Stream Server. More...
     
    const char * osmo_stream_srv_get_sockname (const struct osmo_stream_srv *conn)
     Retrieve the stream server socket description. More...
     
    struct osmo_fd * osmo_stream_srv_get_ofd (struct osmo_stream_srv *conn)
     Retrieve Osmocom File Descriptor of a stream server in osmo_fd mode. More...
     
    int osmo_stream_srv_get_fd (const struct osmo_stream_srv *conn)
     Retrieve File Descriptor of the stream server. More...
     
    struct osmo_io_fd * osmo_stream_srv_get_iofd (const struct osmo_stream_srv *srv)
     Retrieve osmo_io descriptor of the stream server socket. More...
     
    void osmo_stream_srv_destroy (struct osmo_stream_srv *conn)
     Destroy given Stream Server. 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. 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, osmo_stream_srv_segmentation_cb_t segmentation_cb)
     Set the segmentation callback for target osmo_stream_srv structure. More...
     
    void osmo_stream_srv_set_segmentation_cb2 (struct osmo_stream_srv *conn, osmo_stream_srv_segmentation_cb2_t segmentation_cb2)
     Set the segmentation callback for target osmo_stream_srv structure. 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 an Osmocom stream server in osmo_fd mode. More...
     
    void osmo_stream_srv_clear_tx_queue (struct osmo_stream_srv *conn)
     

    Detailed Description

    This code is intended to abstract any server-side use of stream-type sockets, such as TCP and SCTP.

    The Osmocom stream socket helper is an abstraction layer for connected SOCK_STREAM/SOCK_SEQPACKET sockets. It encapsulates common functionality like binding, accepting client connections, etc.

    osmo_stream_srv can operate in two different modes:

    1. The legacy mode using osmo_fd (from libosmocore)
    2. The modern (2023) mode using osmo_io (from libosmocore)

    For any new applications, you definitely should use the modern mode, as it provides you with a higher layer of abstraction and allows you to perform efficient I/O using the io_uring backend of osmo_io.

    The modern mode is chosen by invoking osmo_stream_srv_create2(). The legacy mode is chosen by invoking the older osmo_stream_srv_create().

    The two main objects are osmo_stream_srv_link (main server accept()ing incoming connections) and osmo_stream_srv (a single given connection from a remote client).

    A typical stream_srv usage would look like this:

    Whenever a client connects to your listening socket, the connection will now be automatically accept()ed and the registered accept_cb call-back called. From within that accept_cb, you then

    Whenever data from a client arrives on a connection, your registered read_cb will be called together with a message buffer containing the received data. Ownership of the message buffer is transferred into the call-back, i.e. in your application. It's your responsibility to eventually msgb_free() it after usage.

    Whenever your application wants to transmit something to a given connection, it uses the osmo_stream_srv_send() function.

    Typedef Documentation

    ◆ osmo_stream_srv_read_cb2_t

    typedef int(* osmo_stream_srv_read_cb2_t) (struct osmo_stream_srv *conn, int res, struct msgb *msg)

    Completion call-back function when something was read from from the stream client socket.

    Parameters
    [in]connStream Server that got receive event.
    [in]resreturn value of the read()/recvmsg()/... call, or -errno in case of error.
    [in]msgmessage buffer containing the read data. Ownership is transferred to the call-back, and it must make sure to msgb_free() it eventually!

    Function Documentation

    ◆ osmo_stream_srv_create()

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

    Create a legacy osmo_fd mode Stream Server inside the specified link.

    This is the function an application traditionally calls from within the accept_cb call-back of the osmo_stream_srv_link. It creates a new osmo_stream_srv within that link.

    New users/programs should use osmo_stream_srv_create2 to operate in osmo_io mode instead.

    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 an osmo_iofd mode Stream Server inside the specified link.

    This is the function an application typically calls from within the accept_cb call-back of the osmo_stream_srv_link. It creates a new osmo_stream_srv in osmo_io mode within that 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 the underlying I/O mechanism, 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)

    Retrieve 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_fd()

    int osmo_stream_srv_get_fd ( const struct osmo_stream_srv *  conn)

    Retrieve File Descriptor of the stream server.

    Parameters
    [in]connStream Server
    Returns
    file descriptor or negative on error

    Referenced by osmo_stream_srv_get_sockname().

    ◆ osmo_stream_srv_get_iofd()

    struct osmo_io_fd * osmo_stream_srv_get_iofd ( const struct osmo_stream_srv *  srv)

    Retrieve osmo_io descriptor of the stream server socket.

    This function must not be called on a stream server in legacy osmo_fd mode!

    Parameters
    [in]srvStream Server of which we want to obtain the osmo_io descriptor
    Returns
    osmo_io_fd of stream server.

    ◆ osmo_stream_srv_get_master()

    struct osmo_stream_srv_link * osmo_stream_srv_get_master ( struct osmo_stream_srv *  conn)

    Retrieve 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_name()

    const char * osmo_stream_srv_get_name ( const struct osmo_stream_srv *  conn)

    Retrieve name previously set on the srv object (see osmo_stream_srv_set_name()).

    Parameters
    [in]connserver whose name is to be retrieved
    Returns
    The name to be set on conn; NULL if never set

    ◆ osmo_stream_srv_get_ofd()

    struct osmo_fd * osmo_stream_srv_get_ofd ( struct osmo_stream_srv *  conn)

    Retrieve Osmocom File Descriptor of a stream server in osmo_fd mode.

    Parameters
    [in]connStream Server
    Returns
    Pointer to osmo_fd

    ◆ osmo_stream_srv_get_sockname()

    const char * osmo_stream_srv_get_sockname ( const struct osmo_stream_srv *  conn)

    Retrieve the stream server socket description.

    The returned name is stored in a static buffer; it is hence not re-entrant or thread-safe!

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

    References osmo_stream_srv_get_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 connections from remote clients.

    Parameters
    [in]ctxtalloc allocation context
    Returns
    Stream Server Link with default values (AF_UNSPEC, SOCK_STREAM, IPPROTO_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)

    Retrieve 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_fd()

    int osmo_stream_srv_link_get_fd ( const struct osmo_stream_srv_link *  link)

    Retrieve File Descriptor of the stream server link.

    Parameters
    [in]connStream Server Link
    Returns
    file descriptor or negative on error

    ◆ osmo_stream_srv_link_get_name()

    const char * osmo_stream_srv_link_get_name ( const struct osmo_stream_srv_link *  link)

    Retrieve name previously set on the srv_link object (see osmo_stream_srv_link_set_name()).

    Parameters
    [in]linkserver link whose name is to be retrieved
    Returns
    The name to be set on link; NULL if never set

    ◆ osmo_stream_srv_link_get_ofd()

    struct osmo_fd * osmo_stream_srv_link_get_ofd ( struct osmo_stream_srv_link *  link)

    Retrieve 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)

    Retrieve description of the stream server link e.

    g. 127.0.0.1:1234. Calling this function will build a string that describes the socket in terms of its local/remote address/port. The returned name is stored in a static buffer; it is hence not re-entrant or thread-safe.

    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.

    The provided call-back will be called whenever a new inbound connection is accept()ed. The call-back then typically creates a new osmo_stream_srv. If the call-back returns a negative value, the file descriptor will be closed.

    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.

    Any changes to this setting will only become active upon next (re)connect.

    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) Any changes to this setting will only become active upon next (re)connect.

    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.

    Any changes to this setting will only become active upon next (re)connect.

    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_ip_dscp()

    int osmo_stream_srv_link_set_ip_dscp ( struct osmo_stream_srv_link *  link,
    uint8_t  ip_dscp 
    )

    Set the DSCP (differentiated services code point) of the stream socket.

    Setting this will automatically set the IP DSCP option on any socket on any socket established via this server link, before calling the accept_cb().

    Parameters
    [in]linkserver link whose sockets are to be configured
    [in]ip_dscpDSCP value. Value range 0..63.
    Returns
    negative on error, 0 on success

    ◆ osmo_stream_srv_link_set_msgb_alloc_info()

    int osmo_stream_srv_link_set_msgb_alloc_info ( struct osmo_stream_srv_link *  link,
    unsigned int  size,
    unsigned int  headroom 
    )

    Set the msgb allocation parameters on child osmo_stream_srv objects.

    Parameters
    [in]linkStream Server Link
    [in]sizeSize of msgb to allocate (excluding headroom)
    [in]headroomHeadroom to allocate when allocating msgb's

    The parameters are applied to osmo_stream_srv objects upon creation. Setting both to 0 leaves it as implementation default.

    ◆ 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. The name is copied into the osmo_stream_srv_link, so the caller memory is not required to be valid beyond the call of this function.
    [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_param()

    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 
    )

    Set given parameter of stream_srv_link to given value.

    Parameters
    [in]clistream client on which to set parameter.
    [in]paridentifier of the parameter to be set.
    [in]valvalue of the parameter to be set.
    [in]val_lenlength of the parameter value.
    Returns
    0 in success; negative -errno on error.

    ◆ 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.

    Any changes to this setting will only become active upon next (re)connect.

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

    ◆ osmo_stream_srv_link_set_priority()

    int osmo_stream_srv_link_set_priority ( struct osmo_stream_srv_link *  link,
    int  sk_prio 
    )

    Set the priority value of the stream socket.

    Setting this will automatically set the socket priority 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]sk_priopriority value. Values outside 0..6 require CAP_NET_ADMIN.
    Returns
    negative on error, 0 on success

    ◆ 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.

    Any changes to this setting will only become active upon next (re)connect.

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

    ◆ osmo_stream_srv_link_set_tx_queue_max_length()

    int osmo_stream_srv_link_set_tx_queue_max_length ( struct osmo_stream_srv_link *  link,
    unsigned int  size 
    )

    Set the maximum length queue of the stream servers accepted and allocated from this server link.

    Parameters
    [in]linkStream Server Link to modify
    [in]sizemaximum amount of msgbs which can be queued in the internal tx queue.
    Returns
    0 on success, negative on error.

    The maximum length queue default value is 1024 msgbs.

    ◆ 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.

    Any changes to this setting will only become active upon next (re)connect.

    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 an Osmocom stream server in osmo_fd mode.

    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.

    Application programs using the legacy osmo_fd mode of osmo_stream_srv will use this function to read/receive from a stream socket after they have been notified that it is readable (via select/poll).

    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,
    osmo_stream_srv_closed_cb_t  closed_cb 
    )

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

    Whenever the socket was closed (network error, client disconnect, etc.), the user-provided call-back function given here is called. This is typically used by the application to clean up any of its internal state related to this specific client/connection.

    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. The name is copied into the osmo_stream_srv_link, so the caller memory is not required to be valid beyond the call of this function.
    [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,
    osmo_stream_srv_read_cb2_t  read_cb 
    )

    Set the call-back function for incoming data on an osmo_io stream_srv.

    This function only works with osmo_stream_srv in osmo_io mode, created by osmo_stream_srv_create2()!

    Whenever data is received on the osmo_stram_srv, the read_cb call-back function of the user application is called.

    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,
    osmo_stream_srv_segmentation_cb_t  segmentation_cb 
    )

    Set the segmentation callback for target osmo_stream_srv structure.

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

    A segmentation call-back can optionally be used when a packet based protocol (like TCP) is used within a STREAM style socket that does not preserve message boundaries within the stream. If a segmentation call-back is given, the osmo_stream_srv library code will makes sure that the read_cb called only for complete single messages, and not arbitrary segments of the stream.

    This function only works with osmo_stream_srv in osmo_io mode, created by osmo_stream_srv_create2()! The connection has to have been established prior to calling this function.

    ◆ osmo_stream_srv_set_segmentation_cb2()

    void osmo_stream_srv_set_segmentation_cb2 ( struct osmo_stream_srv *  conn,
    osmo_stream_srv_segmentation_cb2_t  segmentation_cb2 
    )

    Set the segmentation callback for target osmo_stream_srv structure.

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

    Same as osmo_stream_srv_set_segmentation_cb(), but a osmo_stream_srv_segmentation_cb2_t is called instead which allows access to the related conn object.

    html/open.png0000644000175000017500000000017314752517766012476 0ustar buildbuildPNG  IHDR BIDATx 0 ׬ՙ\39b!9{|I>$#ߴ8/z/>2[giU,/~\ 9ٸIENDB`html/osmux__input_8c.js0000644000175000017500000000062114752517766014506 0ustar buildbuildvar osmux__input_8c = [ [ "osmux_xfrm_input", "group__osmux.html#ga9c7d30c0d7d9bc0caf744799d629d4cc", null ], [ "osmux_xfrm_input_alloc", "group__osmux.html#gad61cdde332496df6d7350d147e50b8be", null ], [ "osmux_xfrm_input_fini", "group__osmux.html#ga13655a3bdc68f5e96ad1fe1c03dc235e", null ], [ "osmux_xfrm_input_init", "group__osmux.html#ga96230b0431d5d4d91f2dd57a9c85c366", null ] ];html/modules.html0000644000175000017500000001265014752517766013370 0ustar buildbuild libosmo-netif: Modules
    libosmo-netif 1.5.1.34-ada6
    Osmocom network interface library
    Modules
    Here is a list of all modules:
     Osmocom Datagram SocketThis code is intended to abstract any use of datagram type sockets, such as UDP
     Osmocom Jitter Buffer
     Osmocom Stream ServerThis code is intended to abstract any server-side use of stream-type sockets, such as TCP and SCTP
     Osmocom Stream ClientThis code is intended to abstract any client use of stream-type sockets, such as TCP and SCTP
     Osmocom Multiplex ProtocolThis 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
    html/nav_f.png0000644000175000017500000000023114752517766012621 0ustar buildbuildPNG  IHDR8`IDATxK Eі[BmkHprӼ.ꎤR6Z VIE5jliIJ0/u޿6sH yIENDB`html/folderclosed.png0000644000175000017500000000115014752517766014176 0ustar buildbuildPNG  IHDR}\/IDATx]MO@~uؐlp]#]PYEC\9y`xC &=qvZv3m؃vLN}}ޝZA@n ONp xKxj8s _[D'yye+ 7#rNlk* 0Ь_d_(Öz=xvhzP-䍒̪u$\DJcB4.:Ϗ-}LE #gN;B6䬜@p&h>p9EEάʑ"un$R"?{<%PNt$߶+^<"2Dqq\ҙaA"ԵP}#Ez{.8i p(ADwDE߂z;Kק8t q:uvvݛvEn{MFXgfZ֝*ߩ:jYq#3SWr'  IENDB`html/files.html0000644000175000017500000002442514752517766013025 0ustar buildbuild libosmo-netif: File List
    libosmo-netif 1.5.1.34-ada6
    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.hOsmocom datagram socket helpers
     ipa.h
     ipa_unit.h
     jibuf.hOsmocom Jitter Buffer helpers
     osmux.hOsmocom multiplex protocol helpers
     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_cli.c
     stream_srv.c
    html/jquery.js0000644000175000017500000053125514752517766012716 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.png0000644000175000017500000000022314752517766012463 0ustar buildbuildPNG  IHDR5ZIDATx DP1lm rj.e D[ɾ|6V3?Ls'(}>+ Kch` ^ލnIENDB`html/nav_g.png0000644000175000017500000000013714752517766012627 0ustar buildbuildPNG  IHDR1&IDATx1 OHf_ ->~M iMS<IENDB`html/sctp_8h_source.html0000644000175000017500000003377714752517766014665 0ustar buildbuild libosmo-netif: include/osmocom/netif/sctp.h Source File
    libosmo-netif 1.5.1.34-ada6
    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); }
    51
    52enum sctp_spinfo_state;
    53extern const struct value_string osmo_sctp_spinfo_state_strs[];
    54static inline const char *osmo_sctp_spinfo_state_str(enum sctp_spinfo_state val)
    55{ return get_value_string(osmo_sctp_spinfo_state_strs, val); }
    56
    57enum sctp_sstat_state;
    58extern const struct value_string osmo_sctp_sstat_state_strs[];
    59static inline const char *osmo_sctp_sstat_state_str(enum sctp_sstat_state val)
    60{ return get_value_string(osmo_sctp_sstat_state_strs, val); }
    html/search/0000755000175000017500000000000014752517766012273 5ustar buildbuildhtml/search/nomatches.html0000644000175000017500000000076414752517766015151 0ustar buildbuild
    No Matches
    html/search/files_0.html0000644000175000017500000000263514752517766014510 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/close.svg0000644000175000017500000000240414752517766014121 0ustar buildbuild image/svg+xml html/search/classes_0.js0000644000175000017500000000024114752517766014502 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.js0000644000175000017500000000040014752517766013616 0ustar buildbuildvar searchData= [ ['msgb_5fsctp_5fppid_0',['msgb_sctp_ppid',['../stream_8h.html#a2693c0cc5c6222dd9ed42c8c4bf8aec8',1,'stream.h']]], ['msgb_5fsctp_5fstream_1',['msgb_sctp_stream',['../stream_8h.html#ac2c359892ad63309b59a4b402f6a3e81',1,'stream.h']]] ]; html/search/files_3.html0000644000175000017500000000263514752517766014513 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/functions_0.js0000644000175000017500000005126414752517766015070 0ustar buildbuildvar searchData= [ ['osmo_5fdgram_5fclose_0',['osmo_dgram_close',['../group__datagram.html#ga46db4acbfc35668e35601338d64364ed',1,'datagram.c']]], ['osmo_5fdgram_5fcreate_1',['osmo_dgram_create',['../group__datagram.html#ga56ee60c89f1a3bc975ab0ede5b71ff15',1,'datagram.c']]], ['osmo_5fdgram_5fdestroy_2',['osmo_dgram_destroy',['../group__datagram.html#ga01fb36f8c19b2b64705d8263f7f53f59',1,'datagram.c']]], ['osmo_5fdgram_5fget_5fdata_3',['osmo_dgram_get_data',['../group__datagram.html#ga36d7e1f26af3308b51f95e06d1c742d7',1,'datagram.c']]], ['osmo_5fdgram_5fopen_4',['osmo_dgram_open',['../group__datagram.html#gac65de108c52dba83b178d6453e9fb545',1,'datagram.c']]], ['osmo_5fdgram_5frecv_5',['osmo_dgram_recv',['../group__datagram.html#gaae58d13a6fd634ebfddd486d0d428c5e',1,'datagram.c']]], ['osmo_5fdgram_5frx_5fclose_6',['osmo_dgram_rx_close',['../group__datagram.html#ga01efa7269834a745d80910a64c6f61c0',1,'datagram.c']]], ['osmo_5fdgram_5frx_5fcreate_7',['osmo_dgram_rx_create',['../group__datagram.html#gad7af9f04fe4847b0e2eefe35fa05a8b8',1,'datagram.c']]], ['osmo_5fdgram_5frx_5fdestroy_8',['osmo_dgram_rx_destroy',['../group__datagram.html#ga6e4b92b9c7f210d1cb3782425d0bdac0',1,'datagram.c']]], ['osmo_5fdgram_5frx_5fopen_9',['osmo_dgram_rx_open',['../group__datagram.html#gaf558e9c2f02216ed95db039ddaf31050',1,'datagram.c']]], ['osmo_5fdgram_5frx_5frecv_10',['osmo_dgram_rx_recv',['../group__datagram.html#ga16d69e998c663cdec0b76560a2d8cfb9',1,'datagram.c']]], ['osmo_5fdgram_5frx_5fset_5faddr_11',['osmo_dgram_rx_set_addr',['../group__datagram.html#gad378ba5cc66ee0c27a277906d8434e31',1,'datagram.c']]], ['osmo_5fdgram_5frx_5fset_5fport_12',['osmo_dgram_rx_set_port',['../group__datagram.html#gafbd947def18d8e34062876433ac05e91',1,'datagram.c']]], ['osmo_5fdgram_5frx_5fset_5fread_5fcb_13',['osmo_dgram_rx_set_read_cb',['../group__datagram.html#ga5a0f7221b8583aac5153f167c4e2177d',1,'datagram.c']]], ['osmo_5fdgram_5fsend_14',['osmo_dgram_send',['../group__datagram.html#ga66d6c9d5f0243a4f7ed458c62d8e20dd',1,'datagram.c']]], ['osmo_5fdgram_5fset_5fdata_15',['osmo_dgram_set_data',['../group__datagram.html#gaa6a5fbd5f227d15cefe6b234fefb3b4d',1,'datagram.c']]], ['osmo_5fdgram_5fset_5flocal_5faddr_16',['osmo_dgram_set_local_addr',['../group__datagram.html#gaf21d974e14fa22f910313b240d31d40f',1,'datagram.c']]], ['osmo_5fdgram_5fset_5flocal_5fport_17',['osmo_dgram_set_local_port',['../group__datagram.html#ga9180ae9a36a9927d4bdb49cdc5708b1f',1,'datagram.c']]], ['osmo_5fdgram_5fset_5fread_5fcb_18',['osmo_dgram_set_read_cb',['../group__datagram.html#ga6b6ef2f02e3d260f1e84a2ecf8c67b5a',1,'datagram.c']]], ['osmo_5fdgram_5fset_5fremote_5faddr_19',['osmo_dgram_set_remote_addr',['../group__datagram.html#ga6677ee8d976d2e1bed8e0c01e103c18f',1,'datagram.c']]], ['osmo_5fdgram_5fset_5fremote_5fport_20',['osmo_dgram_set_remote_port',['../group__datagram.html#ga27bf4c1d8e4c30ef7b4ec49665d6fc90',1,'datagram.c']]], ['osmo_5fdgram_5ftx_5fclose_21',['osmo_dgram_tx_close',['../group__datagram.html#ga0eb580467681e8fa91be35a83a74f132',1,'datagram.c']]], ['osmo_5fdgram_5ftx_5fcreate_22',['osmo_dgram_tx_create',['../group__datagram.html#gadeaa837f3df8382bd7a50e668b9d3a61',1,'datagram.c']]], ['osmo_5fdgram_5ftx_5fdestroy_23',['osmo_dgram_tx_destroy',['../group__datagram.html#gaad6f9ca0688cd4a8a95ec6002f52ded5',1,'datagram.c']]], ['osmo_5fdgram_5ftx_5fopen_24',['osmo_dgram_tx_open',['../group__datagram.html#ga8d712623df3862e55ad248dc5ecd626c',1,'datagram.c']]], ['osmo_5fdgram_5ftx_5fsend_25',['osmo_dgram_tx_send',['../group__datagram.html#gad4638b9943090f5bf1a7b75fa8efde46',1,'datagram.c']]], ['osmo_5fdgram_5ftx_5fset_5faddr_26',['osmo_dgram_tx_set_addr',['../group__datagram.html#ga94fe94f64f1285715db36eb1f2e9deaa',1,'datagram.c']]], ['osmo_5fdgram_5ftx_5fset_5fdata_27',['osmo_dgram_tx_set_data',['../group__datagram.html#ga095ce94e65f1607026c37c12e6f5e9c0',1,'datagram.c']]], ['osmo_5fdgram_5ftx_5fset_5flocal_5faddr_28',['osmo_dgram_tx_set_local_addr',['../group__datagram.html#ga6c843f43db5439f8f0ba38f72dbb1a20',1,'datagram.c']]], ['osmo_5fdgram_5ftx_5fset_5flocal_5fport_29',['osmo_dgram_tx_set_local_port',['../group__datagram.html#gae2962232548d41621520c6c71da423a5',1,'datagram.c']]], ['osmo_5fdgram_5ftx_5fset_5fport_30',['osmo_dgram_tx_set_port',['../group__datagram.html#ga48d7e39656886b52aa176fc1b14c84cf',1,'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_5fclear_5ftx_5fqueue_39',['osmo_stream_cli_clear_tx_queue',['../group__stream__cli.html#gafa39b1dcc139ad12cbc38d51049bf14f',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fclose_40',['osmo_stream_cli_close',['../group__stream__cli.html#gad217c1c1b83ac852e090afd49146db19',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fcreate_41',['osmo_stream_cli_create',['../group__stream__cli.html#ga1754a498abc27577a8e0b3b0f236c05b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fdestroy_42',['osmo_stream_cli_destroy',['../group__stream__cli.html#ga9d0dac2f390c660c85fa347765f4f45a',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fget_5fdata_43',['osmo_stream_cli_get_data',['../group__stream__cli.html#ga606a53840677f3f5200887dc92f5de4d',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fget_5ffd_44',['osmo_stream_cli_get_fd',['../group__stream__cli.html#gaffc6ac3b28d87c910294a2f522a1eaab',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fget_5fiofd_45',['osmo_stream_cli_get_iofd',['../group__stream__cli.html#gac32d0489dd05ab89fb0c54dfd360d5b3',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fget_5fname_46',['osmo_stream_cli_get_name',['../group__stream__cli.html#ga0967921ed380123e3f54fd35375741bf',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fget_5fofd_47',['osmo_stream_cli_get_ofd',['../group__stream__cli.html#ga0615daa4aac253a3d530f35fddbc68bd',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fget_5fsockname_48',['osmo_stream_cli_get_sockname',['../group__stream__cli.html#gaecd148ae11f2f619aa52dd2900a15827',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fis_5fconnected_49',['osmo_stream_cli_is_connected',['../group__stream__cli.html#ga79a09e9c9b8cc98991cd5eebdb41ed57',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fopen_50',['osmo_stream_cli_open',['../group__stream__cli.html#ga86b4b9c8e563f8426d3cdae803e3ec38',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fopen2_51',['osmo_stream_cli_open2',['../group__stream__cli.html#ga127866794591d16a0eb7244f2fe666ef',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5freconnect_52',['osmo_stream_cli_reconnect',['../group__stream__cli.html#ga11d2615f6197f33073ba7245e5ba95ee',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5frecv_53',['osmo_stream_cli_recv',['../group__stream__cli.html#ga06f9743c19068bb720a4949ae8467243',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fsend_54',['osmo_stream_cli_send',['../group__stream__cli.html#gaacf415b97e1184baadeee5c60387422b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5faddr_55',['osmo_stream_cli_set_addr',['../group__stream__cli.html#ga0038e937cf0f36c59e0e3991523219a1',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5faddrs_56',['osmo_stream_cli_set_addrs',['../group__stream__cli.html#gaab1e7ef0ccc88e124c5f7bbb5e46c29c',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fconnect_5fcb_57',['osmo_stream_cli_set_connect_cb',['../group__stream__cli.html#ga6a7d4b7df43a3f0487d343fe3cd0c6a7',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fdata_58',['osmo_stream_cli_set_data',['../group__stream__cli.html#ga5e94c511d537f63337912bb50fb2dc28',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fdisconnect_5fcb_59',['osmo_stream_cli_set_disconnect_cb',['../group__stream__cli.html#ga6640b82a47028434455471bb52d9f577',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fdomain_60',['osmo_stream_cli_set_domain',['../group__stream__cli.html#ga33ce730fc91ebade9b7188fa220656c6',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fip_5fdscp_61',['osmo_stream_cli_set_ip_dscp',['../group__stream__cli.html#ga18526a340625c84a69ccc067ce2cda58',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5flocal_5faddr_62',['osmo_stream_cli_set_local_addr',['../group__stream__cli.html#ga70420e7c664cc4c4e69ac4d3476e7f53',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5flocal_5faddrs_63',['osmo_stream_cli_set_local_addrs',['../group__stream__cli.html#ga090fc3fcd1706b815ef5a729921c100e',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5flocal_5fport_64',['osmo_stream_cli_set_local_port',['../group__stream__cli.html#ga4d83e3cf7fdf7eb354c2015ff9bed98a',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fname_65',['osmo_stream_cli_set_name',['../group__stream__cli.html#gaeb712dc553735736047f9b11d9583baa',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fnodelay_66',['osmo_stream_cli_set_nodelay',['../group__stream__cli.html#gaa196e78db6ca32abb1473566b4f1b04b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fparam_67',['osmo_stream_cli_set_param',['../group__stream__cli.html#ga0638e98001fa4bdd36533718472dfac7',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fport_68',['osmo_stream_cli_set_port',['../group__stream__cli.html#gab8b9f65bebfeb83c6e33d102e9439770',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fpriority_69',['osmo_stream_cli_set_priority',['../group__stream__cli.html#gac3ec56e61ce062300ad1df73a5f2c7f8',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fproto_70',['osmo_stream_cli_set_proto',['../group__stream__cli.html#ga91d57aa94a370520540d7272af66a23b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fread_5fcb_71',['osmo_stream_cli_set_read_cb',['../group__stream__cli.html#ga798f23db7e2e1d999775589db8a73d03',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fread_5fcb2_72',['osmo_stream_cli_set_read_cb2',['../group__stream__cli.html#ga7892eb77d40f08a254f654786d0b996b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5freconnect_5ftimeout_73',['osmo_stream_cli_set_reconnect_timeout',['../group__stream__cli.html#gade74792afe35f31dd2584c888db3dd62',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fsegmentation_5fcb_74',['osmo_stream_cli_set_segmentation_cb',['../group__stream__cli.html#gab6094559935824750d82b9164ed76910',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fsegmentation_5fcb2_75',['osmo_stream_cli_set_segmentation_cb2',['../group__stream__cli.html#gaf62f1dbe4570d8ffd00b3bdc3f28d24b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5ftx_5fqueue_5fmax_5flength_76',['osmo_stream_cli_set_tx_queue_max_length',['../group__stream__cli.html#ga889f96540a1a2271a40dee063eaf5e9d',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5ftype_77',['osmo_stream_cli_set_type',['../group__stream__cli.html#ga5e5c4c9aacc1cd1d303c0295018594cb',1,'stream_cli.c']]], ['osmo_5fstream_5fsrv_5fcreate_78',['osmo_stream_srv_create',['../group__stream__srv.html#ga136b426790b6322f58f89059b88aaa0b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fcreate2_79',['osmo_stream_srv_create2',['../group__stream__srv.html#ga8be283e1a143e346b4d6ccf33cbb9b98',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fdestroy_80',['osmo_stream_srv_destroy',['../group__stream__srv.html#ga47f18e063f64f22cb74d58d8b7243bed',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fdata_81',['osmo_stream_srv_get_data',['../group__stream__srv.html#gae2a0ef01097d964c71e38600b4c078d5',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5ffd_82',['osmo_stream_srv_get_fd',['../group__stream__srv.html#ga803c8ba415f66cc1029b3899cc53b807',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fiofd_83',['osmo_stream_srv_get_iofd',['../group__stream__srv.html#ga9e00a9172d5b2708afa269d52c118eff',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fmaster_84',['osmo_stream_srv_get_master',['../group__stream__srv.html#ga9cf689935bf6ffac4f86f56219d73c8e',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fname_85',['osmo_stream_srv_get_name',['../group__stream__srv.html#gad34dc0f7ebf7c84653514566e431a1d2',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fofd_86',['osmo_stream_srv_get_ofd',['../group__stream__srv.html#ga47bbca4f12717db2e6158eefe6310b9b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fsockname_87',['osmo_stream_srv_get_sockname',['../group__stream__srv.html#ga4f176a35751509dc741fbd2b52f45b22',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fclose_88',['osmo_stream_srv_link_close',['../group__stream__srv.html#gad325d97b09c724e830c98d76b890520d',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fcreate_89',['osmo_stream_srv_link_create',['../group__stream__srv.html#gaad262988c7ac365566f03843c560f892',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fdestroy_90',['osmo_stream_srv_link_destroy',['../group__stream__srv.html#ga882acaaa5935422b0e09a2ce8c8019ec',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fdata_91',['osmo_stream_srv_link_get_data',['../group__stream__srv.html#gacb5d68c2a6a9663f99266c70747bce04',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5ffd_92',['osmo_stream_srv_link_get_fd',['../group__stream__srv.html#gae2ef09bc8da55db30d967563dfc6561a',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fname_93',['osmo_stream_srv_link_get_name',['../group__stream__srv.html#ga67520942e5a404a0b3a6960b8a161de8',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fofd_94',['osmo_stream_srv_link_get_ofd',['../group__stream__srv.html#ga7b8981351a154c357fcefd39c31ad42a',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fsockname_95',['osmo_stream_srv_link_get_sockname',['../group__stream__srv.html#ga7d7b6af7df24e90dc758a088bae6316d',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fis_5fopened_96',['osmo_stream_srv_link_is_opened',['../group__stream__srv.html#ga28243be108ed0302b0f5a9d1dfc96b22',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fopen_97',['osmo_stream_srv_link_open',['../group__stream__srv.html#ga603b89074d3e8c0fb44144ab1864f0d4',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5faccept_5fcb_98',['osmo_stream_srv_link_set_accept_cb',['../group__stream__srv.html#ga1eea525d4e1e7a24c9c08881994ceb7e',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5faddr_99',['osmo_stream_srv_link_set_addr',['../group__stream__srv.html#gacece90116484e34540def69b05c66f57',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5faddrs_100',['osmo_stream_srv_link_set_addrs',['../group__stream__srv.html#gaadabca7d23c52c39e291bf7e05f0055b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fdata_101',['osmo_stream_srv_link_set_data',['../group__stream__srv.html#ga5ef0f0c85a52c08e8c10d36a8f44e392',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fdomain_102',['osmo_stream_srv_link_set_domain',['../group__stream__srv.html#ga9629b516297c31f34af48e4630973dab',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fip_5fdscp_103',['osmo_stream_srv_link_set_ip_dscp',['../group__stream__srv.html#ga53be410e4b8cf79e850b8cd5c01b4c78',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fmsgb_5falloc_5finfo_104',['osmo_stream_srv_link_set_msgb_alloc_info',['../group__stream__srv.html#ga925981abcacca9f9a3375d511309cb32',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fname_105',['osmo_stream_srv_link_set_name',['../group__stream__srv.html#gadef998825a4739660b198151fcee4201',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fnodelay_106',['osmo_stream_srv_link_set_nodelay',['../group__stream__srv.html#ga41e8ad2c761aaa00313aa11d1f29a3ed',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fparam_107',['osmo_stream_srv_link_set_param',['../group__stream__srv.html#ga759bceb4ce155f88e3e7817ce4c9449d',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fport_108',['osmo_stream_srv_link_set_port',['../group__stream__srv.html#ga76bbbafd1d8dc9c9ebffd301503b6dd9',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fpriority_109',['osmo_stream_srv_link_set_priority',['../group__stream__srv.html#ga3bfcfe6f09fa8f87dacb7ea215c64bae',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fproto_110',['osmo_stream_srv_link_set_proto',['../group__stream__srv.html#ga2508987133a93863d2a50103004b0f36',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5ftx_5fqueue_5fmax_5flength_111',['osmo_stream_srv_link_set_tx_queue_max_length',['../group__stream__srv.html#gad88e9249699c53894cb34c099b5e0c4b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5ftype_112',['osmo_stream_srv_link_set_type',['../group__stream__srv.html#ga1903f9aa2e6f9283ebcf20f573b1d970',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5frecv_113',['osmo_stream_srv_recv',['../group__stream__srv.html#gac86242c41223c525c770ff7e7515d83e',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fsend_114',['osmo_stream_srv_send',['../group__stream__srv.html#gaa1589994cf6eab27742cafee6b7fb491',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fclosed_5fcb_115',['osmo_stream_srv_set_closed_cb',['../group__stream__srv.html#gaed83d9686289eee534d77a61b96fbd90',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fdata_116',['osmo_stream_srv_set_data',['../group__stream__srv.html#ga9891663b20714d72f992e44ad1e92eea',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fflush_5fand_5fdestroy_117',['osmo_stream_srv_set_flush_and_destroy',['../group__stream__srv.html#ga8390ce6740e56eb22215e1c5805c95f1',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fname_118',['osmo_stream_srv_set_name',['../group__stream__srv.html#ga196834d254fd94922d6be91b7b5b1ed3',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fread_5fcb_119',['osmo_stream_srv_set_read_cb',['../group__stream__srv.html#gad0d7b7e236826c52f10a7b4f50009d01',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fsegmentation_5fcb_120',['osmo_stream_srv_set_segmentation_cb',['../group__stream__srv.html#ga560a6d868bf95bf2f3a4b716bfd5cac9',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fsegmentation_5fcb2_121',['osmo_stream_srv_set_segmentation_cb2',['../group__stream__srv.html#ga348c4560f69403fc3a3dfcbe874c2593',1,'stream_srv.c']]], ['osmux_5fsnprintf_122',['osmux_snprintf',['../group__osmux.html#gaf654e092ca97dd764f59905a2ed21650',1,'osmux.c']]], ['osmux_5fxfrm_5finput_123',['osmux_xfrm_input',['../group__osmux.html#ga9c7d30c0d7d9bc0caf744799d629d4cc',1,'osmux_input.c']]], ['osmux_5fxfrm_5finput_5falloc_124',['osmux_xfrm_input_alloc',['../group__osmux.html#gad61cdde332496df6d7350d147e50b8be',1,'osmux_input.c']]], ['osmux_5fxfrm_5finput_5ffini_125',['osmux_xfrm_input_fini',['../group__osmux.html#ga13655a3bdc68f5e96ad1fe1c03dc235e',1,'osmux_input.c']]], ['osmux_5fxfrm_5finput_5finit_126',['osmux_xfrm_input_init',['../group__osmux.html#ga96230b0431d5d4d91f2dd57a9c85c366',1,'osmux_input.c']]], ['osmux_5fxfrm_5foutput_5falloc_127',['osmux_xfrm_output_alloc',['../group__osmux.html#ga41a217bffa1b0ac095c98ab0fab82c25',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fflush_128',['osmux_xfrm_output_flush',['../group__osmux.html#gaaac410425f6470396ae9db53ebb8dc44',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5finit_129',['osmux_xfrm_output_init',['../group__osmux.html#ga90d58246bcd24a6126898cd6c47dddf4',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5finit2_130',['osmux_xfrm_output_init2',['../group__osmux.html#gaa076e54fa0d249721a4c7b174a8ed2d1',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fsched_131',['osmux_xfrm_output_sched',['../group__osmux.html#gafee78ee4522a9caa238301d7b913dfd6',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5frtp_5fmsgb_5falloc_5fcb_132',['osmux_xfrm_output_set_rtp_msgb_alloc_cb',['../group__osmux.html#ga97187827e1f793f2392e54585343db32',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5frtp_5fpl_5ftype_133',['osmux_xfrm_output_set_rtp_pl_type',['../group__osmux.html#ga0d96c8a544e0ff56576615e0b2ac7774',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5frtp_5fssrc_134',['osmux_xfrm_output_set_rtp_ssrc',['../group__osmux.html#ga08151bad3c12df245d4c0e4f9c4ca966',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5ftx_5fcb_135',['osmux_xfrm_output_set_tx_cb',['../group__osmux.html#ga3936e43e881d0992648937417969ead1',1,'osmux_output.c']]] ]; html/search/all_4.html0000644000175000017500000000263314752517766014160 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/search.js0000644000175000017500000005500414752517766014102 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/all_7.html0000644000175000017500000000263314752517766014163 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/defines_0.js0000644000175000017500000000040014752517766014457 0ustar buildbuildvar searchData= [ ['msgb_5fsctp_5fppid_0',['msgb_sctp_ppid',['../stream_8h.html#a2693c0cc5c6222dd9ed42c8c4bf8aec8',1,'stream.h']]], ['msgb_5fsctp_5fstream_1',['msgb_sctp_stream',['../stream_8h.html#ac2c359892ad63309b59a4b402f6a3e81',1,'stream.h']]] ]; html/search/files_1.html0000644000175000017500000000263514752517766014511 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_1.html0000644000175000017500000000263714752517766015046 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_1.js0000644000175000017500000000024714752517766014511 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/all_5.html0000644000175000017500000000263314752517766014161 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_2.html0000644000175000017500000000263714752517766015047 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/functions_0.html0000644000175000017500000000264114752517766015413 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_0.js0000644000175000017500000000077014752517766014373 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_20client_3',['Osmocom Stream Client',['../group__stream__cli.html',1,'']]], ['osmocom_20stream_20server_4',['Osmocom Stream Server',['../group__stream__srv.html',1,'']]] ]; html/search/variables_0.js0000644000175000017500000000022114752517766015013 0ustar buildbuildvar searchData= [ ['osmux_5fseq_0',['osmux_seq',['../structosmux__in__handle.html#a1ba076a41ef9c3413665b7444c6521cc',1,'osmux_in_handle']]] ]; html/search/searchdata.js0000644000175000017500000000074714752517766014740 0ustar buildbuildvar indexSectionsWithContent = { 0: "adijmors", 1: "aior", 2: "djos", 3: "o", 4: "o", 5: "o", 6: "mo", 7: "o", 8: "d" }; var indexSectionNames = { 0: "all", 1: "classes", 2: "files", 3: "functions", 4: "variables", 5: "typedefs", 6: "defines", 7: "groups", 8: "pages" }; var indexSectionLabels = { 0: "All", 1: "Data Structures", 2: "Files", 3: "Functions", 4: "Variables", 5: "Typedefs", 6: "Macros", 7: "Modules", 8: "Pages" }; html/search/classes_3.js0000644000175000017500000000033514752517766014511 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/all_0.js0000644000175000017500000000024114752517766013615 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.html0000644000175000017500000000263314752517766014154 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/mag_sel.svg0000644000175000017500000000451214752517766014425 0ustar buildbuild image/svg+xml html/search/search_l.png0000644000175000017500000000106714752517766014565 0ustar buildbuildPNG  IHDR:>gAMA a cHRMms8zʴ3Dv6*bKGD̿ pHYs  tIME  OW*IDAT(ύJBQF&& >Ѥ|(FAI `AP ~&Fz A튷oM6u߁-/ityݞۍ 6bS%ݞ pA476IvܧxB6LD
    Loading...
    Searching...
    No Matches
    html/search/all_3.html0000644000175000017500000000263314752517766014157 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_1.html0000644000175000017500000000263314752517766014155 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_3.js0000644000175000017500000000020614752517766013621 0ustar buildbuildvar searchData= [ ['jibuf_2ec_0',['jibuf.c',['../jibuf_8c.html',1,'']]], ['jibuf_2eh_1',['jibuf.h',['../jibuf_8h.html',1,'']]] ]; html/search/pages_0.js0000644000175000017500000000013714752517766014150 0ustar buildbuildvar searchData= [ ['deprecated_20list_0',['Deprecated List',['../deprecated.html',1,'']]] ]; html/search/typedefs_0.html0000644000175000017500000000264014752517766015225 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_1.js0000644000175000017500000000020614752517766014151 0ustar buildbuildvar searchData= [ ['jibuf_2ec_0',['jibuf.c',['../jibuf_8c.html',1,'']]], ['jibuf_2eh_1',['jibuf.h',['../jibuf_8h.html',1,'']]] ]; html/search/all_2.html0000644000175000017500000000263314752517766014156 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/defines_1.html0000644000175000017500000000263714752517766015026 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/defines_0.html0000644000175000017500000000263714752517766015025 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/search_m.png0000644000175000017500000000023614752517766014563 0ustar buildbuildPNG  IHDR5^KMgAMAOX2tEXtSoftwareAdobe ImageReadyqe<0IDATxb,//g```<~8#?bbZP,Xnݺ <~EIENDB`html/search/all_1.js0000644000175000017500000000034314752517766013621 0ustar buildbuildvar searchData= [ ['datagram_2ec_0',['datagram.c',['../datagram_8c.html',1,'']]], ['datagram_2eh_1',['datagram.h',['../datagram_8h.html',1,'']]], ['deprecated_20list_2',['Deprecated List',['../deprecated.html',1,'']]] ]; html/search/classes_0.html0000644000175000017500000000263714752517766015045 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_7.js0000644000175000017500000000034614752517766013632 0ustar buildbuildvar searchData= [ ['stream_2eh_0',['stream.h',['../stream_8h.html',1,'']]], ['stream_5fcli_2ec_1',['stream_cli.c',['../stream__cli_8c.html',1,'']]], ['stream_5fsrv_2ec_2',['stream_srv.c',['../stream__srv_8c.html',1,'']]] ]; html/search/defines_1.js0000644000175000017500000000030014752517766014457 0ustar buildbuildvar searchData= [ ['osmo_5fstream_5fsctp_5fmsg_5fflags_5fnotification_0',['OSMO_STREAM_SCTP_MSG_FLAGS_NOTIFICATION',['../stream_8h.html#a123b7866ed4985a81246bfede79a8ea9',1,'stream.h']]] ]; html/search/search.css0000644000175000017500000001072214752517766014254 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.html0000644000175000017500000000263514752517766014512 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/pages_0.html0000644000175000017500000000263514752517766014505 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/typedefs_0.js0000644000175000017500000000051414752517766014673 0ustar buildbuildvar searchData= [ ['osmo_5fstream_5fcli_5fread_5fcb2_5ft_0',['osmo_stream_cli_read_cb2_t',['../group__stream__cli.html#ga113d99fd2e25ce01e98db0a6aa21c89c',1,'stream.h']]], ['osmo_5fstream_5fsrv_5fread_5fcb2_5ft_1',['osmo_stream_srv_read_cb2_t',['../group__stream__srv.html#ga5b6beeb3ec1effa8afa948deb7a4fc15',1,'stream.h']]] ]; html/search/groups_0.html0000644000175000017500000000263614752517766014726 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_5.js0000644000175000017500000005472214752517766013637 0ustar buildbuildvar searchData= [ ['osmo_5fdgram_5fclose_0',['osmo_dgram_close',['../group__datagram.html#ga46db4acbfc35668e35601338d64364ed',1,'datagram.c']]], ['osmo_5fdgram_5fcreate_1',['osmo_dgram_create',['../group__datagram.html#ga56ee60c89f1a3bc975ab0ede5b71ff15',1,'datagram.c']]], ['osmo_5fdgram_5fdestroy_2',['osmo_dgram_destroy',['../group__datagram.html#ga01fb36f8c19b2b64705d8263f7f53f59',1,'datagram.c']]], ['osmo_5fdgram_5fget_5fdata_3',['osmo_dgram_get_data',['../group__datagram.html#ga36d7e1f26af3308b51f95e06d1c742d7',1,'datagram.c']]], ['osmo_5fdgram_5fopen_4',['osmo_dgram_open',['../group__datagram.html#gac65de108c52dba83b178d6453e9fb545',1,'datagram.c']]], ['osmo_5fdgram_5frecv_5',['osmo_dgram_recv',['../group__datagram.html#gaae58d13a6fd634ebfddd486d0d428c5e',1,'datagram.c']]], ['osmo_5fdgram_5frx_5fclose_6',['osmo_dgram_rx_close',['../group__datagram.html#ga01efa7269834a745d80910a64c6f61c0',1,'datagram.c']]], ['osmo_5fdgram_5frx_5fcreate_7',['osmo_dgram_rx_create',['../group__datagram.html#gad7af9f04fe4847b0e2eefe35fa05a8b8',1,'datagram.c']]], ['osmo_5fdgram_5frx_5fdestroy_8',['osmo_dgram_rx_destroy',['../group__datagram.html#ga6e4b92b9c7f210d1cb3782425d0bdac0',1,'datagram.c']]], ['osmo_5fdgram_5frx_5fopen_9',['osmo_dgram_rx_open',['../group__datagram.html#gaf558e9c2f02216ed95db039ddaf31050',1,'datagram.c']]], ['osmo_5fdgram_5frx_5frecv_10',['osmo_dgram_rx_recv',['../group__datagram.html#ga16d69e998c663cdec0b76560a2d8cfb9',1,'datagram.c']]], ['osmo_5fdgram_5frx_5fset_5faddr_11',['osmo_dgram_rx_set_addr',['../group__datagram.html#gad378ba5cc66ee0c27a277906d8434e31',1,'datagram.c']]], ['osmo_5fdgram_5frx_5fset_5fport_12',['osmo_dgram_rx_set_port',['../group__datagram.html#gafbd947def18d8e34062876433ac05e91',1,'datagram.c']]], ['osmo_5fdgram_5frx_5fset_5fread_5fcb_13',['osmo_dgram_rx_set_read_cb',['../group__datagram.html#ga5a0f7221b8583aac5153f167c4e2177d',1,'datagram.c']]], ['osmo_5fdgram_5fsend_14',['osmo_dgram_send',['../group__datagram.html#ga66d6c9d5f0243a4f7ed458c62d8e20dd',1,'datagram.c']]], ['osmo_5fdgram_5fset_5fdata_15',['osmo_dgram_set_data',['../group__datagram.html#gaa6a5fbd5f227d15cefe6b234fefb3b4d',1,'datagram.c']]], ['osmo_5fdgram_5fset_5flocal_5faddr_16',['osmo_dgram_set_local_addr',['../group__datagram.html#gaf21d974e14fa22f910313b240d31d40f',1,'datagram.c']]], ['osmo_5fdgram_5fset_5flocal_5fport_17',['osmo_dgram_set_local_port',['../group__datagram.html#ga9180ae9a36a9927d4bdb49cdc5708b1f',1,'datagram.c']]], ['osmo_5fdgram_5fset_5fread_5fcb_18',['osmo_dgram_set_read_cb',['../group__datagram.html#ga6b6ef2f02e3d260f1e84a2ecf8c67b5a',1,'datagram.c']]], ['osmo_5fdgram_5fset_5fremote_5faddr_19',['osmo_dgram_set_remote_addr',['../group__datagram.html#ga6677ee8d976d2e1bed8e0c01e103c18f',1,'datagram.c']]], ['osmo_5fdgram_5fset_5fremote_5fport_20',['osmo_dgram_set_remote_port',['../group__datagram.html#ga27bf4c1d8e4c30ef7b4ec49665d6fc90',1,'datagram.c']]], ['osmo_5fdgram_5ftx_5fclose_21',['osmo_dgram_tx_close',['../group__datagram.html#ga0eb580467681e8fa91be35a83a74f132',1,'datagram.c']]], ['osmo_5fdgram_5ftx_5fcreate_22',['osmo_dgram_tx_create',['../group__datagram.html#gadeaa837f3df8382bd7a50e668b9d3a61',1,'datagram.c']]], ['osmo_5fdgram_5ftx_5fdestroy_23',['osmo_dgram_tx_destroy',['../group__datagram.html#gaad6f9ca0688cd4a8a95ec6002f52ded5',1,'datagram.c']]], ['osmo_5fdgram_5ftx_5fopen_24',['osmo_dgram_tx_open',['../group__datagram.html#ga8d712623df3862e55ad248dc5ecd626c',1,'datagram.c']]], ['osmo_5fdgram_5ftx_5fsend_25',['osmo_dgram_tx_send',['../group__datagram.html#gad4638b9943090f5bf1a7b75fa8efde46',1,'datagram.c']]], ['osmo_5fdgram_5ftx_5fset_5faddr_26',['osmo_dgram_tx_set_addr',['../group__datagram.html#ga94fe94f64f1285715db36eb1f2e9deaa',1,'datagram.c']]], ['osmo_5fdgram_5ftx_5fset_5fdata_27',['osmo_dgram_tx_set_data',['../group__datagram.html#ga095ce94e65f1607026c37c12e6f5e9c0',1,'datagram.c']]], ['osmo_5fdgram_5ftx_5fset_5flocal_5faddr_28',['osmo_dgram_tx_set_local_addr',['../group__datagram.html#ga6c843f43db5439f8f0ba38f72dbb1a20',1,'datagram.c']]], ['osmo_5fdgram_5ftx_5fset_5flocal_5fport_29',['osmo_dgram_tx_set_local_port',['../group__datagram.html#gae2962232548d41621520c6c71da423a5',1,'datagram.c']]], ['osmo_5fdgram_5ftx_5fset_5fport_30',['osmo_dgram_tx_set_port',['../group__datagram.html#ga48d7e39656886b52aa176fc1b14c84cf',1,'datagram.c']]], ['osmo_5fipa_5fmsgb_5fcb_31',['osmo_ipa_msgb_cb',['../structosmo__ipa__msgb__cb.html',1,'']]], ['osmo_5fjibuf_32',['osmo_jibuf',['../structosmo__jibuf.html',1,'']]], ['osmo_5fjibuf_5falloc_33',['osmo_jibuf_alloc',['../group__jibuf.html#ga20592f230f9d1233752fd318996f2c9d',1,'jibuf.c']]], ['osmo_5fjibuf_5fdelete_34',['osmo_jibuf_delete',['../group__jibuf.html#gacdac7beaf3d97543718ddfa33123fb7e',1,'jibuf.c']]], ['osmo_5fjibuf_5fempty_35',['osmo_jibuf_empty',['../group__jibuf.html#gae73a3b805b83f453339adeee9cdfaba4',1,'jibuf.c']]], ['osmo_5fjibuf_5fenable_5fskew_5fcompensation_36',['osmo_jibuf_enable_skew_compensation',['../group__jibuf.html#ga096e87b2dbdade72c35d51a51fe57839',1,'jibuf.c']]], ['osmo_5fjibuf_5fenqueue_37',['osmo_jibuf_enqueue',['../group__jibuf.html#ga522165ddc51578436ae2d26691fa7ec0',1,'jibuf.c']]], ['osmo_5fjibuf_5fset_5fdequeue_5fcb_38',['osmo_jibuf_set_dequeue_cb',['../group__jibuf.html#ga3a8213fe8bed42d649fcb1c8d13e23d8',1,'jibuf.c']]], ['osmo_5fjibuf_5fset_5fmax_5fdelay_39',['osmo_jibuf_set_max_delay',['../group__jibuf.html#ga5e84571c3348525b6ad647a22cd2581d',1,'jibuf.c']]], ['osmo_5fjibuf_5fset_5fmin_5fdelay_40',['osmo_jibuf_set_min_delay',['../group__jibuf.html#gabcd63f39049bc4d6b3541a674b78963d',1,'jibuf.c']]], ['osmo_5fstream_5fcli_5fclear_5ftx_5fqueue_41',['osmo_stream_cli_clear_tx_queue',['../group__stream__cli.html#gafa39b1dcc139ad12cbc38d51049bf14f',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fclose_42',['osmo_stream_cli_close',['../group__stream__cli.html#gad217c1c1b83ac852e090afd49146db19',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fcreate_43',['osmo_stream_cli_create',['../group__stream__cli.html#ga1754a498abc27577a8e0b3b0f236c05b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fdestroy_44',['osmo_stream_cli_destroy',['../group__stream__cli.html#ga9d0dac2f390c660c85fa347765f4f45a',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fget_5fdata_45',['osmo_stream_cli_get_data',['../group__stream__cli.html#ga606a53840677f3f5200887dc92f5de4d',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fget_5ffd_46',['osmo_stream_cli_get_fd',['../group__stream__cli.html#gaffc6ac3b28d87c910294a2f522a1eaab',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fget_5fiofd_47',['osmo_stream_cli_get_iofd',['../group__stream__cli.html#gac32d0489dd05ab89fb0c54dfd360d5b3',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fget_5fname_48',['osmo_stream_cli_get_name',['../group__stream__cli.html#ga0967921ed380123e3f54fd35375741bf',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fget_5fofd_49',['osmo_stream_cli_get_ofd',['../group__stream__cli.html#ga0615daa4aac253a3d530f35fddbc68bd',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fget_5fsockname_50',['osmo_stream_cli_get_sockname',['../group__stream__cli.html#gaecd148ae11f2f619aa52dd2900a15827',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fis_5fconnected_51',['osmo_stream_cli_is_connected',['../group__stream__cli.html#ga79a09e9c9b8cc98991cd5eebdb41ed57',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fopen_52',['osmo_stream_cli_open',['../group__stream__cli.html#ga86b4b9c8e563f8426d3cdae803e3ec38',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fopen2_53',['osmo_stream_cli_open2',['../group__stream__cli.html#ga127866794591d16a0eb7244f2fe666ef',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fread_5fcb2_5ft_54',['osmo_stream_cli_read_cb2_t',['../group__stream__cli.html#ga113d99fd2e25ce01e98db0a6aa21c89c',1,'stream.h']]], ['osmo_5fstream_5fcli_5freconnect_55',['osmo_stream_cli_reconnect',['../group__stream__cli.html#ga11d2615f6197f33073ba7245e5ba95ee',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5frecv_56',['osmo_stream_cli_recv',['../group__stream__cli.html#ga06f9743c19068bb720a4949ae8467243',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fsend_57',['osmo_stream_cli_send',['../group__stream__cli.html#gaacf415b97e1184baadeee5c60387422b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5faddr_58',['osmo_stream_cli_set_addr',['../group__stream__cli.html#ga0038e937cf0f36c59e0e3991523219a1',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5faddrs_59',['osmo_stream_cli_set_addrs',['../group__stream__cli.html#gaab1e7ef0ccc88e124c5f7bbb5e46c29c',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fconnect_5fcb_60',['osmo_stream_cli_set_connect_cb',['../group__stream__cli.html#ga6a7d4b7df43a3f0487d343fe3cd0c6a7',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fdata_61',['osmo_stream_cli_set_data',['../group__stream__cli.html#ga5e94c511d537f63337912bb50fb2dc28',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fdisconnect_5fcb_62',['osmo_stream_cli_set_disconnect_cb',['../group__stream__cli.html#ga6640b82a47028434455471bb52d9f577',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fdomain_63',['osmo_stream_cli_set_domain',['../group__stream__cli.html#ga33ce730fc91ebade9b7188fa220656c6',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fip_5fdscp_64',['osmo_stream_cli_set_ip_dscp',['../group__stream__cli.html#ga18526a340625c84a69ccc067ce2cda58',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5flocal_5faddr_65',['osmo_stream_cli_set_local_addr',['../group__stream__cli.html#ga70420e7c664cc4c4e69ac4d3476e7f53',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5flocal_5faddrs_66',['osmo_stream_cli_set_local_addrs',['../group__stream__cli.html#ga090fc3fcd1706b815ef5a729921c100e',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5flocal_5fport_67',['osmo_stream_cli_set_local_port',['../group__stream__cli.html#ga4d83e3cf7fdf7eb354c2015ff9bed98a',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fname_68',['osmo_stream_cli_set_name',['../group__stream__cli.html#gaeb712dc553735736047f9b11d9583baa',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fnodelay_69',['osmo_stream_cli_set_nodelay',['../group__stream__cli.html#gaa196e78db6ca32abb1473566b4f1b04b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fparam_70',['osmo_stream_cli_set_param',['../group__stream__cli.html#ga0638e98001fa4bdd36533718472dfac7',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fport_71',['osmo_stream_cli_set_port',['../group__stream__cli.html#gab8b9f65bebfeb83c6e33d102e9439770',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fpriority_72',['osmo_stream_cli_set_priority',['../group__stream__cli.html#gac3ec56e61ce062300ad1df73a5f2c7f8',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fproto_73',['osmo_stream_cli_set_proto',['../group__stream__cli.html#ga91d57aa94a370520540d7272af66a23b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fread_5fcb_74',['osmo_stream_cli_set_read_cb',['../group__stream__cli.html#ga798f23db7e2e1d999775589db8a73d03',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fread_5fcb2_75',['osmo_stream_cli_set_read_cb2',['../group__stream__cli.html#ga7892eb77d40f08a254f654786d0b996b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5freconnect_5ftimeout_76',['osmo_stream_cli_set_reconnect_timeout',['../group__stream__cli.html#gade74792afe35f31dd2584c888db3dd62',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fsegmentation_5fcb_77',['osmo_stream_cli_set_segmentation_cb',['../group__stream__cli.html#gab6094559935824750d82b9164ed76910',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fsegmentation_5fcb2_78',['osmo_stream_cli_set_segmentation_cb2',['../group__stream__cli.html#gaf62f1dbe4570d8ffd00b3bdc3f28d24b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5ftx_5fqueue_5fmax_5flength_79',['osmo_stream_cli_set_tx_queue_max_length',['../group__stream__cli.html#ga889f96540a1a2271a40dee063eaf5e9d',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5ftype_80',['osmo_stream_cli_set_type',['../group__stream__cli.html#ga5e5c4c9aacc1cd1d303c0295018594cb',1,'stream_cli.c']]], ['osmo_5fstream_5fsctp_5fmsg_5fflags_5fnotification_81',['OSMO_STREAM_SCTP_MSG_FLAGS_NOTIFICATION',['../stream_8h.html#a123b7866ed4985a81246bfede79a8ea9',1,'stream.h']]], ['osmo_5fstream_5fsrv_5fcreate_82',['osmo_stream_srv_create',['../group__stream__srv.html#ga136b426790b6322f58f89059b88aaa0b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fcreate2_83',['osmo_stream_srv_create2',['../group__stream__srv.html#ga8be283e1a143e346b4d6ccf33cbb9b98',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fdestroy_84',['osmo_stream_srv_destroy',['../group__stream__srv.html#ga47f18e063f64f22cb74d58d8b7243bed',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fdata_85',['osmo_stream_srv_get_data',['../group__stream__srv.html#gae2a0ef01097d964c71e38600b4c078d5',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5ffd_86',['osmo_stream_srv_get_fd',['../group__stream__srv.html#ga803c8ba415f66cc1029b3899cc53b807',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fiofd_87',['osmo_stream_srv_get_iofd',['../group__stream__srv.html#ga9e00a9172d5b2708afa269d52c118eff',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fmaster_88',['osmo_stream_srv_get_master',['../group__stream__srv.html#ga9cf689935bf6ffac4f86f56219d73c8e',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fname_89',['osmo_stream_srv_get_name',['../group__stream__srv.html#gad34dc0f7ebf7c84653514566e431a1d2',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fofd_90',['osmo_stream_srv_get_ofd',['../group__stream__srv.html#ga47bbca4f12717db2e6158eefe6310b9b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fsockname_91',['osmo_stream_srv_get_sockname',['../group__stream__srv.html#ga4f176a35751509dc741fbd2b52f45b22',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fclose_92',['osmo_stream_srv_link_close',['../group__stream__srv.html#gad325d97b09c724e830c98d76b890520d',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fcreate_93',['osmo_stream_srv_link_create',['../group__stream__srv.html#gaad262988c7ac365566f03843c560f892',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fdestroy_94',['osmo_stream_srv_link_destroy',['../group__stream__srv.html#ga882acaaa5935422b0e09a2ce8c8019ec',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fdata_95',['osmo_stream_srv_link_get_data',['../group__stream__srv.html#gacb5d68c2a6a9663f99266c70747bce04',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5ffd_96',['osmo_stream_srv_link_get_fd',['../group__stream__srv.html#gae2ef09bc8da55db30d967563dfc6561a',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fname_97',['osmo_stream_srv_link_get_name',['../group__stream__srv.html#ga67520942e5a404a0b3a6960b8a161de8',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fofd_98',['osmo_stream_srv_link_get_ofd',['../group__stream__srv.html#ga7b8981351a154c357fcefd39c31ad42a',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fsockname_99',['osmo_stream_srv_link_get_sockname',['../group__stream__srv.html#ga7d7b6af7df24e90dc758a088bae6316d',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fis_5fopened_100',['osmo_stream_srv_link_is_opened',['../group__stream__srv.html#ga28243be108ed0302b0f5a9d1dfc96b22',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fopen_101',['osmo_stream_srv_link_open',['../group__stream__srv.html#ga603b89074d3e8c0fb44144ab1864f0d4',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5faccept_5fcb_102',['osmo_stream_srv_link_set_accept_cb',['../group__stream__srv.html#ga1eea525d4e1e7a24c9c08881994ceb7e',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5faddr_103',['osmo_stream_srv_link_set_addr',['../group__stream__srv.html#gacece90116484e34540def69b05c66f57',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5faddrs_104',['osmo_stream_srv_link_set_addrs',['../group__stream__srv.html#gaadabca7d23c52c39e291bf7e05f0055b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fdata_105',['osmo_stream_srv_link_set_data',['../group__stream__srv.html#ga5ef0f0c85a52c08e8c10d36a8f44e392',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fdomain_106',['osmo_stream_srv_link_set_domain',['../group__stream__srv.html#ga9629b516297c31f34af48e4630973dab',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fip_5fdscp_107',['osmo_stream_srv_link_set_ip_dscp',['../group__stream__srv.html#ga53be410e4b8cf79e850b8cd5c01b4c78',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fmsgb_5falloc_5finfo_108',['osmo_stream_srv_link_set_msgb_alloc_info',['../group__stream__srv.html#ga925981abcacca9f9a3375d511309cb32',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fname_109',['osmo_stream_srv_link_set_name',['../group__stream__srv.html#gadef998825a4739660b198151fcee4201',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fnodelay_110',['osmo_stream_srv_link_set_nodelay',['../group__stream__srv.html#ga41e8ad2c761aaa00313aa11d1f29a3ed',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fparam_111',['osmo_stream_srv_link_set_param',['../group__stream__srv.html#ga759bceb4ce155f88e3e7817ce4c9449d',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fport_112',['osmo_stream_srv_link_set_port',['../group__stream__srv.html#ga76bbbafd1d8dc9c9ebffd301503b6dd9',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fpriority_113',['osmo_stream_srv_link_set_priority',['../group__stream__srv.html#ga3bfcfe6f09fa8f87dacb7ea215c64bae',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fproto_114',['osmo_stream_srv_link_set_proto',['../group__stream__srv.html#ga2508987133a93863d2a50103004b0f36',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5ftx_5fqueue_5fmax_5flength_115',['osmo_stream_srv_link_set_tx_queue_max_length',['../group__stream__srv.html#gad88e9249699c53894cb34c099b5e0c4b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5ftype_116',['osmo_stream_srv_link_set_type',['../group__stream__srv.html#ga1903f9aa2e6f9283ebcf20f573b1d970',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fread_5fcb2_5ft_117',['osmo_stream_srv_read_cb2_t',['../group__stream__srv.html#ga5b6beeb3ec1effa8afa948deb7a4fc15',1,'stream.h']]], ['osmo_5fstream_5fsrv_5frecv_118',['osmo_stream_srv_recv',['../group__stream__srv.html#gac86242c41223c525c770ff7e7515d83e',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fsend_119',['osmo_stream_srv_send',['../group__stream__srv.html#gaa1589994cf6eab27742cafee6b7fb491',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fclosed_5fcb_120',['osmo_stream_srv_set_closed_cb',['../group__stream__srv.html#gaed83d9686289eee534d77a61b96fbd90',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fdata_121',['osmo_stream_srv_set_data',['../group__stream__srv.html#ga9891663b20714d72f992e44ad1e92eea',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fflush_5fand_5fdestroy_122',['osmo_stream_srv_set_flush_and_destroy',['../group__stream__srv.html#ga8390ce6740e56eb22215e1c5805c95f1',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fname_123',['osmo_stream_srv_set_name',['../group__stream__srv.html#ga196834d254fd94922d6be91b7b5b1ed3',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fread_5fcb_124',['osmo_stream_srv_set_read_cb',['../group__stream__srv.html#gad0d7b7e236826c52f10a7b4f50009d01',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fsegmentation_5fcb_125',['osmo_stream_srv_set_segmentation_cb',['../group__stream__srv.html#ga560a6d868bf95bf2f3a4b716bfd5cac9',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fsegmentation_5fcb2_126',['osmo_stream_srv_set_segmentation_cb2',['../group__stream__srv.html#ga348c4560f69403fc3a3dfcbe874c2593',1,'stream_srv.c']]], ['osmocom_20datagram_20socket_127',['Osmocom Datagram Socket',['../group__datagram.html',1,'']]], ['osmocom_20jitter_20buffer_128',['Osmocom Jitter Buffer',['../group__jibuf.html',1,'']]], ['osmocom_20multiplex_20protocol_129',['Osmocom Multiplex Protocol',['../group__osmux.html',1,'']]], ['osmocom_20stream_20client_130',['Osmocom Stream Client',['../group__stream__cli.html',1,'']]], ['osmocom_20stream_20server_131',['Osmocom Stream Server',['../group__stream__srv.html',1,'']]], ['osmux_2ec_132',['osmux.c',['../osmux_8c.html',1,'']]], ['osmux_2eh_133',['osmux.h',['../osmux_8h.html',1,'']]], ['osmux_5fhdr_134',['osmux_hdr',['../structosmux__hdr.html',1,'']]], ['osmux_5fin_5fhandle_135',['osmux_in_handle',['../structosmux__in__handle.html',1,'']]], ['osmux_5finput_2ec_136',['osmux_input.c',['../osmux__input_8c.html',1,'']]], ['osmux_5fout_5fhandle_137',['osmux_out_handle',['../structosmux__out__handle.html',1,'']]], ['osmux_5foutput_2ec_138',['osmux_output.c',['../osmux__output_8c.html',1,'']]], ['osmux_5fseq_139',['osmux_seq',['../structosmux__in__handle.html#a1ba076a41ef9c3413665b7444c6521cc',1,'osmux_in_handle']]], ['osmux_5fsnprintf_140',['osmux_snprintf',['../group__osmux.html#gaf654e092ca97dd764f59905a2ed21650',1,'osmux.c']]], ['osmux_5fxfrm_5finput_141',['osmux_xfrm_input',['../group__osmux.html#ga9c7d30c0d7d9bc0caf744799d629d4cc',1,'osmux_input.c']]], ['osmux_5fxfrm_5finput_5falloc_142',['osmux_xfrm_input_alloc',['../group__osmux.html#gad61cdde332496df6d7350d147e50b8be',1,'osmux_input.c']]], ['osmux_5fxfrm_5finput_5ffini_143',['osmux_xfrm_input_fini',['../group__osmux.html#ga13655a3bdc68f5e96ad1fe1c03dc235e',1,'osmux_input.c']]], ['osmux_5fxfrm_5finput_5finit_144',['osmux_xfrm_input_init',['../group__osmux.html#ga96230b0431d5d4d91f2dd57a9c85c366',1,'osmux_input.c']]], ['osmux_5fxfrm_5foutput_5falloc_145',['osmux_xfrm_output_alloc',['../group__osmux.html#ga41a217bffa1b0ac095c98ab0fab82c25',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fflush_146',['osmux_xfrm_output_flush',['../group__osmux.html#gaaac410425f6470396ae9db53ebb8dc44',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5finit_147',['osmux_xfrm_output_init',['../group__osmux.html#ga90d58246bcd24a6126898cd6c47dddf4',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5finit2_148',['osmux_xfrm_output_init2',['../group__osmux.html#gaa076e54fa0d249721a4c7b174a8ed2d1',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fsched_149',['osmux_xfrm_output_sched',['../group__osmux.html#gafee78ee4522a9caa238301d7b913dfd6',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5frtp_5fmsgb_5falloc_5fcb_150',['osmux_xfrm_output_set_rtp_msgb_alloc_cb',['../group__osmux.html#ga97187827e1f793f2392e54585343db32',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5frtp_5fpl_5ftype_151',['osmux_xfrm_output_set_rtp_pl_type',['../group__osmux.html#ga0d96c8a544e0ff56576615e0b2ac7774',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5frtp_5fssrc_152',['osmux_xfrm_output_set_rtp_ssrc',['../group__osmux.html#ga08151bad3c12df245d4c0e4f9c4ca966',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5ftx_5fcb_153',['osmux_xfrm_output_set_tx_cb',['../group__osmux.html#ga3936e43e881d0992648937417969ead1',1,'osmux_output.c']]] ]; html/search/all_2.js0000644000175000017500000000024714752517766013625 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/search_r.png0000644000175000017500000000105114752517766014564 0ustar buildbuildPNG  IHDR7ygAMA a cHRMms8zʴ3Dv6*bKGD̿ pHYs  tIME  OWIDAT(υAKQFI+ ]AFH* )$EP6T ܳ=rnѪ>AxGT%+Xp8;~'%u" !~\l:4t>)O7.^)2VD6$ZR> nܳ (:TU\8͇J%'N&Ir=tҗ̮,nbfB$ʩ6rfn9-Ë׻w4Bx6z|kmq$H zXjyzŏeXZEcs%tEXtdate:create2018-12-07T11:28:17+00:00-?C%tEXtdate:modify2018-12-07T11:28:17+00:00\bgIENDB`html/search/classes_3.html0000644000175000017500000000263714752517766015050 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/structamr__hdr__bwe.html0000644000175000017500000001123714752517766015734 0ustar buildbuild libosmo-netif: amr_hdr_bwe Struct Reference
    libosmo-netif 1.5.1.34-ada6
    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