html/0000755000175000017500000000000015057675337011024 5ustar buildbuildhtml/structosmux__in__handle.js0000644000175000017500000000017615057675337016305 0ustar buildbuildvar structosmux__in__handle = [ [ "osmux_seq", "structosmux__in__handle.html#a1ba076a41ef9c3413665b7444c6521cc", null ] ];html/jibuf_8h.html0000644000175000017500000002765015057675337013422 0ustar buildbuild libosmo-netif: include/osmocom/netif/jibuf.h File Reference
libosmo-netif 1.6.0.16-c51c
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.js0000644000175000017500000003556015057675337014147 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,6], "group__osmux.html#ga08151bad3c12df245d4c0e4f9c4ca966":[1,6,19], "group__osmux.html#ga0d96c8a544e0ff56576615e0b2ac7774":[1,6,18], "group__osmux.html#ga13655a3bdc68f5e96ad1fe1c03dc235e":[1,6,10], "group__osmux.html#ga3936e43e881d0992648937417969ead1":[1,6,20], "group__osmux.html#ga41a217bffa1b0ac095c98ab0fab82c25":[1,6,12], "group__osmux.html#ga90d58246bcd24a6126898cd6c47dddf4":[1,6,14], "group__osmux.html#ga96230b0431d5d4d91f2dd57a9c85c366":[1,6,11], "group__osmux.html#ga97187827e1f793f2392e54585343db32":[1,6,17], "group__osmux.html#ga9c7d30c0d7d9bc0caf744799d629d4cc":[1,6,8], "group__osmux.html#gaa076e54fa0d249721a4c7b174a8ed2d1":[1,6,15], "group__osmux.html#gaaac410425f6470396ae9db53ebb8dc44":[1,6,13], "group__osmux.html#gad61cdde332496df6d7350d147e50b8be":[1,6,9], "group__osmux.html#gaf654e092ca97dd764f59905a2ed21650":[1,6,7], "group__osmux.html#gafee78ee4522a9caa238301d7b913dfd6":[1,6,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,30], "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,40], "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,35], "group__stream__cli.html#ga798f23db7e2e1d999775589db8a73d03":[1,3,34], "group__stream__cli.html#ga79a09e9c9b8cc98991cd5eebdb41ed57":[1,3,11], "group__stream__cli.html#ga86b4b9c8e563f8426d3cdae803e3ec38":[1,3,12], "group__stream__cli.html#ga889f96540a1a2271a40dee063eaf5e9d":[1,3,39], "group__stream__cli.html#ga91d57aa94a370520540d7272af66a23b":[1,3,33], "group__stream__cli.html#ga9d0dac2f390c660c85fa347765f4f45a":[1,3,4], "group__stream__cli.html#gaa196e78db6ca32abb1473566b4f1b04b":[1,3,29], "group__stream__cli.html#gaab1e7ef0ccc88e124c5f7bbb5e46c29c":[1,3,18], "group__stream__cli.html#gaacf415b97e1184baadeee5c60387422b":[1,3,16], "group__stream__cli.html#gab6094559935824750d82b9164ed76910":[1,3,37], "group__stream__cli.html#gab8b9f65bebfeb83c6e33d102e9439770":[1,3,31], "group__stream__cli.html#gac32d0489dd05ab89fb0c54dfd360d5b3":[1,3,7], "group__stream__cli.html#gac3ec56e61ce062300ad1df73a5f2c7f8":[1,3,32], "group__stream__cli.html#gacf917820669504d5f2856eaf74508921":[1,3,28], "group__stream__cli.html#gad217c1c1b83ac852e090afd49146db19":[1,3,2], "group__stream__cli.html#gade74792afe35f31dd2584c888db3dd62":[1,3,36], "group__stream__cli.html#gaeb712dc553735736047f9b11d9583baa":[1,3,27], "group__stream__cli.html#gaecd148ae11f2f619aa52dd2900a15827":[1,3,10], "group__stream__cli.html#gaf62f1dbe4570d8ffd00b3bdc3f28d24b":[1,3,38], "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#ga0e7adb8aef2f007144d4df24b21fbfe4":[1,2,43], "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,46], "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,45], "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#ga7af35085592c1dbaf2a3b6be1b49bef2":[1,2,42], "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,44], "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], "group__twjit.html":[1,4], "group__twjit.html#ga259b383e11fc673da0e931a806c20f91":[1,4,2], "group__twjit.html#ga260c4ebd28ed8592c4b04fc9cadc2935":[1,4,7], "group__twjit.html#ga40f81a7ab7af3942e540a50bb367ae56":[1,4,13], "group__twjit.html#ga4e56a380bf9751aaf6f6fc323c747c2c":[1,4,4], "group__twjit.html#ga55d8b223908b5a638ec62983fcfc7706":[1,4,6], "group__twjit.html#ga63204cb283949fd8c4417142616f6591":[1,4,5], "group__twjit.html#ga76bed8e0f9d9a23d8d6fea1d8b62abbf":[1,4,17], "group__twjit.html#ga77a05c62c2cc131b4ca8a00cf8ecca62":[1,4,11], "group__twjit.html#ga7a0b80aa4271d55bbb720a73ab4db421":[1,4,18], "group__twjit.html#ga7c28897aed4b25c3ede1a67fc5e6ae95":[1,4,12], "group__twjit.html#ga8c272a9f3344a110dce9e6d66d505493":[1,4,9], "group__twjit.html#ga8df47e86d7ead591db87da21c73e8dda":[1,4,8], "group__twjit.html#ga930cda4155d06b50b87fcdc1785e7bec":[1,4,19], "group__twjit.html#gaad365cac430364b862957f46eaaca391":[1,4,16], "group__twjit.html#gaeaa7314c9ee2efbdce688cc13b63b463":[1,4,3], "group__twjit.html#gaeb5d008cacb7d8329c0f0fffb4463504":[1,4,14], "group__twjit.html#gaec23d0393bcf6a30efc503e167afff1b":[1,4,10], "group__twjit.html#gaf3383fd56f33f86d21aa41afe318c064":[1,4,15], "group__twrtp.html":[1,5], "group__twrtp.html#ga059c9fdc8016d0e872d226f7980fd872":[1,5,5], "group__twrtp.html#ga0cb9e5f4ea6238a051d3fc51cb39e6fa":[1,5,11], "group__twrtp.html#ga1476c1b31757949bbc7777bee60e5666":[1,5,12], "group__twrtp.html#ga1d22a40f737ead143bfca1d75259aba2":[1,5,20], "group__twrtp.html#ga2907d4ec5bdd2bbb32f37d72b3275d94":[1,5,23], "group__twrtp.html#ga2e365e51cc37adb56a77b9c2bfa26683":[1,5,25], "group__twrtp.html#ga4fb17a2a0eb8d531c934d6e129e45265":[1,5,15], "group__twrtp.html#ga5630b784627262f27ca75b524e094a73":[1,5,3], "group__twrtp.html#ga6b1118cac2c6362a7de38d4aba7eb2c6":[1,5,14], "group__twrtp.html#ga8072fe44546bcfe663a06ae56efa4db8":[1,5,18], "group__twrtp.html#ga85635115eb97f0400ca9698dc1e6fb41":[1,5,19], "group__twrtp.html#ga971ca670aa852281620c69cbd69a57e8":[1,5,26], "group__twrtp.html#ga98fce03a5a6dd6a58759c43b3ecb536b":[1,5,16], "group__twrtp.html#gaa2cb81a157a22376b0c51ffc2421760e":[1,5,7], "group__twrtp.html#gaa712a64e760d07cc5c22cbf2d5772ce9":[1,5,17], "group__twrtp.html#gaaebac4722d129a840d35a3d0c0aa63a7":[1,5,1], "group__twrtp.html#gaaee07c8c0e31f8551868079a18cb29cf":[1,5,6], "group__twrtp.html#gaaf8aa5a57b46f846b865cb370b36a52e":[1,5,21], "group__twrtp.html#gab331b2461929cbfd4f26b34b11060fd9":[1,5,13], "group__twrtp.html#gab5cb8eab0ff864174338d6e8cab24b2b":[1,5,8], "group__twrtp.html#gacaa8b25a610a5ed982eba709a516c3e2":[1,5,22], "group__twrtp.html#gacd7e9922bc1682c51befe67e8fccbbd0":[1,5,10], "group__twrtp.html#gacf8121473c5a45b5710a0b95d8e16575":[1,5,2], "group__twrtp.html#gadf5ed8a54818f6705d1e036c3ddd9cf5":[1,5,4], "group__twrtp.html#gae20168f9074f530ae0d9270697fadaeb":[1,5,24], "group__twrtp.html#gafe2455fdfebeda8f4b810ceae34311b1":[1,5,9], "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,6,1], "osmux_8h.html":[1,6,0], "osmux__input_8c.html":[1,6,2], "osmux__output_8c.html":[1,6,3], "pages.html":[], "prim_8h_source.html":[3,0,0,0,0,6], "rs232_8h_source.html":[3,0,0,0,0,7], "rtcp__defs_8h_source.html":[3,0,0,0,0,8], "rtp_8h_source.html":[3,0,0,0,0,9], "sctp_8h_source.html":[3,0,0,0,0,10], "stream_8h.html":[3,0,0,0,0,11], "stream_8h.html#a123b7866ed4985a81246bfede79a8ea9":[3,0,0,0,0,11,2], "stream_8h.html#a2693c0cc5c6222dd9ed42c8c4bf8aec8":[3,0,0,0,0,11,0], "stream_8h.html#ac2c359892ad63309b59a4b402f6a3e81":[3,0,0,0,0,11,1], "stream_8h_source.html":[3,0,0,0,0,11], "stream__cli_8c.html":[3,0,1,5], "stream__private_8h_source.html":[3,0,0,0,0,12], "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], "structosmo__twjit__rr__info.html":[1,4,1], "structosmo__twjit__rr__info.html#a55a2069db2d025292d2f54d14abfa0db":[1,4,1,0], "structosmo__twjit__rr__info.html#a5f3d83ca8470d45943991164b22969e7":[1,4,1,4], "structosmo__twjit__rr__info.html#a87354c21b9215ee56d87dcb5a7606a78":[1,4,1,2], "structosmo__twjit__rr__info.html#a95023909bd6410be60a3ec0fb4e34981":[1,4,1,5], "structosmo__twjit__rr__info.html#aac5a9bf8abb41a803da8592cee7e3148":[1,4,1,3], "structosmo__twjit__rr__info.html#ad31676a36b0ba3634ecbd3b93aac8c5e":[1,4,1,1], "structosmo__twjit__stats.html":[1,4,0], "structosmo__twrtp__stats.html":[1,5,0], "structosmux__hdr.html":[1,6,4], "structosmux__in__handle.html":[1,6,5], "structosmux__in__handle.html#a1ba076a41ef9c3413665b7444c6521cc":[1,6,5,0] }; html/group__osmux.html0000644000175000017500000013754515057675337014457 0ustar buildbuild libosmo-netif: Osmocom Multiplex Protocol
libosmo-netif 1.6.0.16-c51c
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.js0000644000175000017500000000142115057675337013051 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.html0000644000175000017500000004222715057675337015044 0ustar buildbuild libosmo-netif: src/osmux_input.c File Reference
libosmo-netif 1.6.0.16-c51c
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.html0000644000175000017500000005553315057675337014363 0ustar buildbuild libosmo-netif: Globals
libosmo-netif 1.6.0.16-c51c
Osmocom network interface library
 

- o -

html/datagram_8h_source.html0000644000175000017500000007252115057675337015460 0ustar buildbuild libosmo-netif: include/osmocom/netif/datagram.h Source File
libosmo-netif 1.6.0.16-c51c
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.js0000644000175000017500000001261615057675337012671 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.js0000644000175000017500000000072415057675337017034 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/structrtcp__sr__block.html0000644000175000017500000001431415057675337016306 0ustar buildbuild libosmo-netif: rtcp_sr_block Struct Reference
libosmo-netif 1.6.0.16-c51c
Osmocom network interface library
rtcp_sr_block Struct Reference

Data Fields

uint32_t ntp_sec
 
uint32_t ntp_fract
 
uint32_t rtp_ts
 
uint32_t pkt_count
 
uint32_t octet_count
 

The documentation for this struct was generated from the following file:
html/stream_8h.html0000644000175000017500000023103715057675337013612 0ustar buildbuild libosmo-netif: include/osmocom/netif/stream.h File Reference
libosmo-netif 1.6.0.16-c51c
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 ,
  OSMO_STREAM_SRV_LINK_PAR_TCP_SOCKOPT_KEEPALIVE = 256 , OSMO_STREAM_SRV_LINK_PAR_TCP_SOCKOPT_KEEPIDLE , OSMO_STREAM_SRV_LINK_PAR_TCP_SOCKOPT_KEEPINTVL , OSMO_STREAM_SRV_LINK_PAR_TCP_SOCKOPT_KEEPCNT ,
  OSMO_STREAM_SRV_LINK_PAR_TCP_SOCKOPT_USER_TIMEOUT
}
 
enum  osmo_stream_srv_param {
  OSMO_STREAM_SRV_PAR_TCP_SOCKOPT_KEEPALIVE = 256 , OSMO_STREAM_SRV_PAR_TCP_SOCKOPT_KEEPIDLE , OSMO_STREAM_SRV_PAR_TCP_SOCKOPT_KEEPINTVL , OSMO_STREAM_SRV_PAR_TCP_SOCKOPT_KEEPCNT ,
  OSMO_STREAM_SRV_PAR_TCP_SOCKOPT_USER_TIMEOUT
}
 
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 , OSMO_STREAM_CLI_PAR_TCP_SOCKOPT_KEEPALIVE = 256 , OSMO_STREAM_CLI_PAR_TCP_SOCKOPT_KEEPIDLE ,
  OSMO_STREAM_CLI_PAR_TCP_SOCKOPT_KEEPINTVL , OSMO_STREAM_CLI_PAR_TCP_SOCKOPT_KEEPCNT , OSMO_STREAM_CLI_PAR_TCP_SOCKOPT_USER_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 domain 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...
 
void osmo_stream_srv_set_name_f (struct osmo_stream_srv *conn, const char *fmt,...)
 Set a name on the srv object using arguments like printf() (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)
 
int osmo_stream_srv_set_param (struct osmo_stream_srv *conn, enum osmo_stream_srv_param par, void *val, size_t val_len)
 Set given parameter of stream_srv to given value. 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...
 
void osmo_stream_cli_set_name_f (struct osmo_stream_cli *cli, const char *fmt,...)
 Set a name on the cli object using arguments like printf() (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 domain for the stream client 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/twrtp_8h_source.html0000644000175000017500000011113515057675337015053 0ustar buildbuild libosmo-netif: include/osmocom/netif/twrtp.h Source File
libosmo-netif 1.6.0.16-c51c
Osmocom network interface library
twrtp.h
1/*
2 * Themyscira Wireless RTP endpoint implementation:
3 * public API definition for Osmocom-integrated version.
4 *
5 * This code was contributed to Osmocom Cellular Network Infrastructure
6 * project by Mother Mychaela N. Falconia of Themyscira Wireless.
7 * Mother Mychaela's contributions are NOT subject to copyright:
8 * no rights reserved, all rights relinquished.
9 */
10
11#pragma once
12
13#include <stdint.h>
14#include <stdbool.h>
15
16#include <osmocom/core/msgb.h>
17#include <osmocom/core/socket.h>
18
121struct osmo_twrtp;
122
133 /* For ABI reasons, none of the following fields may be deleted
134 * or reordered! */
135 uint32_t rx_rtp_pkt;
136 uint32_t rx_rtp_badsrc;
137 uint32_t rx_rtcp_pkt;
138 uint32_t rx_rtcp_badsrc;
139 uint32_t rx_rtcp_invalid;
140 uint32_t rx_rtcp_wrong_ssrc;
141 uint32_t tx_rtp_pkt;
142 uint32_t tx_rtp_bytes;
143 uint32_t tx_rtcp_pkt;
144 /* New fields may be added here at the end; once added, they become
145 * permanent like the initially defined ones. */
146};
147
148/* declare structs that are used in our API */
149
150struct osmo_twjit;
151struct osmo_twjit_config;
152struct osmo_twjit_stats;
153struct osmo_twjit_rr_info;
154
155/* public API functions: create & destroy, local and remote addresses */
156
157struct osmo_twrtp *
158osmo_twrtp_create(void *ctx, uint16_t clock_khz, uint16_t quantum_ms,
159 bool random_ts_seq,
160 const struct osmo_twjit_config *twjit_config);
161void osmo_twrtp_destroy(struct osmo_twrtp *endp);
162
163int osmo_twrtp_supply_fds(struct osmo_twrtp *endp, int rtp_fd, int rtcp_fd);
164int osmo_twrtp_bind_local(struct osmo_twrtp *endp,
165 const struct osmo_sockaddr *rtp_addr, bool bind_rtcp);
166int osmo_twrtp_set_remote(struct osmo_twrtp *endp,
167 const struct osmo_sockaddr *rtp_addr);
168
169/* receiving incoming RTP via twjit */
170
171void osmo_twrtp_twjit_rx_ctrl(struct osmo_twrtp *endp, bool rx_enable);
172
173/* output function, to be called by TDM/GSM/etc fixed-timing side */
174struct msgb *osmo_twrtp_twjit_rx_poll(struct osmo_twrtp *endp);
175
176/* receiving incoming RTP without twjit */
177
178/* callback function takes ownership of msgb *if* it returns true */
179typedef bool (*osmo_twrtp_raw_rx_cb)(struct osmo_twrtp *endp, void *user_data,
180 struct msgb *msg);
181
182void osmo_twrtp_set_raw_rx_cb(struct osmo_twrtp *endp, osmo_twrtp_raw_rx_cb cb,
183 void *user_data);
184
185/* RTP Tx direction */
186
187int osmo_twrtp_tx_quantum(struct osmo_twrtp *endp, const uint8_t *payload,
188 unsigned payload_len, uint8_t payload_type,
189 bool marker, bool auto_marker, bool send_rtcp);
190void osmo_twrtp_tx_skip(struct osmo_twrtp *endp);
191void osmo_twrtp_tx_restart(struct osmo_twrtp *endp);
192
193int osmo_twrtp_tx_forward(struct osmo_twrtp *endp, struct msgb *msg);
194
195/* support for emitting RTCP SR & RR */
196
197int osmo_twrtp_set_sdes(struct osmo_twrtp *endp, const char *cname,
198 const char *name, const char *email, const char *phone,
199 const char *loc, const char *tool, const char *note);
200void osmo_twrtp_set_auto_rtcp_interval(struct osmo_twrtp *endp,
201 uint16_t interval);
202
203int osmo_twrtp_send_rtcp_rr(struct osmo_twrtp *endp);
204
205/* information retrieval functions */
206
207struct osmo_twjit *osmo_twrtp_get_twjit(struct osmo_twrtp *endp);
208
209const struct osmo_twrtp_stats *osmo_twrtp_get_stats(struct osmo_twrtp *endp);
210
211/* have we received at least one RTCP RR matching our RTP Tx output? */
212bool osmo_twrtp_got_rtcp_rr(struct osmo_twrtp *endp);
213
214/* retrieving RTCP RR info: valid only if above function returned true */
215uint32_t osmo_twrtp_rr_lost_word(struct osmo_twrtp *endp);
216int32_t osmo_twrtp_rr_lost_cumulative(struct osmo_twrtp *endp);
217uint32_t osmo_twrtp_rr_jitter_last(struct osmo_twrtp *endp);
218uint32_t osmo_twrtp_rr_jitter_max(struct osmo_twrtp *endp);
219
220/* socket-related miscellany */
221
222int osmo_twrtp_get_rtp_fd(struct osmo_twrtp *endp);
223int osmo_twrtp_get_rtcp_fd(struct osmo_twrtp *endp);
224
225int osmo_twrtp_set_dscp(struct osmo_twrtp *endp, uint8_t dscp);
226int osmo_twrtp_set_socket_prio(struct osmo_twrtp *endp, int prio);
227
int osmo_twrtp_get_rtp_fd(struct osmo_twrtp *endp)
Retrieve file descriptor for RTP UDP socket.
Definition: twrtp.c:1203
int32_t osmo_twrtp_rr_lost_cumulative(struct osmo_twrtp *endp)
Info from received RTCP RR: cumulative number of packets lost.
Definition: twrtp.c:1123
uint32_t osmo_twrtp_rr_lost_word(struct osmo_twrtp *endp)
Info from received RTCP RR: lost packets word.
Definition: twrtp.c:1109
int osmo_twrtp_supply_fds(struct osmo_twrtp *endp, int rtp_fd, int rtcp_fd)
Equip twrtp endpoint with RTP and RTCP sockets (supplied file descriptors)
Definition: twrtp.c:298
int osmo_twrtp_tx_forward(struct osmo_twrtp *endp, struct msgb *msg)
Forward RTP packet between endpoints.
Definition: twrtp.c:739
void osmo_twrtp_tx_restart(struct osmo_twrtp *endp)
Reset output stream cadence.
Definition: twrtp.c:721
int osmo_twrtp_set_dscp(struct osmo_twrtp *endp, uint8_t dscp)
Set DSCP (Differentiated Services Code Point) for emitted RTP and RTCP packets.
Definition: twrtp.c:1237
void osmo_twrtp_destroy(struct osmo_twrtp *endp)
Destroy a twrtp endpoint.
Definition: twrtp.c:253
void osmo_twrtp_set_auto_rtcp_interval(struct osmo_twrtp *endp, uint16_t interval)
Configure automatic emission of periodic RTCP SR packets.
Definition: twrtp.c:975
int osmo_twrtp_set_sdes(struct osmo_twrtp *endp, const char *cname, const char *name, const char *email, const char *phone, const char *loc, const char *tool, const char *note)
Set SDES strings for RTCP SR and RR packet generation.
Definition: twrtp.c:1000
int osmo_twrtp_set_socket_prio(struct osmo_twrtp *endp, int prio)
Set socket priority for emitted RTP and RTCP packets.
Definition: twrtp.c:1260
void osmo_twrtp_tx_skip(struct osmo_twrtp *endp)
Incur an intentional gap in the emitted RTP stream.
Definition: twrtp.c:704
void osmo_twrtp_set_raw_rx_cb(struct osmo_twrtp *endp, osmo_twrtp_raw_rx_cb cb, void *user_data)
Set callback function for unbuffered/non-delayed Rx path.
Definition: twrtp.c:555
struct osmo_twjit * osmo_twrtp_get_twjit(struct osmo_twrtp *endp)
Get twjit from twrtp.
Definition: twrtp.c:1174
int osmo_twrtp_set_remote(struct osmo_twrtp *endp, const struct osmo_sockaddr *rtp_addr)
Set RTP remote address.
Definition: twrtp.c:449
int osmo_twrtp_bind_local(struct osmo_twrtp *endp, const struct osmo_sockaddr *rtp_addr, bool bind_rtcp)
Equip twrtp endpoint with locally bound RTP and RTCP sockets.
Definition: twrtp.c:375
const struct osmo_twrtp_stats * osmo_twrtp_get_stats(struct osmo_twrtp *endp)
Retrieve lifetime stats from twrtp instance.
Definition: twrtp.c:1189
void osmo_twrtp_twjit_rx_ctrl(struct osmo_twrtp *endp, bool rx_enable)
Enable or disable Rx via twjit.
Definition: twrtp.c:509
int osmo_twrtp_send_rtcp_rr(struct osmo_twrtp *endp)
Emit RTCP RR packet.
Definition: twrtp.c:964
bool osmo_twrtp_got_rtcp_rr(struct osmo_twrtp *endp)
Have we received any RTCP RR?
Definition: twrtp.c:1093
struct msgb * osmo_twrtp_twjit_rx_poll(struct osmo_twrtp *endp)
Fixed-timing output poll from the twrtp endpoint's twjit buffer.
Definition: twrtp.c:527
uint32_t osmo_twrtp_rr_jitter_max(struct osmo_twrtp *endp)
Info from received RTCP RR: interarrival jitter, highest received.
Definition: twrtp.c:1150
struct osmo_twrtp * osmo_twrtp_create(void *ctx, uint16_t clock_khz, uint16_t quantum_ms, bool random_ts_seq, const struct osmo_twjit_config *twjit_config)
\addgroup twrtp
Definition: twrtp.c:217
int osmo_twrtp_get_rtcp_fd(struct osmo_twrtp *endp)
Retrieve file descriptor for RTCP UDP socket.
Definition: twrtp.c:1219
int osmo_twrtp_tx_quantum(struct osmo_twrtp *endp, const uint8_t *payload, unsigned payload_len, uint8_t payload_type, bool marker, bool auto_marker, bool send_rtcp)
Emit RTP packet carrying a locally sourced quantum of speech/data.
Definition: twrtp.c:606
uint32_t osmo_twrtp_rr_jitter_last(struct osmo_twrtp *endp)
Info from received RTCP RR: interarrival jitter, most recent.
Definition: twrtp.c:1139
Info collected from the incoming RTP data stream for the purpose of generating RTCP reception report ...
Definition: twjit.h:100
Stats collected during the lifetime of a twjit instance.
Definition: twjit.h:59
Stats collected during the lifetime of a twrtp instance.
Definition: twrtp.h:132
html/jibuf_8c.html0000644000175000017500000003774415057675337013422 0ustar buildbuild libosmo-netif: src/jibuf.c File Reference
libosmo-netif 1.6.0.16-c51c
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.html0000644000175000017500000001121415057675337014754 0ustar buildbuild libosmo-netif: Data Fields - Variables
libosmo-netif 1.6.0.16-c51c
Osmocom network interface library
 
html/menu.js0000644000175000017500000001335215057675337012332 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.png0000644000175000017500000000025115057675337012577 0ustar buildbuildPNG  IHDR$[pIDATxM EǻԸu`V0}:t]Ds䮂u|x>1&m8SxLU޲iEOsnxKN~jIENDB`html/group__twrtp.js0000644000175000017500000000503615057675337014121 0ustar buildbuildvar group__twrtp = [ [ "osmo_twrtp_stats", "structosmo__twrtp__stats.html", null ], [ "osmo_twrtp_bind_local", "group__twrtp.html#gaaebac4722d129a840d35a3d0c0aa63a7", null ], [ "osmo_twrtp_create", "group__twrtp.html#gacf8121473c5a45b5710a0b95d8e16575", null ], [ "osmo_twrtp_destroy", "group__twrtp.html#ga5630b784627262f27ca75b524e094a73", null ], [ "osmo_twrtp_get_rtcp_fd", "group__twrtp.html#gadf5ed8a54818f6705d1e036c3ddd9cf5", null ], [ "osmo_twrtp_get_rtp_fd", "group__twrtp.html#ga059c9fdc8016d0e872d226f7980fd872", null ], [ "osmo_twrtp_get_stats", "group__twrtp.html#gaaee07c8c0e31f8551868079a18cb29cf", null ], [ "osmo_twrtp_get_twjit", "group__twrtp.html#gaa2cb81a157a22376b0c51ffc2421760e", null ], [ "osmo_twrtp_got_rtcp_rr", "group__twrtp.html#gab5cb8eab0ff864174338d6e8cab24b2b", null ], [ "osmo_twrtp_rr_jitter_last", "group__twrtp.html#gafe2455fdfebeda8f4b810ceae34311b1", null ], [ "osmo_twrtp_rr_jitter_max", "group__twrtp.html#gacd7e9922bc1682c51befe67e8fccbbd0", null ], [ "osmo_twrtp_rr_lost_cumulative", "group__twrtp.html#ga0cb9e5f4ea6238a051d3fc51cb39e6fa", null ], [ "osmo_twrtp_rr_lost_word", "group__twrtp.html#ga1476c1b31757949bbc7777bee60e5666", null ], [ "osmo_twrtp_send_rtcp_rr", "group__twrtp.html#gab331b2461929cbfd4f26b34b11060fd9", null ], [ "osmo_twrtp_set_auto_rtcp_interval", "group__twrtp.html#ga6b1118cac2c6362a7de38d4aba7eb2c6", null ], [ "osmo_twrtp_set_dscp", "group__twrtp.html#ga4fb17a2a0eb8d531c934d6e129e45265", null ], [ "osmo_twrtp_set_raw_rx_cb", "group__twrtp.html#ga98fce03a5a6dd6a58759c43b3ecb536b", null ], [ "osmo_twrtp_set_remote", "group__twrtp.html#gaa712a64e760d07cc5c22cbf2d5772ce9", null ], [ "osmo_twrtp_set_sdes", "group__twrtp.html#ga8072fe44546bcfe663a06ae56efa4db8", null ], [ "osmo_twrtp_set_socket_prio", "group__twrtp.html#ga85635115eb97f0400ca9698dc1e6fb41", null ], [ "osmo_twrtp_supply_fds", "group__twrtp.html#ga1d22a40f737ead143bfca1d75259aba2", null ], [ "osmo_twrtp_twjit_rx_ctrl", "group__twrtp.html#gaaf8aa5a57b46f846b865cb370b36a52e", null ], [ "osmo_twrtp_twjit_rx_poll", "group__twrtp.html#gacaa8b25a610a5ed982eba709a516c3e2", null ], [ "osmo_twrtp_tx_forward", "group__twrtp.html#ga2907d4ec5bdd2bbb32f37d72b3275d94", null ], [ "osmo_twrtp_tx_quantum", "group__twrtp.html#gae20168f9074f530ae0d9270697fadaeb", null ], [ "osmo_twrtp_tx_restart", "group__twrtp.html#ga2e365e51cc37adb56a77b9c2bfa26683", null ], [ "osmo_twrtp_tx_skip", "group__twrtp.html#ga971ca670aa852281620c69cbd69a57e8", null ] ];html/osmux_8c.html0000644000175000017500000002010115057675337013451 0ustar buildbuild libosmo-netif: src/osmux.c File Reference
    libosmo-netif 1.6.0.16-c51c
    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.html0000644000175000017500000011574015057675337014575 0ustar buildbuild libosmo-netif: src/stream_cli.c File Reference
    libosmo-netif 1.6.0.16-c51c
    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...
     
    void osmo_stream_cli_set_name_f (struct osmo_stream_cli *cli, const char *fmt,...)
     Set a name on the cli object using arguments like printf() (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 domain for the stream client 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/version_8h_source.html0000644000175000017500000001517515057675337015367 0ustar buildbuild libosmo-netif: include/osmocom/netif/version.h Source File
    libosmo-netif 1.6.0.16-c51c
    Osmocom network interface library
    version.h
    1#pragma once
    2
    3#define LIBOSMO_NETIF_VERSION 1.6.0
    4#define LIBOSMO_NETIF_VERSION_STR "1.6.0"
    5
    6#define LIBOSMO_NETIF_VERSION_MAJOR 1
    7#define LIBOSMO_NETIF_VERSION_MINOR 6
    8#define LIBOSMO_NETIF_VERSION_PATCH 0
    9
    10#define LIBOSMO_NETIF_VERSION_GREATER_EQUAL(major, minor, patch) \
    11 (LIBOSMO_NETIF_VERSION_MAJOR > (major) || \
    12 (LIBOSMO_NETIF_VERSION_MAJOR == (major) && \
    13 LIBOSMO_NETIF_VERSION_MINOR > (minor)) || \
    14 (LIBOSMO_NETIF_VERSION_MAJOR == (major) && \
    15 LIBOSMO_NETIF_VERSION_MINOR == (minor) && \
    16 LIBOSMO_NETIF_VERSION_PATCH >= (patch)))
    html/datagram_8h.js0000644000175000017500000000575115057675337013551 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.png0000644000175000017500000000047215057675337013355 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.js0000644000175000017500000000156515057675337014043 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.html0000644000175000017500000010441715057675337014457 0ustar buildbuild libosmo-netif: include/osmocom/netif/amr.h Source File
    libosmo-netif 1.6.0.16-c51c
    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.js0000644000175000017500000000113115057675337013026 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" ], [ "Themyscira Wireless RTP jitter buffer implementation", "group__twjit.html", "group__twjit" ], [ "Themyscira Wireless RTP endpoint implementation", "group__twrtp.html", "group__twrtp" ], [ "Osmocom Multiplex Protocol", "group__osmux.html", "group__osmux" ] ];html/dir_abe9b486a10ccc5afdf8abc29637e0c1.html0000644000175000017500000001071715057675337017505 0ustar buildbuild libosmo-netif: include/osmocom Directory Reference
    libosmo-netif 1.6.0.16-c51c
    Osmocom network interface library
    osmocom Directory Reference

    Directories

    directory  netif
     
    html/structrtp__hdr.html0000644000175000017500000001342415057675337014764 0ustar buildbuild libosmo-netif: rtp_hdr Struct Reference
    libosmo-netif 1.6.0.16-c51c
    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.js0000644000175000017500000001027415057675337014241 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_name_f", "group__stream__cli.html#gacf917820669504d5f2856eaf74508921", 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.png0000644000175000017500000000135215057675337012300 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/twjit__private_8h_source.html0000644000175000017500000001672215057675337016733 0ustar buildbuild libosmo-netif: include/osmocom/netif/twjit_private.h Source File
    libosmo-netif 1.6.0.16-c51c
    Osmocom network interface library
    twjit_private.h
    1/*
    2 * Themyscira Wireless RTP jitter buffer implementation:
    3 * internal config structure.
    4 *
    5 * This code was contributed to Osmocom Cellular Network Infrastructure
    6 * project by Mother Mychaela N. Falconia of Themyscira Wireless.
    7 * Mother Mychaela's contributions are NOT subject to copyright:
    8 * no rights reserved, all rights relinquished.
    9 */
    10
    11#pragma once
    12
    13#include <stdint.h>
    14#include <stdbool.h>
    15
    33struct osmo_twjit_config {
    36 uint16_t bd_start;
    39 uint16_t bd_hiwat;
    42 uint16_t thinning_int;
    45 uint16_t max_future_sec;
    48 uint16_t start_min_delta;
    51 uint16_t start_max_delta;
    58 bool handover_on_marker;
    59};
    60
    html/datagram_8c.js0000644000175000017500000000575115057675337013544 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.html0000644000175000017500000003415015057675337015643 0ustar buildbuild libosmo-netif: include/osmocom/netif/ipa_unit.h Source File
    libosmo-netif 1.6.0.16-c51c
    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.png0000644000175000017500000000027015057675337012621 0ustar buildbuildPNG  IHDR$[IDATx݁ @@ѣ?Q"%If6[HQ<]dr s?O=w'F -~rÍ[芭m֬ݯнF)Y% `n,9B!ь\<#IENDB`html/globals_type.html0000644000175000017500000000766615057675337014415 0ustar buildbuild libosmo-netif: Globals
    libosmo-netif 1.6.0.16-c51c
    Osmocom network interface library
     
    • osmo_stream_cli_read_cb2_t : stream.h
    • osmo_stream_srv_read_cb2_t : stream.h
    html/stream__srv_8c.html0000644000175000017500000012773115057675337014643 0ustar buildbuild libosmo-netif: src/stream_srv.c File Reference
    libosmo-netif 1.6.0.16-c51c
    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 domain 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...
     
    void osmo_stream_srv_set_name_f (struct osmo_stream_srv *conn, const char *fmt,...)
     Set a name on the srv object using arguments like printf() (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)
     
    int osmo_stream_srv_set_param (struct osmo_stream_srv *conn, enum osmo_stream_srv_param par, void *val, size_t val_len)
     Set given parameter of stream_srv to given value. More...
     

    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/structosmo__twjit__stats.html0000644000175000017500000003067015057675337017077 0ustar buildbuild libosmo-netif: osmo_twjit_stats Struct Reference
    libosmo-netif 1.6.0.16-c51c
    Osmocom network interface library

    Stats collected during the lifetime of a twjit instance. More...

    #include <twjit.h>

    Data Fields

    uint32_t rx_packets
     
    uint32_t delivered_pkt
     
    uint32_t handovers_in
     
    uint32_t handovers_out
     
    uint32_t marker_resets
     
    uint32_t too_old
     
    uint32_t underruns
     
    uint32_t ho_underruns
     
    uint32_t output_gaps
     
    uint32_t thinning_drops
     
    uint32_t bad_packets
     
    uint32_t duplicate_ts
     
    uint32_t ssrc_changes
     
    uint32_t seq_skips
     
    uint32_t seq_backwards
     
    uint32_t seq_repeats
     
    uint32_t intentional_gaps
     
    uint32_t ts_resets
     
    uint32_t jitter_max
     

    Detailed Description

    Stats collected during the lifetime of a twjit instance.

    For a detailed description of each of these counters, see Chapter 3 of twrtp guide document.

    This stats structure is never allocated or accessed in a writable manner by applications; instead it is allocated inside the library as part of opaque struct osmo_twjit, while applications are given const pointers to these structs.


    The documentation for this struct was generated from the following file:
    html/doxygen.css0000644000175000017500000010161415057675337013216 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.html0000644000175000017500000005727115057675337013351 0ustar buildbuild libosmo-netif: Globals
    libosmo-netif 1.6.0.16-c51c
    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_name_f() : 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_name_f() : stream.h
    • osmo_stream_srv_set_param() : 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.html0000644000175000017500000002140715057675337016635 0ustar buildbuild libosmo-netif: osmux_in_handle Struct Reference
    libosmo-netif 1.6.0.16-c51c
    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.js0000644000175000017500000000215415057675337014211 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 ], [ "osmo_twjit_rr_info", "structosmo__twjit__rr__info.html", "structosmo__twjit__rr__info" ], [ "osmo_twjit_stats", "structosmo__twjit__stats.html", null ], [ "osmo_twrtp_stats", "structosmo__twrtp__stats.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 ], [ "rtcp_rr_block", "structrtcp__rr__block.html", null ], [ "rtcp_sr_block", "structrtcp__sr__block.html", null ], [ "rtcp_sr_rr_hdr", "structrtcp__sr__rr__hdr.html", null ], [ "rtp_hdr", "structrtp__hdr.html", null ], [ "rtp_x_hdr", "structrtp__x__hdr.html", null ] ];html/datagram_8c.html0000644000175000017500000006624215057675337014076 0ustar buildbuild libosmo-netif: src/datagram.c File Reference
    libosmo-netif 1.6.0.16-c51c
    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.html0000644000175000017500000002256215057675337017221 0ustar buildbuild libosmo-netif: include/osmocom/netif Directory Reference
    libosmo-netif 1.6.0.16-c51c
    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  rtcp_defs.h [code]
     
    file  rtp.h [code]
     
    file  sctp.h [code]
     
    file  stream.h [code]
     
    file  stream_private.h [code]
     
    file  twjit.h [code]
     
    file  twjit_private.h [code]
     
    file  twrtp.h [code]
     
    file  version.h [code]
     
    html/doxygen.svg0000644000175000017500000003602615057675337013231 0ustar buildbuild html/sync_off.png0000644000175000017500000000152515057675337013343 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.html0000644000175000017500000003352415057675337017064 0ustar buildbuild libosmo-netif: include/osmocom/netif/stream_private.h Source File
    libosmo-netif 1.6.0.16-c51c
    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 stream_tcp_keepalive_pars {
    33 bool enable;
    34 bool time_present;
    35 bool intvl_present;
    36 bool probes_present;
    37 int time_value; /* seconds */
    38 int intvl_value; /* seconds */
    39 int probes_value;
    40};
    41int stream_setsockopt_tcp_keepalive(int fd, int on);
    42int stream_setsockopt_tcp_keepidle(int fd, int keepalive_time);
    43int stream_setsockopt_tcp_keepintvl(int fd, int keepalive_intvl);
    44int stream_setsockopt_tcp_keepcnt(int fd, int keepalive_probes);
    45int stream_tcp_keepalive_pars_apply(int fd, const struct stream_tcp_keepalive_pars *tkp);
    46
    47struct stream_tcp_pars {
    48 struct stream_tcp_keepalive_pars ka;
    49 bool user_timeout_present;
    50 unsigned int user_timeout_value;
    51};
    52int stream_setsockopt_tcp_user_timeout(int fd, unsigned int user_timeout);
    53
    54struct osmo_io_fd;
    55struct msghdr;
    56
    57int stream_sctp_sock_activate_events(int fd);
    58int stream_setsockopt_nodelay(int fd, int proto, int on);
    59int stream_sctp_recvmsg_wrapper(int fd, struct msgb *msg, const char *log_pfx);
    60
    61int stream_iofd_sctp_send_msgb(struct osmo_io_fd *iofd, struct msgb *msg, int sendmsg_flags);
    62int stream_iofd_sctp_recvmsg_trailer(struct osmo_io_fd *iofd, struct msgb *msg, int ret, const struct msghdr *msgh);
    63
    html/tab_h.png0000644000175000017500000000026115057675337012606 0ustar buildbuildPNG  IHDR$[xIDATxM@~ΒEv"!d*rGq={SݧH uO^[_Xvyұ=VCff{R%_rug(?gh\i>|sIENDB`html/group__datagram.js0000644000175000017500000000611515057675337014520 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.png0000644000175000017500000000112515057675337013666 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.html0000644000175000017500000006344315057675337013476 0ustar buildbuild libosmo-netif: include/osmocom/netif/osmux.h File Reference
    libosmo-netif 1.6.0.16-c51c
    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.html0000644000175000017500000004214415057675337014775 0ustar buildbuild libosmo-netif: include/osmocom/netif/jibuf.h Source File
    libosmo-netif 1.6.0.16-c51c
    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:451
    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:462
    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:439
    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:429
    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:420
    A structure representing a single instance of a jitter buffer.
    Definition: jibuf.h:20
    html/navtreedata.js0000644000175000017500000000430415057675337013661 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", "structosmux__out__handle.html" ]; var SYNCONMSG = 'click to disable panel synchronisation'; var SYNCOFFMSG = 'click to enable panel synchronisation';html/nav_h.png0000644000175000017500000000014215057675337012622 0ustar buildbuildPNG  IHDR ,@)IDATxA @BQۛТ) ) aܿoRlIENDB`html/structrtp__x__hdr.html0000644000175000017500000001203215057675337015444 0ustar buildbuild libosmo-netif: rtp_x_hdr Struct Reference
    libosmo-netif 1.6.0.16-c51c
    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.js0000644000175000017500000000022415057675337017145 0ustar buildbuildvar dir_abe9b486a10ccc5afdf8abc29637e0c1 = [ [ "netif", "dir_15662fdf1b5c37dde6a3ed82e5410e57.html", "dir_15662fdf1b5c37dde6a3ed82e5410e57" ] ];html/rs232_8h_source.html0000644000175000017500000001735315057675337014555 0ustar buildbuild libosmo-netif: include/osmocom/netif/rs232.h Source File
    libosmo-netif 1.6.0.16-c51c
    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.html0000644000175000017500000004322415057675337014503 0ustar buildbuild libosmo-netif: include/osmocom/netif/rtp.h Source File
    libosmo-netif 1.6.0.16-c51c
    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.js0000644000175000017500000000407515057675337013166 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/group__twjit.html0000644000175000017500000014335615057675337014442 0ustar buildbuild libosmo-netif: Themyscira Wireless RTP jitter buffer implementation
    libosmo-netif 1.6.0.16-c51c
    Osmocom network interface library
    Themyscira Wireless RTP jitter buffer implementation

    The present twjit layer is an interface mechanism from an incoming RTP stream to an output application that has fixed timing requirements, e.g., the Tx side of GSM Um TCH or a T1/E1 TDM interface. More...

    Data Structures

    struct  osmo_twjit_stats
     Stats collected during the lifetime of a twjit instance. More...
     
    struct  osmo_twjit_rr_info
     Info collected from the incoming RTP data stream for the purpose of generating RTCP reception report blocks. More...
     

    Functions

    struct osmo_twjit_config * osmo_twjit_config_alloc (void *ctx)
     \addgroup twjit More...
     
    void osmo_twjit_config_free (struct osmo_twjit_config *conf)
     Free a twjit config instance. More...
     
    int osmo_twjit_config_set_buffer_depth (struct osmo_twjit_config *conf, uint16_t bd_start, uint16_t bd_hiwat)
     Non-vty function for buffer-depth setting. More...
     
    int osmo_twjit_config_set_thinning_int (struct osmo_twjit_config *conf, uint16_t thinning_int)
     Non-vty function for thinning-interval setting. More...
     
    int osmo_twjit_config_set_max_future_sec (struct osmo_twjit_config *conf, uint16_t max_future_sec)
     Non-vty function for max-future-sec setting. More...
     
    int osmo_twjit_config_set_start_min_delta (struct osmo_twjit_config *conf, uint16_t delta_ms)
     Non-vty function for start-min-delta setting. More...
     
    int osmo_twjit_config_set_start_max_delta (struct osmo_twjit_config *conf, uint16_t delta_ms)
     Non-vty function for start-max-delta setting. More...
     
    int osmo_twjit_config_set_handover_on_marker (struct osmo_twjit_config *conf, bool hom)
     Non-vty function for marker-handling setting. More...
     
    struct osmo_twjit * osmo_twjit_create (void *ctx, uint16_t clock_khz, uint16_t quantum_ms, const struct osmo_twjit_config *config)
     \addgroup twjit More...
     
    void osmo_twjit_destroy (struct osmo_twjit *twjit)
     Destroy a twjit instance. More...
     
    int osmo_twjit_set_config (struct osmo_twjit *twjit, const struct osmo_twjit_config *config)
     Change twjit config parameters. More...
     
    void osmo_twjit_reset (struct osmo_twjit *twjit)
     Reset twjit instance to empty initial state. More...
     
    void osmo_twjit_input (struct osmo_twjit *twjit, struct msgb *msg)
     Feed received RTP packet to twjit. More...
     
    struct msgb * osmo_twjit_output (struct osmo_twjit *twjit)
     Fixed-timing output poll from twjit buffer. More...
     
    const struct osmo_twjit_statsosmo_twjit_get_stats (struct osmo_twjit *twjit)
     Retrieve lifetime stats from twjit instance. More...
     
    const struct osmo_twjit_rr_infoosmo_twjit_get_rr_info (struct osmo_twjit *twjit)
     Retrieve RR info from twjit instance. More...
     
    bool osmo_twjit_rr_info_valid (struct osmo_twjit *twjit)
     Did this twjit instance ever receive RTP input? More...
     
    void osmo_twjit_vty_init (int twjit_node)
     
    int osmo_twjit_config_write (struct vty *vty, const struct osmo_twjit_config *conf, const char *prefix)
     Write out vty form of twjit config structure. More...
     
     DEFUN (cfg_buffer_depth, cfg_buffer_depth_cmd, "buffer-depth <1-65535> <1-65535>", "Buffer depth configuration\n" "Minimum fill required to start flow\n" "High water mark fill level\n")
     
     DEFUN (cfg_thinning, cfg_thinning_cmd, "thinning-interval <2-65535>", "Standing queue thinning configuration\n" "Drop every Nth packet\n")
     
     DEFUN (cfg_max_future, cfg_max_future_cmd, "max-future-sec <1-65535>", "Guard against time traveler packets\n" "Maximum permissible number of seconds into the future\n")
     
     DEFUN (cfg_start_min_delta, cfg_start_min_delta_cmd, "start-min-delta <1-65535>", "Minimum required delta in time-of-arrival to start flow\n" "Time delta value in ms\n")
     
     DEFUN (cfg_no_start_min_delta, cfg_no_start_min_delta_cmd, "no start-min-delta", NO_STR "Minimum required delta in time-of-arrival to start flow\n")
     
     DEFUN (cfg_start_max_delta, cfg_start_max_delta_cmd, "start-max-delta <1-65535>", "Maximum permitted gap in time-of-arrival in starting state\n" "Time delta value in ms\n")
     
     DEFUN (cfg_no_start_max_delta, cfg_no_start_max_delta_cmd, "no start-max-delta", NO_STR "Maximum permitted gap in time-of-arrival in starting state\n")
     
     DEFUN (cfg_marker_handling, cfg_marker_handling_cmd, "marker-handling (handover|ignore)", "How to handle RTP packets with marker bit set\n" "Invoke handover handling, same as SSRC change\n" "Ignore marker bit\n")
     

    Detailed Description

    The present twjit layer is an interface mechanism from an incoming RTP stream to an output application that has fixed timing requirements, e.g., the Tx side of GSM Um TCH or a T1/E1 TDM interface.

    For a more detailed description, please consult the full twrtp guide document that can be found in doc/twrtp directory. This document is required reading for anyone seeking to properly understand the present jitter buffer facility, its domain of application and how to use it. Specific section references to this document will be made in subsequent comments.

    Function Documentation

    ◆ osmo_twjit_config_alloc()

    struct osmo_twjit_config * osmo_twjit_config_alloc ( void *  ctx)

    \addgroup twjit

    Allocate and initialize twjit config structure

    Parameters
    [in]ctxParent talloc context under which struct osmo_twjit_config should be allocated.
    Returns
    pointer to the newly created twjit config instance, or NULL on errors.

    A typical application will have a struct osmo_twjit_config somewhere in the application config data structures, editable via vty. More complex applications may even have several such twjit config structures, to be used in different contexts such as GSM vs PSTN. However, in the present Osmocom-integrated version of twjit, this config structure has been made opaque for ABI reasons - hence config instances now have to be allocated by the library, rather than merely initialized in content.

    ◆ osmo_twjit_config_free()

    void osmo_twjit_config_free ( struct osmo_twjit_config *  conf)

    Free a twjit config instance.

    Parameters
    [in]confInstance to be freed

    ◆ osmo_twjit_config_set_buffer_depth()

    int osmo_twjit_config_set_buffer_depth ( struct osmo_twjit_config *  conf,
    uint16_t  bd_start,
    uint16_t  bd_hiwat 
    )

    Non-vty function for buffer-depth setting.

    Parameters
    [in]conftwjit config instance to operate on.
    [in]bd_startFlow-starting fill level, document section 2.3.3.
    [in]bd_hiwatHigh water mark fill level, document section 2.3.4.2.
    Returns
    0 if successful, negative on errors.

    ◆ osmo_twjit_config_set_handover_on_marker()

    int osmo_twjit_config_set_handover_on_marker ( struct osmo_twjit_config *  conf,
    bool  hom 
    )

    Non-vty function for marker-handling setting.

    Parameters
    [in]conftwjit config instance to operate on.
    [in]homHandover on marker if true, ignore marker bit if false.
    Returns
    0 if successful, negative on errors.

    ◆ osmo_twjit_config_set_max_future_sec()

    int osmo_twjit_config_set_max_future_sec ( struct osmo_twjit_config *  conf,
    uint16_t  max_future_sec 
    )

    Non-vty function for max-future-sec setting.

    Parameters
    [in]conftwjit config instance to operate on.
    [in]max_future_secMaximum number of seconds into the future, document section 2.3.4.3.
    Returns
    0 if successful, negative on errors.

    ◆ osmo_twjit_config_set_start_max_delta()

    int osmo_twjit_config_set_start_max_delta ( struct osmo_twjit_config *  conf,
    uint16_t  delta_ms 
    )

    Non-vty function for start-max-delta setting.

    Parameters
    [in]conftwjit config instance to operate on.
    [in]delta_msMaximum permitted ToA gap in ms, or 0 to disable this check; document section 2.3.3.2.
    Returns
    0 if successful, negative on errors.

    ◆ osmo_twjit_config_set_start_min_delta()

    int osmo_twjit_config_set_start_min_delta ( struct osmo_twjit_config *  conf,
    uint16_t  delta_ms 
    )

    Non-vty function for start-min-delta setting.

    Parameters
    [in]conftwjit config instance to operate on.
    [in]delta_msMinimum required ToA delta in ms, or 0 to disable this check; document section 2.3.3.2.
    Returns
    0 if successful, negative on errors.

    ◆ osmo_twjit_config_set_thinning_int()

    int osmo_twjit_config_set_thinning_int ( struct osmo_twjit_config *  conf,
    uint16_t  thinning_int 
    )

    Non-vty function for thinning-interval setting.

    Parameters
    [in]conftwjit config instance to operate on.
    [in]thinning_intThinning interval setting, document section 2.3.4.2.
    Returns
    0 if successful, negative on errors.

    ◆ osmo_twjit_config_write()

    int osmo_twjit_config_write ( struct vty *  vty,
    const struct osmo_twjit_config *  conf,
    const char *  prefix 
    )

    Write out vty form of twjit config structure.

    Parameters
    [in]vtyThe vty instance to which vty_out() calls should be made
    [in]confThe config structure to write out
    [in]prefixAdditional indent prefix to be prepended to each output line, defaults to "" if NULL
    Returns
    CMD_SUCCESS for vty system

    ◆ osmo_twjit_create()

    struct osmo_twjit * osmo_twjit_create ( void *  ctx,
    uint16_t  clock_khz,
    uint16_t  quantum_ms,
    const struct osmo_twjit_config *  config 
    )

    \addgroup twjit

    Create a twjit instance

    Parameters
    [in]ctxParent talloc context under which struct osmo_twjit should be allocated.
    [in]clock_khzRTP clock rate in kHz, i.e., number of RTP timestamp units per millisecond. The most common value is 8.
    [in]quantum_msDuration of a single quantum (unit of speech or data carried in one RTP packet) in milliseconds. The most common value is 20.
    [in]configSet of tunable configuration parameters to be used.
    Returns
    pointer to the newly created twjit instance, or NULL on errors.

    In contrast to the original twrtp-proto version, this version of osmo_twjit_create() copies the config structure, thus the application is not required to maintain it in the originally passed memory.

    Referenced by osmo_twrtp_create().

    ◆ osmo_twjit_destroy()

    void osmo_twjit_destroy ( struct osmo_twjit *  twjit)

    Destroy a twjit instance.

    Parameters
    [in]twjitInstance to be freed

    Memory freed by this function includes not only the instance structure, but also any msgbs that are held by this instance.

    Referenced by osmo_twrtp_destroy().

    ◆ osmo_twjit_get_rr_info()

    const struct osmo_twjit_rr_info * osmo_twjit_get_rr_info ( struct osmo_twjit *  twjit)

    Retrieve RR info from twjit instance.

    Parameters
    [in]twjitInstance to query
    Returns
    pointer to RR info structure

    The structure retrieved with this API is called RR info because it contains info that is needed in order to constuct RTCP reception reports describing the RTP stream received by this twjit instance. But of course this info can also be used for other statistics-related or monitoring-related purposes.

    The structure returned by this API is fully valid only if osmo_twjit_rr_info_valid() returns true. If that API returns false, the RR info structure returned by the present API should be considered invalid. More precisely, the "invalid" RR info structure will be all zeros on a freshly created twjit, or stale info if this twjit received some RTP input prior to being reset. There may be some applications that retrieve the RR info structure to report some non-critical stats; such uses are allowed even when this structure is invalid in the strict sense.

    ◆ osmo_twjit_get_stats()

    const struct osmo_twjit_stats * osmo_twjit_get_stats ( struct osmo_twjit *  twjit)

    Retrieve lifetime stats from twjit instance.

    Parameters
    [in]twjitInstance to query
    Returns
    pointer to lifetime stats structure

    ◆ osmo_twjit_input()

    void osmo_twjit_input ( struct osmo_twjit *  twjit,
    struct msgb *  msg 
    )

    Feed received RTP packet to twjit.

    Parameters
    [in]twjitInstance to which input is being fed
    [in]msgMessage buffer containing the received packet

    The msgb fed to this API is always consumed by the called function: if it isn't freed for being invalid or too old, it is queued to be regurgitated some time later on the output side. The design of twjit assumes that this API will be called as soon as each incoming RTP packet is received from the IP network, without any additional delays; in most applications, thus function will be called by twrtp layer from osmo_io Rx callback path.

    ◆ osmo_twjit_output()

    struct msgb * osmo_twjit_output ( struct osmo_twjit *  twjit)

    Fixed-timing output poll from twjit buffer.

    Parameters
    [in]twjitInstance to poll
    Returns
    pointer to msgb holding a previously received RTP packet that was successfully mapped to the present quantum in the fixed-timing output, or NULL if no such packet is available.

    Referenced by osmo_twrtp_twjit_rx_poll().

    ◆ osmo_twjit_reset()

    void osmo_twjit_reset ( struct osmo_twjit *  twjit)

    Reset twjit instance to empty initial state.

    Parameters
    [in]twjitInstance to be reset

    This reset function is intended to be called when the application stops doing regular (once every time quantum) reads from the jitter buffer, but may resume this activity later. All packet Rx state and queues are cleared, but "lifetime" statistical counters are NOT reset.

    Referenced by osmo_twrtp_twjit_rx_ctrl().

    ◆ osmo_twjit_rr_info_valid()

    bool osmo_twjit_rr_info_valid ( struct osmo_twjit *  twjit)

    Did this twjit instance ever receive RTP input?

    Parameters
    [in]twjitInstance to query
    Returns
    true if this twjit instance received RTP input since it was created or last reset, false otherwise.

    ◆ osmo_twjit_set_config()

    int osmo_twjit_set_config ( struct osmo_twjit *  twjit,
    const struct osmo_twjit_config *  config 
    )

    Change twjit config parameters.

    Parameters
    [in]twjitInstance to be reconfigured
    [in]configStructure with new tuning parameters to be used
    Returns
    0 if successful, negative on errors

    The intended use for this API is applications that can use one of several different twjit config profiles depending on various conditions, but might not know the correct choice of profile at the time they create the twjit instance - or more likely, the containing twrtp instance.

    html/navtree.js0000644000175000017500000003653515057675337013042 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.6.0.16-c51c
    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.png0000644000175000017500000000124415057675337012441 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.6.0.16-c51c
    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.html0000644000175000017500000001513415057675337017365 0ustar buildbuild libosmo-netif: src Directory Reference
    libosmo-netif 1.6.0.16-c51c
    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.html0000644000175000017500000001003415057675337014334 0ustar buildbuild libosmo-netif: Globals
    libosmo-netif 1.6.0.16-c51c
    Osmocom network interface library
     
    html/files_dup.js0000644000175000017500000000033715057675337013337 0ustar buildbuildvar files_dup = [ [ "include", "dir_d44c64559bbebec7f509842c48db8b23.html", "dir_d44c64559bbebec7f509842c48db8b23" ], [ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ] ];html/index.html0000644000175000017500000000740515057675337013027 0ustar buildbuild libosmo-netif: Main Page
    libosmo-netif 1.6.0.16-c51c
    Osmocom network interface library
    libosmo-netif Documentation
    html/group__stream__cli.js0000644000175000017500000001045215057675337015220 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_name_f", "group__stream__cli.html#gacf917820669504d5f2856eaf74508921", 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.png0000644000175000017500000000151515057675337013204 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: include/osmocom/netif/twjit.h Source File
    libosmo-netif 1.6.0.16-c51c
    Osmocom network interface library
    twjit.h
    1/*
    2 * Themyscira Wireless RTP jitter buffer implementation:
    3 * public API definition for Osmocom-integrated version.
    4 *
    5 * This code was contributed to Osmocom Cellular Network Infrastructure
    6 * project by Mother Mychaela N. Falconia of Themyscira Wireless.
    7 * Mother Mychaela's contributions are NOT subject to copyright:
    8 * no rights reserved, all rights relinquished.
    9 */
    10
    11#pragma once
    12
    13#include <stdint.h>
    14#include <stdbool.h>
    15
    16#include <osmocom/core/msgb.h>
    17
    35struct osmo_twjit;
    36
    48struct osmo_twjit_config;
    49
    60 /* For ABI reasons, none of the following fields may be deleted
    61 * or reordered! */
    62
    63 /* normal operation */
    64 uint32_t rx_packets;
    65 uint32_t delivered_pkt;
    66 uint32_t handovers_in;
    67 uint32_t handovers_out;
    68 uint32_t marker_resets;
    69 /* undesirable, but not totally unexpected */
    70 uint32_t too_old;
    71 uint32_t underruns;
    72 uint32_t ho_underruns;
    73 uint32_t output_gaps;
    74 uint32_t thinning_drops;
    75 /* unusual error events */
    76 uint32_t bad_packets;
    77 uint32_t duplicate_ts;
    78 /* independent analysis of Rx packet stream */
    79 uint32_t ssrc_changes;
    80 uint32_t seq_skips;
    81 uint32_t seq_backwards;
    82 uint32_t seq_repeats;
    83 uint32_t intentional_gaps;
    84 uint32_t ts_resets;
    85 uint32_t jitter_max;
    86 /* New fields may be added here at the end; once added, they become
    87 * permanent like the initially defined ones. */
    88};
    89
    101 /* For ABI reasons, none of the following fields may be deleted
    102 * or reordered! */
    103
    105 uint32_t ssrc;
    107 uint32_t rx_packets;
    109 uint32_t base_seq;
    111 uint32_t max_seq_ext;
    113 uint32_t expected_pkt;
    117 uint32_t jitter_accum;
    118 /* New fields may be added here at the end; once added, they become
    119 * permanent like the initially defined ones. */
    120};
    121
    122/* twjit API: managing configuration structures */
    123
    124struct osmo_twjit_config *osmo_twjit_config_alloc(void *ctx);
    125void osmo_twjit_config_free(struct osmo_twjit_config *conf);
    126
    127int osmo_twjit_config_set_buffer_depth(struct osmo_twjit_config *conf,
    128 uint16_t bd_start, uint16_t bd_hiwat);
    129int osmo_twjit_config_set_thinning_int(struct osmo_twjit_config *conf,
    130 uint16_t thinning_int);
    131int osmo_twjit_config_set_max_future_sec(struct osmo_twjit_config *conf,
    132 uint16_t max_future_sec);
    133int osmo_twjit_config_set_start_min_delta(struct osmo_twjit_config *conf,
    134 uint16_t delta_ms);
    135int osmo_twjit_config_set_start_max_delta(struct osmo_twjit_config *conf,
    136 uint16_t delta_ms);
    137int osmo_twjit_config_set_handover_on_marker(struct osmo_twjit_config *conf,
    138 bool hom);
    139
    140/* twjit API: actual twjit instances */
    141
    142struct osmo_twjit *osmo_twjit_create(void *ctx, uint16_t clock_khz,
    143 uint16_t quantum_ms,
    144 const struct osmo_twjit_config *config);
    145void osmo_twjit_destroy(struct osmo_twjit *twjit);
    146
    147int osmo_twjit_set_config(struct osmo_twjit *twjit,
    148 const struct osmo_twjit_config *config);
    149void osmo_twjit_reset(struct osmo_twjit *twjit);
    150
    151/* RTP input, takes ownership of msgb */
    152void osmo_twjit_input(struct osmo_twjit *twjit, struct msgb *msg);
    153
    154/* output function, to be called by TDM/GSM/etc fixed-timing side */
    155struct msgb *osmo_twjit_output(struct osmo_twjit *twjit);
    156
    157/* Stats and RR info structures are contained inside opaque struct osmo_twjit.
    158 * We need to provide access to these stats and RR info structures to API
    159 * users, but we don't want to make the whole twjit instance struct public.
    160 * Also we would like to have fast external access to these stats, hence an API
    161 * that copies our stats to caller-provided storage would be very inefficient.
    162 * Compromise: we allow direct external access to just these selected parts
    163 * of the full internal state structure by providing API functions that
    164 * return pointers to these selected parts.
    165 */
    166const struct osmo_twjit_stats *
    167osmo_twjit_get_stats(struct osmo_twjit *twjit);
    168
    169const struct osmo_twjit_rr_info *
    170osmo_twjit_get_rr_info(struct osmo_twjit *twjit);
    171
    172/* When we compose outgoing RTCP packets in the upper layer of twrtp,
    173 * we need to know whether or not we have received at least one valid
    174 * RTP data packet so far. If we haven't received any RTP yet, then
    175 * we have no Rx SSRC, all data in struct osmo_twjit_rr_info are invalid,
    176 * and we cannot send RTCP reception reports.
    177 */
    178bool osmo_twjit_rr_info_valid(struct osmo_twjit *twjit);
    179
    180/* vty configuration functions */
    181
    182void osmo_twjit_vty_init(int twjit_node);
    183
    184struct vty;
    185
    186int osmo_twjit_config_write(struct vty *vty,
    187 const struct osmo_twjit_config *conf,
    188 const char *prefix);
    189
    struct osmo_twjit_config * osmo_twjit_config_alloc(void *ctx)
    \addgroup twjit
    Definition: twjit_conf.c:45
    int osmo_twjit_config_set_start_max_delta(struct osmo_twjit_config *conf, uint16_t delta_ms)
    Non-vty function for start-max-delta setting.
    Definition: twjit_conf.c:325
    const struct osmo_twjit_rr_info * osmo_twjit_get_rr_info(struct osmo_twjit *twjit)
    Retrieve RR info from twjit instance.
    Definition: twjit.c:690
    int osmo_twjit_config_set_buffer_depth(struct osmo_twjit_config *conf, uint16_t bd_start, uint16_t bd_hiwat)
    Non-vty function for buffer-depth setting.
    Definition: twjit_conf.c:261
    int osmo_twjit_config_set_max_future_sec(struct osmo_twjit_config *conf, uint16_t max_future_sec)
    Non-vty function for max-future-sec setting.
    Definition: twjit_conf.c:295
    int osmo_twjit_config_set_handover_on_marker(struct osmo_twjit_config *conf, bool hom)
    Non-vty function for marker-handling setting.
    Definition: twjit_conf.c:338
    void osmo_twjit_reset(struct osmo_twjit *twjit)
    Reset twjit instance to empty initial state.
    Definition: twjit.c:212
    struct osmo_twjit * osmo_twjit_create(void *ctx, uint16_t clock_khz, uint16_t quantum_ms, const struct osmo_twjit_config *config)
    \addgroup twjit
    Definition: twjit.c:129
    bool osmo_twjit_rr_info_valid(struct osmo_twjit *twjit)
    Did this twjit instance ever receive RTP input?
    Definition: twjit.c:701
    void osmo_twjit_destroy(struct osmo_twjit *twjit)
    Destroy a twjit instance.
    Definition: twjit.c:167
    int osmo_twjit_config_set_thinning_int(struct osmo_twjit_config *conf, uint16_t thinning_int)
    Non-vty function for thinning-interval setting.
    Definition: twjit_conf.c:279
    int osmo_twjit_config_set_start_min_delta(struct osmo_twjit_config *conf, uint16_t delta_ms)
    Non-vty function for start-min-delta setting.
    Definition: twjit_conf.c:311
    int osmo_twjit_set_config(struct osmo_twjit *twjit, const struct osmo_twjit_config *config)
    Change twjit config parameters.
    Definition: twjit.c:188
    struct msgb * osmo_twjit_output(struct osmo_twjit *twjit)
    Fixed-timing output poll from twjit buffer.
    Definition: twjit.c:618
    void osmo_twjit_config_free(struct osmo_twjit_config *conf)
    Free a twjit config instance.
    Definition: twjit_conf.c:102
    const struct osmo_twjit_stats * osmo_twjit_get_stats(struct osmo_twjit *twjit)
    Retrieve lifetime stats from twjit instance.
    Definition: twjit.c:664
    int osmo_twjit_config_write(struct vty *vty, const struct osmo_twjit_config *conf, const char *prefix)
    Write out vty form of twjit config structure.
    Definition: twjit_conf.c:117
    void osmo_twjit_input(struct osmo_twjit *twjit, struct msgb *msg)
    Feed received RTP packet to twjit.
    Definition: twjit.c:460
    Info collected from the incoming RTP data stream for the purpose of generating RTCP reception report ...
    Definition: twjit.h:100
    uint32_t base_seq
    "base" sequence number for "expected packets" computation
    Definition: twjit.h:109
    uint32_t rx_packets
    count of "received packets" for RTCP RR packet loss calculation
    Definition: twjit.h:107
    uint32_t jitter_accum
    "interarrival jitter" measure of RFC 3550, accumulator for the leaky integrator algorithm prescribed ...
    Definition: twjit.h:117
    uint32_t ssrc
    received SSRC to which all following info applies
    Definition: twjit.h:105
    uint32_t max_seq_ext
    "extended highest sequence number" field of RTCP RR
    Definition: twjit.h:111
    uint32_t expected_pkt
    count of "expected packets" for RTCP RR packet loss calculation
    Definition: twjit.h:113
    Stats collected during the lifetime of a twjit instance.
    Definition: twjit.h:59
    html/classes.html0000644000175000017500000001326015057675337013351 0ustar buildbuild libosmo-netif: Data Structure Index
    libosmo-netif 1.6.0.16-c51c
    Osmocom network interface library
    html/rtcp__defs_8h_source.html0000644000175000017500000002645215057675337016012 0ustar buildbuild libosmo-netif: include/osmocom/netif/rtcp_defs.h Source File
    libosmo-netif 1.6.0.16-c51c
    Osmocom network interface library
    rtcp_defs.h
    1/*
    2 * Some definitions for RTCP, just enough to implement SR and RR
    3 * generation and parsing in twrtp.
    4 */
    5
    6#pragma once
    7
    8#include <stdint.h>
    9
    11 uint8_t v_p_rc;
    12 uint8_t pt;
    13 uint16_t len;
    14 uint32_t ssrc;
    15} __attribute__((packed));
    16
    18 uint32_t ntp_sec;
    19 uint32_t ntp_fract;
    20 uint32_t rtp_ts;
    21 uint32_t pkt_count;
    22 uint32_t octet_count;
    23} __attribute__((packed));
    24
    26 uint32_t ssrc;
    27 uint32_t lost_word;
    28 uint32_t max_seq_ext;
    29 uint32_t jitter;
    30 uint16_t lsr_sec;
    31 uint16_t lsr_fract;
    32 uint16_t dlsr_sec;
    33 uint16_t dlsr_fract;
    34} __attribute__((packed));
    35
    36#define RTCP_PT_SR 200
    37#define RTCP_PT_RR 201
    38#define RTCP_PT_SDES 202
    39#define RTCP_PT_BYE 203
    40#define RTCP_PT_APP 204
    41
    42#define SDES_ITEM_CNAME 1
    43#define SDES_ITEM_NAME 2
    44#define SDES_ITEM_EMAIL 3
    45#define SDES_ITEM_PHONE 4
    46#define SDES_ITEM_LOC 5
    47#define SDES_ITEM_TOOL 6
    48#define SDES_ITEM_NOTE 7
    49#define SDES_ITEM_PRIV 8
    Definition: rtcp_defs.h:25
    Definition: rtcp_defs.h:17
    Definition: rtcp_defs.h:10
    html/group__osmux.js0000644000175000017500000000352015057675337014110 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.js0000644000175000017500000001054415057675337013730 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.6.0.16-c51c
    Osmocom network interface library
    Related Pages
    Here is a list of all related documentation pages:
    html/tabs.css0000644000175000017500000002334515057675337012476 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.html0000644000175000017500000000763615057675337017237 0ustar buildbuild libosmo-netif: include Directory Reference
    libosmo-netif 1.6.0.16-c51c
    Osmocom network interface library
    include Directory Reference
    html/prim_8h_source.html0000644000175000017500000003627615057675337014656 0ustar buildbuild libosmo-netif: include/osmocom/netif/prim.h Source File
    libosmo-netif 1.6.0.16-c51c
    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.js0000644000175000017500000000163715057675337016671 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 ], [ "rtcp_defs.h", "rtcp__defs_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 ], [ "twjit.h", "twjit_8h_source.html", null ], [ "twjit_private.h", "twjit__private_8h_source.html", null ], [ "twrtp.h", "twrtp_8h_source.html", null ], [ "version.h", "version_8h_source.html", null ] ];html/group__stream__cli.html0000644000175000017500000030227615057675337015560 0ustar buildbuild libosmo-netif: Osmocom Stream Client
    libosmo-netif 1.6.0.16-c51c
    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 , OSMO_STREAM_CLI_PAR_TCP_SOCKOPT_KEEPALIVE = 256 , OSMO_STREAM_CLI_PAR_TCP_SOCKOPT_KEEPIDLE ,
      OSMO_STREAM_CLI_PAR_TCP_SOCKOPT_KEEPINTVL , OSMO_STREAM_CLI_PAR_TCP_SOCKOPT_KEEPCNT , OSMO_STREAM_CLI_PAR_TCP_SOCKOPT_USER_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...
     
    void osmo_stream_cli_set_name_f (struct osmo_stream_cli *cli, const char *fmt,...)
     Set a name on the cli object using arguments like printf() (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 domain for the stream client 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 domain for the stream client link.

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

    Parameters
    [in]cliStream Client to modify
    [in]domainSocket 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

    References osmo_stream_cli_set_name_f().

    ◆ osmo_stream_cli_set_name_f()

    void osmo_stream_cli_set_name_f ( struct osmo_stream_cli *  cli,
    const char *  fmt,
      ... 
    )

    Set a name on the cli object using arguments like printf() (used during logging).

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

    Referenced by osmo_stream_cli_set_name().

    ◆ 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.html0000644000175000017500000001261615057675337015056 0ustar buildbuild libosmo-netif: ipa_head Struct Reference
    libosmo-netif 1.6.0.16-c51c
    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.html0000644000175000017500000010230415057675337015044 0ustar buildbuild libosmo-netif: include/osmocom/netif/osmux.h Source File
    libosmo-netif 1.6.0.16-c51c
    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.js0000644000175000017500000000022615057675337016673 0ustar buildbuildvar dir_d44c64559bbebec7f509842c48db8b23 = [ [ "osmocom", "dir_abe9b486a10ccc5afdf8abc29637e0c1.html", "dir_abe9b486a10ccc5afdf8abc29637e0c1" ] ];html/group__stream__srv.js0000644000175000017500000001177715057675337015276 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_name_f", "group__stream__srv.html#ga7af35085592c1dbaf2a3b6be1b49bef2", null ], [ "osmo_stream_srv_set_param", "group__stream__srv.html#ga0e7adb8aef2f007144d4df24b21fbfe4", 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.html0000644000175000017500000001261515057675337015130 0ustar buildbuild libosmo-netif: rtcp_hdr Struct Reference
    libosmo-netif 1.6.0.16-c51c
    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.png0000644000175000017500000000020415057675337012777 0ustar buildbuildPNG  IHDR KIDATxm @!Gk7-`&sts@k}2 P%_N .:0Dk›x" ֛)x5IENDB`html/functions.html0000644000175000017500000001140715057675337013725 0ustar buildbuild libosmo-netif: Data Fields
    libosmo-netif 1.6.0.16-c51c
    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.html0000644000175000017500000003123515057675337015456 0ustar buildbuild libosmo-netif: osmo_jibuf Struct Reference
    libosmo-netif 1.6.0.16-c51c
    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.html0000644000175000017500000005402015057675337014365 0ustar buildbuild libosmo-netif: Osmocom Jitter Buffer
    libosmo-netif 1.6.0.16-c51c
    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.js0000644000175000017500000002303315057675337013255 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_name_f", "group__stream__cli.html#gacf917820669504d5f2856eaf74508921", 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_name_f", "group__stream__srv.html#ga7af35085592c1dbaf2a3b6be1b49bef2", null ], [ "osmo_stream_srv_set_param", "group__stream__srv.html#ga0e7adb8aef2f007144d4df24b21fbfe4", 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.html0000644000175000017500000005066715057675337014460 0ustar buildbuild libosmo-netif: include/osmocom/netif/ipa.h Source File
    libosmo-netif 1.6.0.16-c51c
    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/group__twrtp.html0000644000175000017500000023476315057675337014464 0ustar buildbuild libosmo-netif: Themyscira Wireless RTP endpoint implementation
    libosmo-netif 1.6.0.16-c51c
    Osmocom network interface library
    Themyscira Wireless RTP endpoint implementation

    osmo_twrtp is a complete RTP endpoint. More...

    Data Structures

    struct  osmo_twrtp_stats
     Stats collected during the lifetime of a twrtp instance. More...
     

    Typedefs

    typedef bool(* osmo_twrtp_raw_rx_cb) (struct osmo_twrtp *endp, void *user_data, struct msgb *msg)
     

    Functions

    struct osmo_twrtp * osmo_twrtp_create (void *ctx, uint16_t clock_khz, uint16_t quantum_ms, bool random_ts_seq, const struct osmo_twjit_config *twjit_config)
     \addgroup twrtp More...
     
    void osmo_twrtp_destroy (struct osmo_twrtp *endp)
     Destroy a twrtp endpoint. More...
     
    int osmo_twrtp_supply_fds (struct osmo_twrtp *endp, int rtp_fd, int rtcp_fd)
     Equip twrtp endpoint with RTP and RTCP sockets (supplied file descriptors) More...
     
    int osmo_twrtp_bind_local (struct osmo_twrtp *endp, const struct osmo_sockaddr *rtp_addr, bool bind_rtcp)
     Equip twrtp endpoint with locally bound RTP and RTCP sockets. More...
     
    int osmo_twrtp_set_remote (struct osmo_twrtp *endp, const struct osmo_sockaddr *rtp_addr)
     Set RTP remote address. More...
     
    void osmo_twrtp_twjit_rx_ctrl (struct osmo_twrtp *endp, bool rx_enable)
     Enable or disable Rx via twjit. More...
     
    struct msgb * osmo_twrtp_twjit_rx_poll (struct osmo_twrtp *endp)
     Fixed-timing output poll from the twrtp endpoint's twjit buffer. More...
     
    void osmo_twrtp_set_raw_rx_cb (struct osmo_twrtp *endp, osmo_twrtp_raw_rx_cb cb, void *user_data)
     Set callback function for unbuffered/non-delayed Rx path. More...
     
    int osmo_twrtp_tx_quantum (struct osmo_twrtp *endp, const uint8_t *payload, unsigned payload_len, uint8_t payload_type, bool marker, bool auto_marker, bool send_rtcp)
     Emit RTP packet carrying a locally sourced quantum of speech/data. More...
     
    void osmo_twrtp_tx_skip (struct osmo_twrtp *endp)
     Incur an intentional gap in the emitted RTP stream. More...
     
    void osmo_twrtp_tx_restart (struct osmo_twrtp *endp)
     Reset output stream cadence. More...
     
    int osmo_twrtp_tx_forward (struct osmo_twrtp *endp, struct msgb *msg)
     Forward RTP packet between endpoints. More...
     
    int osmo_twrtp_set_sdes (struct osmo_twrtp *endp, const char *cname, const char *name, const char *email, const char *phone, const char *loc, const char *tool, const char *note)
     Set SDES strings for RTCP SR and RR packet generation. More...
     
    void osmo_twrtp_set_auto_rtcp_interval (struct osmo_twrtp *endp, uint16_t interval)
     Configure automatic emission of periodic RTCP SR packets. More...
     
    int osmo_twrtp_send_rtcp_rr (struct osmo_twrtp *endp)
     Emit RTCP RR packet. More...
     
    struct osmo_twjit * osmo_twrtp_get_twjit (struct osmo_twrtp *endp)
     Get twjit from twrtp. More...
     
    const struct osmo_twrtp_statsosmo_twrtp_get_stats (struct osmo_twrtp *endp)
     Retrieve lifetime stats from twrtp instance. More...
     
    bool osmo_twrtp_got_rtcp_rr (struct osmo_twrtp *endp)
     Have we received any RTCP RR? More...
     
    uint32_t osmo_twrtp_rr_lost_word (struct osmo_twrtp *endp)
     Info from received RTCP RR: lost packets word. More...
     
    int32_t osmo_twrtp_rr_lost_cumulative (struct osmo_twrtp *endp)
     Info from received RTCP RR: cumulative number of packets lost. More...
     
    uint32_t osmo_twrtp_rr_jitter_last (struct osmo_twrtp *endp)
     Info from received RTCP RR: interarrival jitter, most recent. More...
     
    uint32_t osmo_twrtp_rr_jitter_max (struct osmo_twrtp *endp)
     Info from received RTCP RR: interarrival jitter, highest received. More...
     
    int osmo_twrtp_get_rtp_fd (struct osmo_twrtp *endp)
     Retrieve file descriptor for RTP UDP socket. More...
     
    int osmo_twrtp_get_rtcp_fd (struct osmo_twrtp *endp)
     Retrieve file descriptor for RTCP UDP socket. More...
     
    int osmo_twrtp_set_dscp (struct osmo_twrtp *endp, uint8_t dscp)
     Set DSCP (Differentiated Services Code Point) for emitted RTP and RTCP packets. More...
     
    int osmo_twrtp_set_socket_prio (struct osmo_twrtp *endp, int prio)
     Set socket priority for emitted RTP and RTCP packets. More...
     

    Detailed Description

    osmo_twrtp is a complete RTP endpoint.

    It is primarily designed to be used together with twjit to build a bidirectional interface between an RTP stream and a fixed timing system such as GSM Um TCH or T1/E1 Abis, but it also has limited support for endpoints without twjit. A twrtp endpoint without twjit is either an output-only endpoint (playout of in-band tones and announcements etc), or one side of a pair of endpoints that forward RTP packets to each other without delay.

    The basic workflow is:

    1. Create a twrtp instance with osmo_twrtp_create(). The decision to use or not use twjit is fixed at this time; if twjit is to be used, struct osmo_twjit_config needs to be provided.
    2. Create and bind a pair of local UDP sockets for RTP and RTCP, or supply osmo_twrtp with an already-obtained pair of file descriptors for the same. Most users will find the high-level API osmo_twrtp_bind_local() most suitable, but some applications may prefer to use the low-level API osmo_twrtp_supply_fds() instead.
    3. Set the IP:port address of the remote RTP end with osmo_twrtp_set_remote().
    4. Traffic can now be sent and received as detailed below.

    Receiving RTP traffic, interworking to a fixed timing system:

    1. Provide struct osmo_twjit_config to osmo_twrtp_create(), so the twrtp instance will be created with twjit included.
    2. When you are ready to start receiving traffic, call osmo_twrtp_twjit_rx_ctrl() with rx_enable argument set to true.
    3. Once you've made the above call, commit to calling osmo_twrtp_twjit_rx_poll() every 20 ms (or whatever your quantum duration is) as timed by your GSM Um TCH or TDM system, every tick without fail.
    4. You can pause operation by calling osmo_twrtp_twjit_rx_ctrl() with rx_enable argument set to false, and then later restart by returning to step 2 above. When you pause, the Rx jitter buffer will be flushed, and when you restart Rx, twjit will restart from empty state.

    Sending RTP traffic, coming from a fixed timing system:

    1. Make the first call to osmo_twrtp_tx_quantum() whenever you are ready to send out the first quantum.
    2. Once you've made that first call, commit to sending either another quantum or an intentional gap (osmo_twrtp_tx_skip()) every 20 ms without fail, as timed by your GSM Um TCH, T1/E1 TDM or other fixed timing system.
    3. If you need to pause Tx output and restart later, or if some discontinuity occurs in your fixed timing system where you know that your interval between quantum sends is not the proper 20 ms or whatever your quantum duration is, call osmo_twrtp_tx_restart(), telling the library to reset the RTP timescale in its subsequent output.

    No-delay forwarding operation from one twrtp endpoint to another:

    1. On the receiving side, call osmo_twrtp_set_raw_rx_cb() to set up an unbuffered/non-delayed Rx callback function.
    2. In that Rx callback function, forward the packet to the other endpoint with osmo_twrtp_tx_forward().
    3. If you are building an MGW that mostly does forwarding as described here, but occasionally inserts its own in-band tones or announcements, you can switch in real time between just-described forwarding and "native" osmo_twrtp_tx_quantum() output. The receiving RTP end will see "handover" events as SSRC switches between the one emitted by twrtp and the one coming from the other remote party. Actual timing will also switch, as there is no realistic way your own 20 ms timing for announcement playout will exactly match the timing of the RTP stream switched from the other remote party.

    RTCP handling is mostly internal to the library - as a user, you don't need to concern yourself with it. More precisely, incoming RTCP packets are always handled internally; if you wish to send out RTCP, you have to set SDES and decide if you wish to send out SR or RR packets. Automatic emission of an SR packet after every so many RTP packets, with an RR block included in that SR, is the most common and most useful mode. OTOH, if your RTP application does not use RTCP, you don't need to concern yourself with RTCP at all: don't configure or enable RTCP sending, and ignore the existence of the built-in RTCP receiver. Any received RTCP packets will still be parsed, but you can ignore the data that result from this parsing.

    For a more detailed description, please consult the full twrtp guide document that can be found in doc/twrtp directory. This document is required reading for anyone seeking to properly understand twrtp, its domain of application and all of its capabilities, beyond the brief summary given above. Specific section references to this document will be made in subsequent comments.

    Function Documentation

    ◆ osmo_twrtp_bind_local()

    int osmo_twrtp_bind_local ( struct osmo_twrtp *  endp,
    const struct osmo_sockaddr *  rtp_addr,
    bool  bind_rtcp 
    )

    Equip twrtp endpoint with locally bound RTP and RTCP sockets.

    Parameters
    [in]endpEndpoint to operate on
    [in]rtp_addrIP:port address to be bound locally for RTP socket; the corresponding address for RTCP (port increment by 1) will be derived internally.
    [in]bind_rtcpCreate and bind sockets for both RTP and RTCP if true, or for RTP only if false.
    Returns
    0 if successful, negative on errors

    This function creates a pair of UDP sockets of the right address family (IPv4 or IPv6) for RTP and RTCP, binds them locally and installs them in the twrtp endpoint. (Or just one UDP socket for RTP, if bind_rtcp is false.) Either the present API or the lower-level alternative osmo_twrtp_supply_fds() must be called after osmo_twrtp_create() in order for the endpoint to become functional, but neither function can be used again once this step is done.

    References osmo_twrtp_supply_fds().

    ◆ osmo_twrtp_create()

    struct osmo_twrtp * osmo_twrtp_create ( void *  ctx,
    uint16_t  clock_khz,
    uint16_t  quantum_ms,
    bool  random_ts_seq,
    const struct osmo_twjit_config *  twjit_config 
    )

    \addgroup twrtp

    Create a twrtp endpoint

    Parameters
    [in]ctxParent talloc context under which struct osmo_twrtp should be allocated.
    [in]clock_khzRTP clock rate in kHz, i.e., number of RTP timestamp units per millisecond. The most common value is 8.
    [in]quantum_msDuration of a single quantum (unit of speech or data carried in one RTP packet) in milliseconds. The most common value is 20.
    [in]random_ts_seqFor RTP packets we generate and emit, randomize not only SSRC for this session, but also the starting timestamp and the starting sequence number. Pass true to satisfy the SHOULD directive in RFC 3550 and for feature parity with ortp, or false for ease of debugging.
    [in]twjit_configIf this RTP endpoint is to be equipped with twjit, pass twjit config structure with tunable parameters here. If a sans-twjit RTP endpoint is to be created, pass NULL here.
    Returns
    pointer to the newly created twrtp instance, or NULL on errors.

    Every twrtp endpoint is always capable of sending and receiving RTP and RTCP packets on the IP network, but it may be either twjit-equipped or sans-twjit. The decision to have or not have a twjit instance as part of a newly created twrtp instance must be made at the time of creation with this function, by passing either a valid twjit config structure or NULL as twjit_config.

    Parameters clock_khz and quantum_ms are passed through to twjit if a twjit instance is created inside the new twrtp instance, but they are mandatory even if no twjit instance is to be created. With or without twjit, these parameters are used for locally generated RTP packets, i.e., those emitted via osmo_twrtp_tx_quantum() as opposed to osmo_twrtp_tx_forward().

    References osmo_twjit_create().

    ◆ osmo_twrtp_destroy()

    void osmo_twrtp_destroy ( struct osmo_twrtp *  endp)

    Destroy a twrtp endpoint.

    Parameters
    [in]endpInstance (endpoint) to be freed

    References osmo_twjit_destroy().

    ◆ osmo_twrtp_get_rtcp_fd()

    int osmo_twrtp_get_rtcp_fd ( struct osmo_twrtp *  endp)

    Retrieve file descriptor for RTCP UDP socket.

    Parameters
    [in]endpEndpoint to query
    Returns
    OS-level file descriptor of the UDP socket used for RTCP.

    The file descriptor made accessible via this function is still owned by the parent twrtp instance - closing it, or otherwise manipulating it too heavily (e.g., doing kernel-level connect on it) will break the library.

    ◆ osmo_twrtp_get_rtp_fd()

    int osmo_twrtp_get_rtp_fd ( struct osmo_twrtp *  endp)

    Retrieve file descriptor for RTP UDP socket.

    Parameters
    [in]endpEndpoint to query
    Returns
    OS-level file descriptor of the UDP socket used for RTP.

    The file descriptor made accessible via this function is still owned by the parent twrtp instance - closing it, or otherwise manipulating it too heavily (e.g., doing kernel-level connect on it) will break the library.

    ◆ osmo_twrtp_get_stats()

    const struct osmo_twrtp_stats * osmo_twrtp_get_stats ( struct osmo_twrtp *  endp)

    Retrieve lifetime stats from twrtp instance.

    Parameters
    [in]endpEndpoint to query
    Returns
    pointer to lifetime stats structure

    Note that a twrtp endpoint equipped with twjit has two levels of stats: there are stats at twrtp level and at twjit level. The present function retrieves twrtp stats; to get twjit stats, call osmo_twrtp_get_twjit() followed by osmo_twjit_get_stats().

    ◆ osmo_twrtp_get_twjit()

    struct osmo_twjit * osmo_twrtp_get_twjit ( struct osmo_twrtp *  endp)

    Get twjit from twrtp.

    Parameters
    [in]endpEndpoint to query
    Returns
    pointer to twjit instance owned by this twrtp endpoint, or NULL if this twrtp endpoint has no associated twjit.

    The twjit instance made accessible via this function is still owned by the parent twrtp instance - calling osmo_twjit_destroy() on it would cause a crash the next time twrtp tries to use it! Safe twjit APIs are as follows, for dynamic reconfiguration and information retrieval:

    osmo_twjit_set_config() osmo_twjit_get_stats() osmo_twjit_get_rr_info() osmo_twjit_rr_info_valid()

    ◆ osmo_twrtp_got_rtcp_rr()

    bool osmo_twrtp_got_rtcp_rr ( struct osmo_twrtp *  endp)

    Have we received any RTCP RR?

    Parameters
    [in]endpEndpoint to query
    Returns
    true if at least one reception report block has been received whose SSRC matches that of our locally generated RTP output, false otherwise.

    ◆ osmo_twrtp_rr_jitter_last()

    uint32_t osmo_twrtp_rr_jitter_last ( struct osmo_twrtp *  endp)

    Info from received RTCP RR: interarrival jitter, most recent.

    Parameters
    [in]endpEndpoint to query
    Returns
    "interarrival jitter" value from the most recently received RR block.

    ◆ osmo_twrtp_rr_jitter_max()

    uint32_t osmo_twrtp_rr_jitter_max ( struct osmo_twrtp *  endp)

    Info from received RTCP RR: interarrival jitter, highest received.

    Parameters
    [in]endpEndpoint to query
    Returns
    "interarrival jitter" value from received RR blocks, the highest value that was received in this session.

    ◆ osmo_twrtp_rr_lost_cumulative()

    int32_t osmo_twrtp_rr_lost_cumulative ( struct osmo_twrtp *  endp)

    Info from received RTCP RR: cumulative number of packets lost.

    Parameters
    [in]endpEndpoint to query
    Returns
    "cumulative number of packets lost" value from the most recently received RR block, extracted and converted to a proper signed type. This number can be negative because of the way it is defined in RFC 3550.

    If no RTCP RR has been received, this function returns 0.

    ◆ osmo_twrtp_rr_lost_word()

    uint32_t osmo_twrtp_rr_lost_word ( struct osmo_twrtp *  endp)

    Info from received RTCP RR: lost packets word.

    Parameters
    [in]endpEndpoint to query
    Returns
    lost packets word from the most recently received RR block.

    This API returns the 32-bit word from received RTCP RR in its raw form, exactly as it appears in RFC 3550 section 6.4.1: fraction lost in the upper 8 bits, cumulative number of packets lost in the lower 24 bits.

    If no RTCP RR has been received, this function returns 0.

    ◆ osmo_twrtp_send_rtcp_rr()

    int osmo_twrtp_send_rtcp_rr ( struct osmo_twrtp *  endp)

    Emit RTCP RR packet.

    Parameters
    [in]endpEndpoint to operate on
    Returns
    0 if successful, negative on errors

    This function is safe to call on any twrtp endpoint, but it will actually result in an RTCP RR packet being emitted only if (1) the twrtp endpoint is equipped with twjit and (2) some RTP data packets have been successfully received and header-decoded. If these conditions aren't met, no RTCP packet will be emitted and the function will return -ENODATA.

    This API is rarely needed: in most RTCP-enabled RTP applications, it is more useful to enable automatic SR generation with osmo_twrtp_set_auto_rtcp_interval(), in which case the library will emit RTCP SR packets that also include the same reception report block as those standalone RR packets that are emitted by the present function. However, the present API is provided in case an application receives RTP traffic via twrtp+twjit, but does not emit any RTP traffic of its own - in this case only RTCP RR can be generated, not SR.

    ◆ osmo_twrtp_set_auto_rtcp_interval()

    void osmo_twrtp_set_auto_rtcp_interval ( struct osmo_twrtp *  endp,
    uint16_t  interval 
    )

    Configure automatic emission of periodic RTCP SR packets.

    Parameters
    [in]endpEndpoint to operate on
    [in]intervalAutomatically emit RTCP SR after this many RTP data packets, or 0 to turn off this mechanism.

    ◆ osmo_twrtp_set_dscp()

    int osmo_twrtp_set_dscp ( struct osmo_twrtp *  endp,
    uint8_t  dscp 
    )

    Set DSCP (Differentiated Services Code Point) for emitted RTP and RTCP packets.

    Parameters
    [in]endpEndpoint to operate on
    [in]dscpDSCP value
    Returns
    0 if successful, negative on errors

    This function exists for feature parity with osmo_ortp: when migrating from osmo_ortp to osmo_twrtp, use this function in the place of osmo_rtp_socket_set_dscp().

    ◆ osmo_twrtp_set_raw_rx_cb()

    void osmo_twrtp_set_raw_rx_cb ( struct osmo_twrtp *  endp,
    osmo_twrtp_raw_rx_cb  cb,
    void *  user_data 
    )

    Set callback function for unbuffered/non-delayed Rx path.

    Parameters
    [in]endpEndpoint to operate on
    [in]cbThe callback function, or NULL to cancel this callback mechanism.
    [in]user_dataOpaque user data for cb function

    The callback function set with this API will be called from osmo_io Rx callback path whenever an RTP packet is received. If the callback function consumes (takes ownership of) the msgb passed to it, it must return true, otherwise it must return false. If the callback function returns true, osmo_io Rx processing ends there; if it returns false, twrtp's regular osmo_io Rx callback path passes the msgb to twjit if this endpoint is equipped with such and twjit Rx is enabled, or frees the msgb otherwise.

    It is possible to use twjit and this unbuffered/non-delayed Rx path at the same time. Consider a speech transcoder that supports AMR codec on the RAN side: such TC will use twjit to feed the incoming RTP stream to the speech decoder function that runs on fixed timing, but the non-delayed Rx path can also be used to "peek" at received RTP packets as they come in and extract the CMR field - to be fed to the speech encoder element, which is separate from the speech decoder fed via twjit.

    ◆ osmo_twrtp_set_remote()

    int osmo_twrtp_set_remote ( struct osmo_twrtp *  endp,
    const struct osmo_sockaddr *  rtp_addr 
    )

    Set RTP remote address.

    Parameters
    [in]endpEndpoint to operate on
    [in]rtp_addrIP:port address to be set as the remote for RTP socket; the corresponding address for RTCP (port increment by 1) will be derived internally.
    Returns
    0 if successful, negative on errors

    This function needs to be called at some point in order for the endpoint to become functional, but unlike osmo_twrtp_bind_local(), it can be called again to change the remote address as needed.

    ◆ osmo_twrtp_set_sdes()

    int osmo_twrtp_set_sdes ( struct osmo_twrtp *  endp,
    const char *  cname,
    const char *  name,
    const char *  email,
    const char *  phone,
    const char *  loc,
    const char *  tool,
    const char *  note 
    )

    Set SDES strings for RTCP SR and RR packet generation.

    Parameters
    [in]endpEndpoint to operate on
    [in]cnamePer RFC 3550 section 6.5.1
    [in]namePer RFC 3550 section 6.5.2
    [in]emailPer RFC 3550 section 6.5.3
    [in]phonePer RFC 3550 section 6.5.4
    [in]locPer RFC 3550 section 6.5.5
    [in]toolPer RFC 3550 section 6.5.6
    [in]notePer RFC 3550 section 6.5.7
    Returns
    0 if successful, negative on errors

    RFC 3550 section 6.1 stipulates that every RTCP SR or RR packet also needs to include an SDES block, containing at least a CNAME string. The present function sets the full complement of SDES strings: the mandatory CNAME string and 6 optional ones per RFC 3550. This function must be called successfully before any RTCP SR or RR packets will be emitted.

    ◆ osmo_twrtp_set_socket_prio()

    int osmo_twrtp_set_socket_prio ( struct osmo_twrtp *  endp,
    int  prio 
    )

    Set socket priority for emitted RTP and RTCP packets.

    Parameters
    [in]endpEndpoint to operate on
    [in]prioSocket priority
    Returns
    0 if successful, negative on errors

    This function exists for feature parity with osmo_ortp: when migrating from osmo_ortp to osmo_twrtp, use this function in the place of osmo_rtp_socket_set_priority().

    ◆ osmo_twrtp_supply_fds()

    int osmo_twrtp_supply_fds ( struct osmo_twrtp *  endp,
    int  rtp_fd,
    int  rtcp_fd 
    )

    Equip twrtp endpoint with RTP and RTCP sockets (supplied file descriptors)

    Parameters
    [in]endpEndpoint to operate on
    [in]rtp_fdOS file descriptor for UDP socket for RTP
    [in]rtcp_fdOS file descriptor for UDP socket for RTCP
    Returns
    0 if successful, negative on errors

    This function equips a newly created twrtp endpoint with file descriptors for RTP and RTCP sockets. Most applications will use the high-level API osmo_twrtp_bind_local() that creates and binds the right type of sockets, then calls the present function - however, some applications may call this function directly. In Themyscira Wireless CN environment, there is a separate daemon process that manages the pool of local UDP ports for RTP+RTCP pairs, and that daemon passes allocated sockets to its clients via UNIX domain socket file descriptor passing mechanism - hence twrtp layer must have a public API that takes in already-bound file descriptor pairs.

    This function always "consumes" the two file descriptors that are passed to it. If the operation succeeds, each of these fds becomes wrapped in an osmo_io_fd subordinate to struct osmo_twrtp, and both will eventually be closed upon osmo_twrtp_destroy(). OTOH, if the present function fails, it closes both fds before returning its error indication. The latter behavior may seem wrong, but it is more convenient for all current users, and consistent with twrtp-native and twrtp-proto versions. If we get a user application that prefers the other alternative (keeping the fds intact on EBUSY or if osmo_iofd_setup() or osmo_iofd_register() operations fail), we can create another variant of this API with that alternative behavior.

    It is also possible to pass -1 as rtcp_fd - in this case the twrtp endpoint will operate with only an RTP socket, and no ability to send or receive RTCP.

    Referenced by osmo_twrtp_bind_local().

    ◆ osmo_twrtp_twjit_rx_ctrl()

    void osmo_twrtp_twjit_rx_ctrl ( struct osmo_twrtp *  endp,
    bool  rx_enable 
    )

    Enable or disable Rx via twjit.

    Parameters
    [in]endpEndpoint to operate on
    [in]rx_enableSelf-explanatory Boolean flag

    This API is valid only for twrtp endpoints that were equipped with twjit at the time of creation.

    References osmo_twjit_reset().

    ◆ osmo_twrtp_twjit_rx_poll()

    struct msgb * osmo_twrtp_twjit_rx_poll ( struct osmo_twrtp *  endp)

    Fixed-timing output poll from the twrtp endpoint's twjit buffer.

    Parameters
    [in]endpEndpoint to poll
    Returns
    pointer to msgb holding a previously received RTP packet that was successfully mapped to the present quantum in the fixed-timing output, or NULL if no such packet is available.

    This API is valid only for twrtp endpoints that were equipped with twjit at the time of creation.

    References osmo_twjit_output().

    ◆ osmo_twrtp_tx_forward()

    int osmo_twrtp_tx_forward ( struct osmo_twrtp *  endp,
    struct msgb *  msg 
    )

    Forward RTP packet between endpoints.

    Parameters
    [in]endpEndpoint on which the packet should be sent out
    [in]msgRTP packet received from another endpoint
    Returns
    0 if successful, negative on errors

    If an application needs to forward RTP packets from one endpoint to another without buffering delay, it should call the present function from the callback registered on the other endpoint with osmo_twrtp_set_raw_rx_cb().

    This function always consumes the msgb passed to it - if the sending operation fails, the msgb is freed here.

    ◆ osmo_twrtp_tx_quantum()

    int osmo_twrtp_tx_quantum ( struct osmo_twrtp *  endp,
    const uint8_t *  payload,
    unsigned  payload_len,
    uint8_t  payload_type,
    bool  marker,
    bool  auto_marker,
    bool  send_rtcp 
    )

    Emit RTP packet carrying a locally sourced quantum of speech/data.

    Parameters
    [in]endpEndpoint to operate on
    [in]payloadThe payload to emit in RTP, can be NULL iff payload_len == 0.
    [in]payload_lenThe length of payload in bytes.
    [in]payload_typeThe payload type number to be emitted in the generated RTP packet.
    [in]markerValue of the M bit to be emitted.
    [in]auto_markerAutomatically set the M bit if the packet we are emitting is our very first or follows osmo_twrtp_tx_restart().
    [in]send_rtcpEmit RTCP SR along with this RTP data packet.
    Returns
    0 if successful, negative on errors.

    The design of the library assumes that RTP payloads sent out via this API originate from a fixed timing system such as GSM Um TCH, T1/E1 TDM or a software application driven by a CLOCK_MONOTONIC timerfd, such that once the application calls the present function, subsequent calls to the same will follow every 20 ms (or whatever other quantum duration is set at the time of osmo_twrtp_create()) without fail.

    The M bit will be set in the generated RTP packet if marker argument is true OR if auto_marker is true and the conditions for automatic marker setting are met.

    RTCP SR packets are emitted by the endpoint only as a result of this function being called, and not along any other path. An RTCP SR will be emitted if send_rtcp argument is true OR if automatic RTCP SR generation was enabled with osmo_twrtp_set_auto_rtcp_interval() and it is time to emit RTCP SR per the count of emitted RTP data packets.

    References osmo_twrtp_tx_skip().

    ◆ osmo_twrtp_tx_restart()

    void osmo_twrtp_tx_restart ( struct osmo_twrtp *  endp)

    Reset output stream cadence.

    Parameters
    [in]endpEndpoint to operate on

    This function needs to be called if the application wishes to restart or resume output after it previously stopped calling osmo_twrtp_tx_quantum() or osmo_twrtp_tx_skip() every 20 ms, and it should also be called if the cadence of quantum-sized timestamp increments needs to be broken for some reason.

    ◆ osmo_twrtp_tx_skip()

    void osmo_twrtp_tx_skip ( struct osmo_twrtp *  endp)

    Incur an intentional gap in the emitted RTP stream.

    Parameters
    [in]endpEndpoint to operate on

    Many RTP profiles call for behavior where a stream sender incurs an intentional gap in its output (does not emit the otherwise-expected RTP packet for a given timestamp in the expected cadence of timestamp quantum increments) if the corresponding quantum carries speech silence, or if the data source has errors. Such operation is non-native to twrtp and generally recommended against (it creates an adverse condition for twjit on the receiving end), but the library provides mechanism rather than policy, hence the ability to incur intentional gaps is supported. This function advances the output timestamp by one quantum, thereby creating the requested intentional gap.

    Referenced by osmo_twrtp_tx_quantum().

    html/group__twjit.js0000644000175000017500000000476515057675337014112 0ustar buildbuildvar group__twjit = [ [ "osmo_twjit_stats", "structosmo__twjit__stats.html", null ], [ "osmo_twjit_rr_info", "structosmo__twjit__rr__info.html", [ [ "base_seq", "structosmo__twjit__rr__info.html#a55a2069db2d025292d2f54d14abfa0db", null ], [ "expected_pkt", "structosmo__twjit__rr__info.html#ad31676a36b0ba3634ecbd3b93aac8c5e", null ], [ "jitter_accum", "structosmo__twjit__rr__info.html#a87354c21b9215ee56d87dcb5a7606a78", null ], [ "max_seq_ext", "structosmo__twjit__rr__info.html#aac5a9bf8abb41a803da8592cee7e3148", null ], [ "rx_packets", "structosmo__twjit__rr__info.html#a5f3d83ca8470d45943991164b22969e7", null ], [ "ssrc", "structosmo__twjit__rr__info.html#a95023909bd6410be60a3ec0fb4e34981", null ] ] ], [ "osmo_twjit_config_alloc", "group__twjit.html#ga259b383e11fc673da0e931a806c20f91", null ], [ "osmo_twjit_config_free", "group__twjit.html#gaeaa7314c9ee2efbdce688cc13b63b463", null ], [ "osmo_twjit_config_set_buffer_depth", "group__twjit.html#ga4e56a380bf9751aaf6f6fc323c747c2c", null ], [ "osmo_twjit_config_set_handover_on_marker", "group__twjit.html#ga63204cb283949fd8c4417142616f6591", null ], [ "osmo_twjit_config_set_max_future_sec", "group__twjit.html#ga55d8b223908b5a638ec62983fcfc7706", null ], [ "osmo_twjit_config_set_start_max_delta", "group__twjit.html#ga260c4ebd28ed8592c4b04fc9cadc2935", null ], [ "osmo_twjit_config_set_start_min_delta", "group__twjit.html#ga8df47e86d7ead591db87da21c73e8dda", null ], [ "osmo_twjit_config_set_thinning_int", "group__twjit.html#ga8c272a9f3344a110dce9e6d66d505493", null ], [ "osmo_twjit_config_write", "group__twjit.html#gaec23d0393bcf6a30efc503e167afff1b", null ], [ "osmo_twjit_create", "group__twjit.html#ga77a05c62c2cc131b4ca8a00cf8ecca62", null ], [ "osmo_twjit_destroy", "group__twjit.html#ga7c28897aed4b25c3ede1a67fc5e6ae95", null ], [ "osmo_twjit_get_rr_info", "group__twjit.html#ga40f81a7ab7af3942e540a50bb367ae56", null ], [ "osmo_twjit_get_stats", "group__twjit.html#gaeb5d008cacb7d8329c0f0fffb4463504", null ], [ "osmo_twjit_input", "group__twjit.html#gaf3383fd56f33f86d21aa41afe318c064", null ], [ "osmo_twjit_output", "group__twjit.html#gaad365cac430364b862957f46eaaca391", null ], [ "osmo_twjit_reset", "group__twjit.html#ga76bed8e0f9d9a23d8d6fea1d8b62abbf", null ], [ "osmo_twjit_rr_info_valid", "group__twjit.html#ga7a0b80aa4271d55bbb720a73ab4db421", null ], [ "osmo_twjit_set_config", "group__twjit.html#ga930cda4155d06b50b87fcdc1785e7bec", null ] ];html/osmux_8c.js0000644000175000017500000000015215057675337013125 0ustar buildbuildvar osmux_8c = [ [ "osmux_snprintf", "group__osmux.html#gaf654e092ca97dd764f59905a2ed21650", null ] ];html/structosmo__ipa__msgb__cb.html0000644000175000017500000001207315057675337017101 0ustar buildbuild libosmo-netif: osmo_ipa_msgb_cb Struct Reference
    libosmo-netif 1.6.0.16-c51c
    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.js0000644000175000017500000001162115057675337014301 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_name_f", "group__stream__srv.html#ga7af35085592c1dbaf2a3b6be1b49bef2", null ], [ "osmo_stream_srv_set_param", "group__stream__srv.html#ga0e7adb8aef2f007144d4df24b21fbfe4", 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.js0000644000175000017500000000164715057675337014716 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.html0000644000175000017500000020325215057675337015051 0ustar buildbuild libosmo-netif: Osmocom Datagram Socket
    libosmo-netif 1.6.0.16-c51c
    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.html0000644000175000017500000001373715057675337014025 0ustar buildbuild libosmo-netif: Deprecated List
    libosmo-netif 1.6.0.16-c51c
    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/navtreeindex1.js0000644000175000017500000000070315057675337014137 0ustar buildbuildvar NAVTREEINDEX1 = { "structosmux__out__handle.html":[1,6,6], "structrtcp__hdr.html":[2,0,12], "structrtcp__rr__block.html":[2,0,13], "structrtcp__sr__block.html":[2,0,14], "structrtcp__sr__rr__hdr.html":[2,0,15], "structrtp__hdr.html":[2,0,16], "structrtp__x__hdr.html":[2,0,17], "twjit_8h_source.html":[3,0,0,0,0,13], "twjit__private_8h_source.html":[3,0,0,0,0,14], "twrtp_8h_source.html":[3,0,0,0,0,15], "version_8h_source.html":[3,0,0,0,0,16] }; html/osmux__output_8c.html0000644000175000017500000003247615057675337015252 0ustar buildbuild libosmo-netif: src/osmux_output.c File Reference
    libosmo-netif 1.6.0.16-c51c
    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.js0000644000175000017500000000142115057675337013056 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.html0000644000175000017500000026576215057675337015206 0ustar buildbuild libosmo-netif: include/osmocom/netif/stream.h Source File
    libosmo-netif 1.6.0.16-c51c
    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 OSMO_STREAM_SRV_LINK_PAR_TCP_SOCKOPT_KEEPALIVE = 256, /* uint8_t: 0 disable, 1 enable */
    103 OSMO_STREAM_SRV_LINK_PAR_TCP_SOCKOPT_KEEPIDLE, /* int: seconds */
    104 OSMO_STREAM_SRV_LINK_PAR_TCP_SOCKOPT_KEEPINTVL, /* int: seconds */
    105 OSMO_STREAM_SRV_LINK_PAR_TCP_SOCKOPT_KEEPCNT, /* int: Number of probes */
    106 OSMO_STREAM_SRV_LINK_PAR_TCP_SOCKOPT_USER_TIMEOUT, /* unsigned int: 0 "system default", >0 see sockopt TCP_USER_TIMEOUT */
    107};
    108
    109int osmo_stream_srv_link_set_param(struct osmo_stream_srv_link *link, enum osmo_stream_srv_link_param par,
    110 void *val, size_t val_len);
    111
    114struct osmo_stream_srv;
    115
    116typedef int (*osmo_stream_srv_read_cb_t)(struct osmo_stream_srv *conn);
    117typedef int (*osmo_stream_srv_closed_cb_t)(struct osmo_stream_srv *conn);
    118
    124typedef int (*osmo_stream_srv_read_cb2_t)(struct osmo_stream_srv *conn, int res, struct msgb *msg);
    125
    126typedef int (*osmo_stream_srv_segmentation_cb_t)(struct msgb *msg);
    127typedef int (*osmo_stream_srv_segmentation_cb2_t)(struct osmo_stream_srv *conn, struct msgb *msg);
    128
    129struct osmo_stream_srv *osmo_stream_srv_create(void *ctx, struct osmo_stream_srv_link *link, int fd,
    130 osmo_stream_srv_read_cb_t read_cb,
    131 osmo_stream_srv_closed_cb_t closed_cb,
    132 void *data);
    133struct osmo_stream_srv *osmo_stream_srv_create2(void *ctx, struct osmo_stream_srv_link *link, int fd, void *data);
    134void osmo_stream_srv_set_name(struct osmo_stream_srv *conn, const char *name);
    135void osmo_stream_srv_set_name_f(struct osmo_stream_srv *conn, const char *fmt, ...);
    136const char *osmo_stream_srv_get_name(const struct osmo_stream_srv *conn);
    137void osmo_stream_srv_set_read_cb(struct osmo_stream_srv *conn, osmo_stream_srv_read_cb2_t read_cb);
    138void osmo_stream_srv_set_closed_cb(struct osmo_stream_srv *conn, osmo_stream_srv_closed_cb_t close_cb);
    139void *osmo_stream_srv_get_data(struct osmo_stream_srv *conn);
    140struct osmo_stream_srv_link *osmo_stream_srv_get_master(struct osmo_stream_srv *conn);
    141const char *osmo_stream_srv_get_sockname(const struct osmo_stream_srv *conn);
    142struct osmo_fd *osmo_stream_srv_get_ofd(struct osmo_stream_srv *srv);
    143int osmo_stream_srv_get_fd(const struct osmo_stream_srv *srv);
    144struct osmo_io_fd *osmo_stream_srv_get_iofd(const struct osmo_stream_srv *srv);
    145void osmo_stream_srv_destroy(struct osmo_stream_srv *conn);
    146
    147void osmo_stream_srv_set_flush_and_destroy(struct osmo_stream_srv *conn);
    148void osmo_stream_srv_set_data(struct osmo_stream_srv *conn, void *data);
    149
    150void osmo_stream_srv_set_segmentation_cb(struct osmo_stream_srv *conn, osmo_stream_srv_segmentation_cb_t segmentation_cb);
    151void osmo_stream_srv_set_segmentation_cb2(struct osmo_stream_srv *conn, osmo_stream_srv_segmentation_cb2_t segmentation_cb2);
    152
    153void osmo_stream_srv_send(struct osmo_stream_srv *conn, struct msgb *msg);
    154int osmo_stream_srv_recv(struct osmo_stream_srv *conn, struct msgb *msg);
    155
    156void osmo_stream_srv_clear_tx_queue(struct osmo_stream_srv *conn);
    157
    158enum osmo_stream_srv_param {
    159 OSMO_STREAM_SRV_PAR_TCP_SOCKOPT_KEEPALIVE = 256, /* uint8_t: 0 disable, 1 enable */
    160 OSMO_STREAM_SRV_PAR_TCP_SOCKOPT_KEEPIDLE, /* int: seconds */
    161 OSMO_STREAM_SRV_PAR_TCP_SOCKOPT_KEEPINTVL, /* int: seconds */
    162 OSMO_STREAM_SRV_PAR_TCP_SOCKOPT_KEEPCNT, /* int: Number of probes */
    163 OSMO_STREAM_SRV_PAR_TCP_SOCKOPT_USER_TIMEOUT, /* unsigned int: 0 "system default", >0 see sockopt TCP_USER_TIMEOUT */
    164};
    165int osmo_stream_srv_set_param(struct osmo_stream_srv *conn, enum osmo_stream_srv_param par,
    166 void *val, size_t val_len);
    167
    206struct osmo_stream_cli;
    207
    208typedef int (*osmo_stream_cli_connect_cb_t)(struct osmo_stream_cli *cli);
    209typedef int (*osmo_stream_cli_disconnect_cb_t)(struct osmo_stream_cli *cli);
    210typedef int (*osmo_stream_cli_read_cb_t)(struct osmo_stream_cli *cli);
    211
    217typedef int (*osmo_stream_cli_read_cb2_t)(struct osmo_stream_cli *cli, int res, struct msgb *msg);
    218
    219typedef int (*osmo_stream_cli_segmentation_cb_t)(struct msgb *msg);
    220typedef int (*osmo_stream_cli_segmentation_cb2_t)(struct osmo_stream_cli *cli, struct msgb *msg);
    221
    222void osmo_stream_cli_set_name(struct osmo_stream_cli *cli, const char *name);
    223void osmo_stream_cli_set_name_f(struct osmo_stream_cli *cli, const char *fmt, ...);
    224const char *osmo_stream_cli_get_name(const struct osmo_stream_cli *cli);
    225void osmo_stream_cli_set_nodelay(struct osmo_stream_cli *cli, bool nodelay);
    226int osmo_stream_cli_set_priority(struct osmo_stream_cli *cli, int sk_prio);
    227int osmo_stream_cli_set_ip_dscp(struct osmo_stream_cli *cli, uint8_t ip_dscp);
    228void osmo_stream_cli_set_addr(struct osmo_stream_cli *cli, const char *addr);
    229int osmo_stream_cli_set_addrs(struct osmo_stream_cli *cli, const char **addr, size_t addrcnt);
    230void osmo_stream_cli_set_port(struct osmo_stream_cli *cli, uint16_t port);
    231int osmo_stream_cli_set_type(struct osmo_stream_cli *cli, int type);
    232int osmo_stream_cli_set_domain(struct osmo_stream_cli *cli, int domain);
    233void osmo_stream_cli_set_proto(struct osmo_stream_cli *cli, uint16_t proto);
    234void osmo_stream_cli_set_local_addr(struct osmo_stream_cli *cli, const char *addr);
    235int osmo_stream_cli_set_local_addrs(struct osmo_stream_cli *cli, const char **addr, size_t addrcnt);
    236void osmo_stream_cli_set_local_port(struct osmo_stream_cli *cli, uint16_t port);
    237void osmo_stream_cli_set_data(struct osmo_stream_cli *cli, void *data);
    238void osmo_stream_cli_set_reconnect_timeout(struct osmo_stream_cli *cli, int timeout);
    239void *osmo_stream_cli_get_data(struct osmo_stream_cli *cli);
    240int osmo_stream_cli_set_tx_queue_max_length(struct osmo_stream_cli *cli, unsigned int size);
    241char *osmo_stream_cli_get_sockname(const struct osmo_stream_cli *cli);
    242struct osmo_fd *osmo_stream_cli_get_ofd(struct osmo_stream_cli *cli);
    243int osmo_stream_cli_get_fd(const struct osmo_stream_cli *cli);
    244struct osmo_io_fd *osmo_stream_cli_get_iofd(const struct osmo_stream_cli *cli);
    245void osmo_stream_cli_set_connect_cb(struct osmo_stream_cli *cli, osmo_stream_cli_connect_cb_t connect_cb);
    246void osmo_stream_cli_set_disconnect_cb(struct osmo_stream_cli *cli, osmo_stream_cli_disconnect_cb_t disconnect_cb);
    247void osmo_stream_cli_set_read_cb(struct osmo_stream_cli *cli, osmo_stream_cli_read_cb_t read_cb);
    248void osmo_stream_cli_set_read_cb2(struct osmo_stream_cli *cli, osmo_stream_cli_read_cb2_t read_cb);
    249void osmo_stream_cli_set_segmentation_cb(struct osmo_stream_cli *cli, osmo_stream_cli_segmentation_cb_t segmentation_cb);
    250void osmo_stream_cli_set_segmentation_cb2(struct osmo_stream_cli *cli, osmo_stream_cli_segmentation_cb2_t segmentation_cb2);
    251void osmo_stream_cli_reconnect(struct osmo_stream_cli *cli);
    252bool osmo_stream_cli_is_connected(struct osmo_stream_cli *cli);
    253
    254struct osmo_stream_cli *osmo_stream_cli_create(void *ctx);
    255void osmo_stream_cli_destroy(struct osmo_stream_cli *cli);
    256
    257int osmo_stream_cli_open(struct osmo_stream_cli *cli);
    258int osmo_stream_cli_open2(struct osmo_stream_cli *cli, int reconnect) \
    259 OSMO_DEPRECATED("Use osmo_stream_cli_set_reconnect_timeout() or osmo_stream_cli_reconnect() instead");
    260void osmo_stream_cli_close(struct osmo_stream_cli *cli);
    261
    262void osmo_stream_cli_send(struct osmo_stream_cli *cli, struct msgb *msg);
    263int osmo_stream_cli_recv(struct osmo_stream_cli *cli, struct msgb *msg);
    264
    265void osmo_stream_cli_clear_tx_queue(struct osmo_stream_cli *cli);
    266
    267enum osmo_stream_cli_param {
    268 OSMO_STREAM_CLI_PAR_SCTP_SOCKOPT_AUTH_SUPPORTED, /* uint8_t: 0 disable, 1 enable, 2 force disable, 3 force enable */
    269 OSMO_STREAM_CLI_PAR_SCTP_SOCKOPT_ASCONF_SUPPORTED, /* uint8_t: 0 disable, 1 enable, 2 force disable, 3 force enable */
    270 OSMO_STREAM_CLI_PAR_SCTP_INIT_NUM_OSTREAMS, /* uint16_t: amount of streams */
    271 OSMO_STREAM_CLI_PAR_SCTP_INIT_MAX_INSTREAMS, /* uint16_t: amount of streams */
    272 OSMO_STREAM_CLI_PAR_SCTP_INIT_MAX_ATTEMPTS, /* uint16_t: amount of attempts */
    273 OSMO_STREAM_CLI_PAR_SCTP_INIT_TIMEOUT, /* uint16_t: milliseconds */
    274
    275 OSMO_STREAM_CLI_PAR_TCP_SOCKOPT_KEEPALIVE = 256, /* uint8_t: 0 disable, 1 enable */
    276 OSMO_STREAM_CLI_PAR_TCP_SOCKOPT_KEEPIDLE, /* int: seconds */
    277 OSMO_STREAM_CLI_PAR_TCP_SOCKOPT_KEEPINTVL, /* int: seconds */
    278 OSMO_STREAM_CLI_PAR_TCP_SOCKOPT_KEEPCNT, /* int: Number of probes */
    279 OSMO_STREAM_CLI_PAR_TCP_SOCKOPT_USER_TIMEOUT, /* unsigned int: 0 "system default", >0 see sockopt TCP_USER_TIMEOUT */
    280};
    281
    282int osmo_stream_cli_set_param(struct osmo_stream_cli *cli, enum osmo_stream_cli_param par,
    283 void *val, size_t val_len);
    284
    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:713
    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:985
    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:1497
    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:1417
    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:786
    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:702
    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:217
    void osmo_stream_cli_reconnect(struct osmo_stream_cli *cli)
    Re-connect an Osmocom Stream Client.
    Definition: stream_cli.c:254
    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:1071
    struct osmo_stream_cli * osmo_stream_cli_create(void *ctx)
    Create an Osmocom stream client.
    Definition: stream_cli.c:500
    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:1196
    int osmo_stream_cli_set_domain(struct osmo_stream_cli *cli, int domain)
    Set the socket domain for the stream client link.
    Definition: stream_cli.c:905
    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:762
    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:885
    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:934
    void * osmo_stream_cli_get_data(struct osmo_stream_cli *cli)
    Retrieve application private data of the stream client socket.
    Definition: stream_cli.c:942
    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:1006
    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:997
    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:774
    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:1030
    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:1017
    bool osmo_stream_cli_is_connected(struct osmo_stream_cli *cli)
    Check if Osmocom Stream Client is in connected state.
    Definition: stream_cli.c:263
    int osmo_stream_cli_open(struct osmo_stream_cli *cli)
    Open connection of an Osmocom stream client.
    Definition: stream_cli.c:1225
    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:953
    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:811
    void osmo_stream_cli_destroy(struct osmo_stream_cli *cli)
    Destroy a Osmocom stream client (includes close).
    Definition: stream_cli.c:1040
    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:1136
    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:725
    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:1360
    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:853
    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:750
    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:303
    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:1165
    void osmo_stream_cli_set_name_f(struct osmo_stream_cli *cli, const char *fmt,...)
    Set a name on the cli object using arguments like printf() (used during logging).
    Definition: stream_cli.c:678
    void osmo_stream_cli_close(struct osmo_stream_cli *cli)
    Close an Osmocom Stream Client.
    Definition: stream_cli.c:222
    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:925
    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:669
    char * osmo_stream_cli_get_sockname(const struct osmo_stream_cli *cli)
    Retrieve the stream client socket description.
    Definition: stream_cli.c:970
    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:870
    void osmo_stream_cli_clear_tx_queue(struct osmo_stream_cli *cli)
    Clear the transmit queue of the stream client.
    Definition: stream_cli.c:1472
    int osmo_stream_cli_get_fd(const struct osmo_stream_cli *cli)
    Retrieve file descriptor of the stream client socket.
    Definition: stream_cli.c:283
    int osmo_stream_srv_set_param(struct osmo_stream_srv *conn, enum osmo_stream_srv_param par, void *val, size_t val_len)
    Set given parameter of stream_srv to given value.
    Definition: stream_srv.c:1461
    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:976
    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:370
    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:1070
    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:527
    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:356
    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:621
    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:1217
    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:282
    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:266
    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:1254
    void osmo_stream_srv_destroy(struct osmo_stream_srv *conn)
    Destroy given Stream Server.
    Definition: stream_srv.c:1302
    const char * osmo_stream_srv_get_sockname(const struct osmo_stream_srv *conn)
    Retrieve the stream server socket description.
    Definition: stream_srv.c:1240
    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:295
    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:1198
    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:124
    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:410
    int osmo_stream_srv_link_open(struct osmo_stream_srv_link *link)
    Open the stream server link.
    Definition: stream_srv.c:568
    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:254
    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:651
    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:343
    void osmo_stream_srv_set_name_f(struct osmo_stream_srv *conn, const char *fmt,...)
    Set a name on the srv object using arguments like printf() (used during logging).
    Definition: stream_srv.c:1079
    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:508
    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:495
    int osmo_stream_srv_get_fd(const struct osmo_stream_srv *srv)
    Retrieve File Descriptor of the stream server.
    Definition: stream_srv.c:1264
    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:1142
    void osmo_stream_srv_link_destroy(struct osmo_stream_srv_link *link)
    Destroy the stream server link.
    Definition: stream_srv.c:556
    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:1022
    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:542
    int osmo_stream_srv_link_set_domain(struct osmo_stream_srv_link *link, int domain)
    Set the socket domain for the stream server link.
    Definition: stream_srv.c:390
    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:1151
    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:1292
    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:1283
    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:1330
    struct osmo_stream_srv_link * osmo_stream_srv_link_create(void *ctx)
    Create an Osmocom Stream Server Link.
    Definition: stream_srv.c:221
    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:319
    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:1384
    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:419
    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:306
    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:1117
    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:635
    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:1103
    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:430
    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:245
    void * osmo_stream_srv_get_data(struct osmo_stream_srv *conn)
    Retrieve application private data of the stream server.
    Definition: stream_srv.c:1231
    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:516
    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:1130
    html/osmux_8h.js0000644000175000017500000000255715057675337013145 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/structosmo__twrtp__stats.html0000644000175000017500000002115215057675337017111 0ustar buildbuild libosmo-netif: osmo_twrtp_stats Struct Reference
    libosmo-netif 1.6.0.16-c51c
    Osmocom network interface library

    Stats collected during the lifetime of a twrtp instance. More...

    #include <twrtp.h>

    Data Fields

    uint32_t rx_rtp_pkt
     
    uint32_t rx_rtp_badsrc
     
    uint32_t rx_rtcp_pkt
     
    uint32_t rx_rtcp_badsrc
     
    uint32_t rx_rtcp_invalid
     
    uint32_t rx_rtcp_wrong_ssrc
     
    uint32_t tx_rtp_pkt
     
    uint32_t tx_rtp_bytes
     
    uint32_t tx_rtcp_pkt
     

    Detailed Description

    Stats collected during the lifetime of a twrtp instance.

    For a detailed description of each of these counters, see Chapter 6 of twrtp guide document.

    This stats structure is never allocated or accessed in a writable manner by applications; instead it is allocated inside the library as part of opaque struct osmo_twrtp, while applications are given const pointers to these structs.


    The documentation for this struct was generated from the following file:
    html/datagram_8h.html0000644000175000017500000006250115057675337014075 0ustar buildbuild libosmo-netif: include/osmocom/netif/datagram.h File Reference
    libosmo-netif 1.6.0.16-c51c
    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.html0000644000175000017500000002171715057675337013677 0ustar buildbuild libosmo-netif: Data Structures
    libosmo-netif 1.6.0.16-c51c
    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
     Cosmo_twjit_rr_infoInfo collected from the incoming RTP data stream for the purpose of generating RTCP reception report blocks
     Cosmo_twjit_statsStats collected during the lifetime of a twjit instance
     Cosmo_twrtp_statsStats collected during the lifetime of a twrtp instance
     Cosmux_hdrOsmux protocol header
     Cosmux_in_handleOne to handle all existing RTP flows
     Cosmux_out_handleOne per OSmux circuit_id, ie
     Crtcp_hdr
     Crtcp_rr_block
     Crtcp_sr_block
     Crtcp_sr_rr_hdr
     Crtp_hdr
     Crtp_x_hdr
    html/structosmux__out__handle.html0000644000175000017500000002203015057675337017027 0ustar buildbuild libosmo-netif: osmux_out_handle Struct Reference
    libosmo-netif 1.6.0.16-c51c
    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.html0000644000175000017500000001457215057675337015337 0ustar buildbuild libosmo-netif: osmux_hdr Struct Reference
    libosmo-netif 1.6.0.16-c51c
    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.html0000644000175000017500000034400415057675337015616 0ustar buildbuild libosmo-netif: Osmocom Stream Server
    libosmo-netif 1.6.0.16-c51c
    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 ,
      OSMO_STREAM_SRV_LINK_PAR_TCP_SOCKOPT_KEEPALIVE = 256 , OSMO_STREAM_SRV_LINK_PAR_TCP_SOCKOPT_KEEPIDLE , OSMO_STREAM_SRV_LINK_PAR_TCP_SOCKOPT_KEEPINTVL , OSMO_STREAM_SRV_LINK_PAR_TCP_SOCKOPT_KEEPCNT ,
      OSMO_STREAM_SRV_LINK_PAR_TCP_SOCKOPT_USER_TIMEOUT
    }
     
    enum  osmo_stream_srv_param {
      OSMO_STREAM_SRV_PAR_TCP_SOCKOPT_KEEPALIVE = 256 , OSMO_STREAM_SRV_PAR_TCP_SOCKOPT_KEEPIDLE , OSMO_STREAM_SRV_PAR_TCP_SOCKOPT_KEEPINTVL , OSMO_STREAM_SRV_PAR_TCP_SOCKOPT_KEEPCNT ,
      OSMO_STREAM_SRV_PAR_TCP_SOCKOPT_USER_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 domain 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...
     
    void osmo_stream_srv_set_name_f (struct osmo_stream_srv *conn, const char *fmt,...)
     Set a name on the srv object using arguments like printf() (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)
     
    int osmo_stream_srv_set_param (struct osmo_stream_srv *conn, enum osmo_stream_srv_param par, void *val, size_t val_len)
     Set given parameter of stream_srv to given value. More...
     

    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

    Note: In case of error, the caller is responsible for closing the fd.

    ◆ 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

    Note: In case of error, the caller is responsible for closing the fd.

    ◆ 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 domain 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]domainSocket 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]linkstream server link 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

    References osmo_stream_srv_set_name_f().

    ◆ osmo_stream_srv_set_name_f()

    void osmo_stream_srv_set_name_f ( struct osmo_stream_srv *  conn,
    const char *  fmt,
      ... 
    )

    Set a name on the srv object using arguments like printf() (used during logging).

    Parameters
    [in]srvstream_srv whose name is to be set
    [in]namethe name to be set on srv

    Referenced by osmo_stream_srv_set_name().

    ◆ osmo_stream_srv_set_param()

    int osmo_stream_srv_set_param ( struct osmo_stream_srv *  conn,
    enum osmo_stream_srv_param  par,
    void *  val,
    size_t  val_len 
    )

    Set given parameter of stream_srv to given value.

    Parameters
    [in]connstream server conn 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_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.png0000644000175000017500000000017315057675337012474 0ustar buildbuildPNG  IHDR BIDATx 0 ׬ՙ\39b!9{|I>$#ߴ8/z/>2[giU,/~\ 9ٸIENDB`html/osmux__input_8c.js0000644000175000017500000000062115057675337014504 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.html0000644000175000017500000001416315057675337013367 0ustar buildbuild libosmo-netif: Modules
    libosmo-netif 1.6.0.16-c51c
    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
     Themyscira Wireless RTP jitter buffer implementationThe present twjit layer is an interface mechanism from an incoming RTP stream to an output application that has fixed timing requirements, e.g., the Tx side of GSM Um TCH or a T1/E1 TDM interface
     Themyscira Wireless RTP endpoint implementationOsmo_twrtp is a complete RTP endpoint
     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/structosmo__twjit__rr__info.js0000644000175000017500000000115615057675337017203 0ustar buildbuildvar structosmo__twjit__rr__info = [ [ "base_seq", "structosmo__twjit__rr__info.html#a55a2069db2d025292d2f54d14abfa0db", null ], [ "expected_pkt", "structosmo__twjit__rr__info.html#ad31676a36b0ba3634ecbd3b93aac8c5e", null ], [ "jitter_accum", "structosmo__twjit__rr__info.html#a87354c21b9215ee56d87dcb5a7606a78", null ], [ "max_seq_ext", "structosmo__twjit__rr__info.html#aac5a9bf8abb41a803da8592cee7e3148", null ], [ "rx_packets", "structosmo__twjit__rr__info.html#a5f3d83ca8470d45943991164b22969e7", null ], [ "ssrc", "structosmo__twjit__rr__info.html#a95023909bd6410be60a3ec0fb4e34981", null ] ];html/nav_f.png0000644000175000017500000000023115057675337012617 0ustar buildbuildPNG  IHDR8`IDATxK Eі[BmkHprӼ.ꎤR6Z VIE5jliIJ0/u޿6sH yIENDB`html/folderclosed.png0000644000175000017500000000115015057675337014174 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.html0000644000175000017500000002656015057675337013025 0ustar buildbuild libosmo-netif: File List
    libosmo-netif 1.6.0.16-c51c
    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
     rtcp_defs.h
     rtp.h
     sctp.h
     stream.h
     stream_private.h
     twjit.h
     twjit_private.h
     twrtp.h
     version.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.js0000644000175000017500000053125515057675337012714 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.png0000644000175000017500000000022315057675337012461 0ustar buildbuildPNG  IHDR5ZIDATx DP1lm rj.e D[ɾ|6V3?Ls'(}>+ Kch` ^ލnIENDB`html/nav_g.png0000644000175000017500000000013715057675337012625 0ustar buildbuildPNG  IHDR1&IDATx1 OHf_ ->~M iMS<IENDB`html/structrtcp__rr__block.html0000644000175000017500000001653115057675337016310 0ustar buildbuild libosmo-netif: rtcp_rr_block Struct Reference
    libosmo-netif 1.6.0.16-c51c
    Osmocom network interface library
    rtcp_rr_block Struct Reference

    Data Fields

    uint32_t ssrc
     
    uint32_t lost_word
     
    uint32_t max_seq_ext
     
    uint32_t jitter
     
    uint16_t lsr_sec
     
    uint16_t lsr_fract
     
    uint16_t dlsr_sec
     
    uint16_t dlsr_fract
     

    The documentation for this struct was generated from the following file:
    html/sctp_8h_source.html0000644000175000017500000003377615057675337014662 0ustar buildbuild libosmo-netif: include/osmocom/netif/sctp.h Source File
    libosmo-netif 1.6.0.16-c51c
    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/0000755000175000017500000000000015057675337012271 5ustar buildbuildhtml/search/nomatches.html0000644000175000017500000000076415057675337015147 0ustar buildbuild
    No Matches
    html/search/all_a.js0000644000175000017500000000050615057675337013700 0ustar buildbuildvar searchData= [ ['themyscira_20wireless_20rtp_20endpoint_20implementation_0',['Themyscira Wireless RTP endpoint implementation',['../group__twrtp.html',1,'']]], ['themyscira_20wireless_20rtp_20jitter_20buffer_20implementation_1',['Themyscira Wireless RTP jitter buffer implementation',['../group__twjit.html',1,'']]] ]; html/search/files_0.html0000644000175000017500000000263515057675337014506 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/close.svg0000644000175000017500000000240415057675337014117 0ustar buildbuild image/svg+xml html/search/variables_2.js0000644000175000017500000000023615057675337015021 0ustar buildbuildvar searchData= [ ['jitter_5faccum_0',['jitter_accum',['../structosmo__twjit__rr__info.html#a87354c21b9215ee56d87dcb5a7606a78',1,'osmo_twjit_rr_info']]] ]; html/search/classes_0.js0000644000175000017500000000024115057675337014500 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.js0000644000175000017500000000024715057675337013625 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/variables_1.html0000644000175000017500000000264115057675337015352 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_4.js0000644000175000017500000000022115057675337015015 0ustar buildbuildvar searchData= [ ['osmux_5fseq_0',['osmux_seq',['../structosmux__in__handle.html#a1ba076a41ef9c3413665b7444c6521cc',1,'osmux_in_handle']]] ]; html/search/groups_1.js0000644000175000017500000000050615057675337014367 0ustar buildbuildvar searchData= [ ['themyscira_20wireless_20rtp_20endpoint_20implementation_0',['Themyscira Wireless RTP endpoint implementation',['../group__twrtp.html',1,'']]], ['themyscira_20wireless_20rtp_20jitter_20buffer_20implementation_1',['Themyscira Wireless RTP jitter buffer implementation',['../group__twjit.html',1,'']]] ]; html/search/files_3.html0000644000175000017500000000263515057675337014511 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/functions_0.js0000644000175000017500000011207015057675337015057 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_5fname_5ff_66',['osmo_stream_cli_set_name_f',['../group__stream__cli.html#gacf917820669504d5f2856eaf74508921',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fnodelay_67',['osmo_stream_cli_set_nodelay',['../group__stream__cli.html#gaa196e78db6ca32abb1473566b4f1b04b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fparam_68',['osmo_stream_cli_set_param',['../group__stream__cli.html#ga0638e98001fa4bdd36533718472dfac7',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fport_69',['osmo_stream_cli_set_port',['../group__stream__cli.html#gab8b9f65bebfeb83c6e33d102e9439770',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fpriority_70',['osmo_stream_cli_set_priority',['../group__stream__cli.html#gac3ec56e61ce062300ad1df73a5f2c7f8',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fproto_71',['osmo_stream_cli_set_proto',['../group__stream__cli.html#ga91d57aa94a370520540d7272af66a23b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fread_5fcb_72',['osmo_stream_cli_set_read_cb',['../group__stream__cli.html#ga798f23db7e2e1d999775589db8a73d03',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fread_5fcb2_73',['osmo_stream_cli_set_read_cb2',['../group__stream__cli.html#ga7892eb77d40f08a254f654786d0b996b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5freconnect_5ftimeout_74',['osmo_stream_cli_set_reconnect_timeout',['../group__stream__cli.html#gade74792afe35f31dd2584c888db3dd62',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fsegmentation_5fcb_75',['osmo_stream_cli_set_segmentation_cb',['../group__stream__cli.html#gab6094559935824750d82b9164ed76910',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fsegmentation_5fcb2_76',['osmo_stream_cli_set_segmentation_cb2',['../group__stream__cli.html#gaf62f1dbe4570d8ffd00b3bdc3f28d24b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5ftx_5fqueue_5fmax_5flength_77',['osmo_stream_cli_set_tx_queue_max_length',['../group__stream__cli.html#ga889f96540a1a2271a40dee063eaf5e9d',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5ftype_78',['osmo_stream_cli_set_type',['../group__stream__cli.html#ga5e5c4c9aacc1cd1d303c0295018594cb',1,'stream_cli.c']]], ['osmo_5fstream_5fsrv_5fcreate_79',['osmo_stream_srv_create',['../group__stream__srv.html#ga136b426790b6322f58f89059b88aaa0b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fcreate2_80',['osmo_stream_srv_create2',['../group__stream__srv.html#ga8be283e1a143e346b4d6ccf33cbb9b98',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fdestroy_81',['osmo_stream_srv_destroy',['../group__stream__srv.html#ga47f18e063f64f22cb74d58d8b7243bed',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fdata_82',['osmo_stream_srv_get_data',['../group__stream__srv.html#gae2a0ef01097d964c71e38600b4c078d5',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5ffd_83',['osmo_stream_srv_get_fd',['../group__stream__srv.html#ga803c8ba415f66cc1029b3899cc53b807',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fiofd_84',['osmo_stream_srv_get_iofd',['../group__stream__srv.html#ga9e00a9172d5b2708afa269d52c118eff',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fmaster_85',['osmo_stream_srv_get_master',['../group__stream__srv.html#ga9cf689935bf6ffac4f86f56219d73c8e',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fname_86',['osmo_stream_srv_get_name',['../group__stream__srv.html#gad34dc0f7ebf7c84653514566e431a1d2',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fofd_87',['osmo_stream_srv_get_ofd',['../group__stream__srv.html#ga47bbca4f12717db2e6158eefe6310b9b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fsockname_88',['osmo_stream_srv_get_sockname',['../group__stream__srv.html#ga4f176a35751509dc741fbd2b52f45b22',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fclose_89',['osmo_stream_srv_link_close',['../group__stream__srv.html#gad325d97b09c724e830c98d76b890520d',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fcreate_90',['osmo_stream_srv_link_create',['../group__stream__srv.html#gaad262988c7ac365566f03843c560f892',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fdestroy_91',['osmo_stream_srv_link_destroy',['../group__stream__srv.html#ga882acaaa5935422b0e09a2ce8c8019ec',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fdata_92',['osmo_stream_srv_link_get_data',['../group__stream__srv.html#gacb5d68c2a6a9663f99266c70747bce04',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5ffd_93',['osmo_stream_srv_link_get_fd',['../group__stream__srv.html#gae2ef09bc8da55db30d967563dfc6561a',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fname_94',['osmo_stream_srv_link_get_name',['../group__stream__srv.html#ga67520942e5a404a0b3a6960b8a161de8',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fofd_95',['osmo_stream_srv_link_get_ofd',['../group__stream__srv.html#ga7b8981351a154c357fcefd39c31ad42a',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fsockname_96',['osmo_stream_srv_link_get_sockname',['../group__stream__srv.html#ga7d7b6af7df24e90dc758a088bae6316d',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fis_5fopened_97',['osmo_stream_srv_link_is_opened',['../group__stream__srv.html#ga28243be108ed0302b0f5a9d1dfc96b22',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fopen_98',['osmo_stream_srv_link_open',['../group__stream__srv.html#ga603b89074d3e8c0fb44144ab1864f0d4',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5faccept_5fcb_99',['osmo_stream_srv_link_set_accept_cb',['../group__stream__srv.html#ga1eea525d4e1e7a24c9c08881994ceb7e',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5faddr_100',['osmo_stream_srv_link_set_addr',['../group__stream__srv.html#gacece90116484e34540def69b05c66f57',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5faddrs_101',['osmo_stream_srv_link_set_addrs',['../group__stream__srv.html#gaadabca7d23c52c39e291bf7e05f0055b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fdata_102',['osmo_stream_srv_link_set_data',['../group__stream__srv.html#ga5ef0f0c85a52c08e8c10d36a8f44e392',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fdomain_103',['osmo_stream_srv_link_set_domain',['../group__stream__srv.html#ga9629b516297c31f34af48e4630973dab',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fip_5fdscp_104',['osmo_stream_srv_link_set_ip_dscp',['../group__stream__srv.html#ga53be410e4b8cf79e850b8cd5c01b4c78',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fmsgb_5falloc_5finfo_105',['osmo_stream_srv_link_set_msgb_alloc_info',['../group__stream__srv.html#ga925981abcacca9f9a3375d511309cb32',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fname_106',['osmo_stream_srv_link_set_name',['../group__stream__srv.html#gadef998825a4739660b198151fcee4201',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fnodelay_107',['osmo_stream_srv_link_set_nodelay',['../group__stream__srv.html#ga41e8ad2c761aaa00313aa11d1f29a3ed',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fparam_108',['osmo_stream_srv_link_set_param',['../group__stream__srv.html#ga759bceb4ce155f88e3e7817ce4c9449d',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fport_109',['osmo_stream_srv_link_set_port',['../group__stream__srv.html#ga76bbbafd1d8dc9c9ebffd301503b6dd9',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fpriority_110',['osmo_stream_srv_link_set_priority',['../group__stream__srv.html#ga3bfcfe6f09fa8f87dacb7ea215c64bae',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fproto_111',['osmo_stream_srv_link_set_proto',['../group__stream__srv.html#ga2508987133a93863d2a50103004b0f36',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5ftx_5fqueue_5fmax_5flength_112',['osmo_stream_srv_link_set_tx_queue_max_length',['../group__stream__srv.html#gad88e9249699c53894cb34c099b5e0c4b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5ftype_113',['osmo_stream_srv_link_set_type',['../group__stream__srv.html#ga1903f9aa2e6f9283ebcf20f573b1d970',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5frecv_114',['osmo_stream_srv_recv',['../group__stream__srv.html#gac86242c41223c525c770ff7e7515d83e',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fsend_115',['osmo_stream_srv_send',['../group__stream__srv.html#gaa1589994cf6eab27742cafee6b7fb491',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fclosed_5fcb_116',['osmo_stream_srv_set_closed_cb',['../group__stream__srv.html#gaed83d9686289eee534d77a61b96fbd90',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fdata_117',['osmo_stream_srv_set_data',['../group__stream__srv.html#ga9891663b20714d72f992e44ad1e92eea',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fflush_5fand_5fdestroy_118',['osmo_stream_srv_set_flush_and_destroy',['../group__stream__srv.html#ga8390ce6740e56eb22215e1c5805c95f1',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fname_119',['osmo_stream_srv_set_name',['../group__stream__srv.html#ga196834d254fd94922d6be91b7b5b1ed3',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fname_5ff_120',['osmo_stream_srv_set_name_f',['../group__stream__srv.html#ga7af35085592c1dbaf2a3b6be1b49bef2',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fparam_121',['osmo_stream_srv_set_param',['../group__stream__srv.html#ga0e7adb8aef2f007144d4df24b21fbfe4',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fread_5fcb_122',['osmo_stream_srv_set_read_cb',['../group__stream__srv.html#gad0d7b7e236826c52f10a7b4f50009d01',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fsegmentation_5fcb_123',['osmo_stream_srv_set_segmentation_cb',['../group__stream__srv.html#ga560a6d868bf95bf2f3a4b716bfd5cac9',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fsegmentation_5fcb2_124',['osmo_stream_srv_set_segmentation_cb2',['../group__stream__srv.html#ga348c4560f69403fc3a3dfcbe874c2593',1,'stream_srv.c']]], ['osmo_5ftwjit_5fconfig_5falloc_125',['osmo_twjit_config_alloc',['../group__twjit.html#ga259b383e11fc673da0e931a806c20f91',1,'osmo_twjit_config_alloc(void *ctx): twjit_conf.c'],['../group__twjit.html#ga259b383e11fc673da0e931a806c20f91',1,'osmo_twjit_config_alloc(void *ctx): twjit_conf.c']]], ['osmo_5ftwjit_5fconfig_5ffree_126',['osmo_twjit_config_free',['../group__twjit.html#gaeaa7314c9ee2efbdce688cc13b63b463',1,'osmo_twjit_config_free(struct osmo_twjit_config *conf): twjit_conf.c'],['../group__twjit.html#gaeaa7314c9ee2efbdce688cc13b63b463',1,'osmo_twjit_config_free(struct osmo_twjit_config *conf): twjit_conf.c']]], ['osmo_5ftwjit_5fconfig_5fset_5fbuffer_5fdepth_127',['osmo_twjit_config_set_buffer_depth',['../group__twjit.html#ga4e56a380bf9751aaf6f6fc323c747c2c',1,'osmo_twjit_config_set_buffer_depth(struct osmo_twjit_config *conf, uint16_t bd_start, uint16_t bd_hiwat): twjit_conf.c'],['../group__twjit.html#ga4e56a380bf9751aaf6f6fc323c747c2c',1,'osmo_twjit_config_set_buffer_depth(struct osmo_twjit_config *conf, uint16_t bd_start, uint16_t bd_hiwat): twjit_conf.c']]], ['osmo_5ftwjit_5fconfig_5fset_5fhandover_5fon_5fmarker_128',['osmo_twjit_config_set_handover_on_marker',['../group__twjit.html#ga63204cb283949fd8c4417142616f6591',1,'osmo_twjit_config_set_handover_on_marker(struct osmo_twjit_config *conf, bool hom): twjit_conf.c'],['../group__twjit.html#ga63204cb283949fd8c4417142616f6591',1,'osmo_twjit_config_set_handover_on_marker(struct osmo_twjit_config *conf, bool hom): twjit_conf.c']]], ['osmo_5ftwjit_5fconfig_5fset_5fmax_5ffuture_5fsec_129',['osmo_twjit_config_set_max_future_sec',['../group__twjit.html#ga55d8b223908b5a638ec62983fcfc7706',1,'osmo_twjit_config_set_max_future_sec(struct osmo_twjit_config *conf, uint16_t max_future_sec): twjit_conf.c'],['../group__twjit.html#ga55d8b223908b5a638ec62983fcfc7706',1,'osmo_twjit_config_set_max_future_sec(struct osmo_twjit_config *conf, uint16_t max_future_sec): twjit_conf.c']]], ['osmo_5ftwjit_5fconfig_5fset_5fstart_5fmax_5fdelta_130',['osmo_twjit_config_set_start_max_delta',['../group__twjit.html#ga260c4ebd28ed8592c4b04fc9cadc2935',1,'osmo_twjit_config_set_start_max_delta(struct osmo_twjit_config *conf, uint16_t delta_ms): twjit_conf.c'],['../group__twjit.html#ga260c4ebd28ed8592c4b04fc9cadc2935',1,'osmo_twjit_config_set_start_max_delta(struct osmo_twjit_config *conf, uint16_t delta_ms): twjit_conf.c']]], ['osmo_5ftwjit_5fconfig_5fset_5fstart_5fmin_5fdelta_131',['osmo_twjit_config_set_start_min_delta',['../group__twjit.html#ga8df47e86d7ead591db87da21c73e8dda',1,'osmo_twjit_config_set_start_min_delta(struct osmo_twjit_config *conf, uint16_t delta_ms): twjit_conf.c'],['../group__twjit.html#ga8df47e86d7ead591db87da21c73e8dda',1,'osmo_twjit_config_set_start_min_delta(struct osmo_twjit_config *conf, uint16_t delta_ms): twjit_conf.c']]], ['osmo_5ftwjit_5fconfig_5fset_5fthinning_5fint_132',['osmo_twjit_config_set_thinning_int',['../group__twjit.html#ga8c272a9f3344a110dce9e6d66d505493',1,'osmo_twjit_config_set_thinning_int(struct osmo_twjit_config *conf, uint16_t thinning_int): twjit_conf.c'],['../group__twjit.html#ga8c272a9f3344a110dce9e6d66d505493',1,'osmo_twjit_config_set_thinning_int(struct osmo_twjit_config *conf, uint16_t thinning_int): twjit_conf.c']]], ['osmo_5ftwjit_5fconfig_5fwrite_133',['osmo_twjit_config_write',['../group__twjit.html#gaec23d0393bcf6a30efc503e167afff1b',1,'osmo_twjit_config_write(struct vty *vty, const struct osmo_twjit_config *conf, const char *prefix): twjit_conf.c'],['../group__twjit.html#gaec23d0393bcf6a30efc503e167afff1b',1,'osmo_twjit_config_write(struct vty *vty, const struct osmo_twjit_config *conf, const char *prefix): twjit_conf.c']]], ['osmo_5ftwjit_5fcreate_134',['osmo_twjit_create',['../group__twjit.html#ga77a05c62c2cc131b4ca8a00cf8ecca62',1,'osmo_twjit_create(void *ctx, uint16_t clock_khz, uint16_t quantum_ms, const struct osmo_twjit_config *config): twjit.c'],['../group__twjit.html#ga77a05c62c2cc131b4ca8a00cf8ecca62',1,'osmo_twjit_create(void *ctx, uint16_t clock_khz, uint16_t quantum_ms, const struct osmo_twjit_config *config): twjit.c']]], ['osmo_5ftwjit_5fdestroy_135',['osmo_twjit_destroy',['../group__twjit.html#ga7c28897aed4b25c3ede1a67fc5e6ae95',1,'osmo_twjit_destroy(struct osmo_twjit *twjit): twjit.c'],['../group__twjit.html#ga7c28897aed4b25c3ede1a67fc5e6ae95',1,'osmo_twjit_destroy(struct osmo_twjit *twjit): twjit.c']]], ['osmo_5ftwjit_5fget_5frr_5finfo_136',['osmo_twjit_get_rr_info',['../group__twjit.html#ga40f81a7ab7af3942e540a50bb367ae56',1,'osmo_twjit_get_rr_info(struct osmo_twjit *twjit): twjit.c'],['../group__twjit.html#ga40f81a7ab7af3942e540a50bb367ae56',1,'osmo_twjit_get_rr_info(struct osmo_twjit *twjit): twjit.c']]], ['osmo_5ftwjit_5fget_5fstats_137',['osmo_twjit_get_stats',['../group__twjit.html#gaeb5d008cacb7d8329c0f0fffb4463504',1,'osmo_twjit_get_stats(struct osmo_twjit *twjit): twjit.c'],['../group__twjit.html#gaeb5d008cacb7d8329c0f0fffb4463504',1,'osmo_twjit_get_stats(struct osmo_twjit *twjit): twjit.c']]], ['osmo_5ftwjit_5finput_138',['osmo_twjit_input',['../group__twjit.html#gaf3383fd56f33f86d21aa41afe318c064',1,'osmo_twjit_input(struct osmo_twjit *twjit, struct msgb *msg): twjit.c'],['../group__twjit.html#gaf3383fd56f33f86d21aa41afe318c064',1,'osmo_twjit_input(struct osmo_twjit *twjit, struct msgb *msg): twjit.c']]], ['osmo_5ftwjit_5foutput_139',['osmo_twjit_output',['../group__twjit.html#gaad365cac430364b862957f46eaaca391',1,'osmo_twjit_output(struct osmo_twjit *twjit): twjit.c'],['../group__twjit.html#gaad365cac430364b862957f46eaaca391',1,'osmo_twjit_output(struct osmo_twjit *twjit): twjit.c']]], ['osmo_5ftwjit_5freset_140',['osmo_twjit_reset',['../group__twjit.html#ga76bed8e0f9d9a23d8d6fea1d8b62abbf',1,'osmo_twjit_reset(struct osmo_twjit *twjit): twjit.c'],['../group__twjit.html#ga76bed8e0f9d9a23d8d6fea1d8b62abbf',1,'osmo_twjit_reset(struct osmo_twjit *twjit): twjit.c']]], ['osmo_5ftwjit_5frr_5finfo_5fvalid_141',['osmo_twjit_rr_info_valid',['../group__twjit.html#ga7a0b80aa4271d55bbb720a73ab4db421',1,'osmo_twjit_rr_info_valid(struct osmo_twjit *twjit): twjit.c'],['../group__twjit.html#ga7a0b80aa4271d55bbb720a73ab4db421',1,'osmo_twjit_rr_info_valid(struct osmo_twjit *twjit): twjit.c']]], ['osmo_5ftwjit_5fset_5fconfig_142',['osmo_twjit_set_config',['../group__twjit.html#ga930cda4155d06b50b87fcdc1785e7bec',1,'osmo_twjit_set_config(struct osmo_twjit *twjit, const struct osmo_twjit_config *config): twjit.c'],['../group__twjit.html#ga930cda4155d06b50b87fcdc1785e7bec',1,'osmo_twjit_set_config(struct osmo_twjit *twjit, const struct osmo_twjit_config *config): twjit.c']]], ['osmo_5ftwrtp_5fbind_5flocal_143',['osmo_twrtp_bind_local',['../group__twrtp.html#gaaebac4722d129a840d35a3d0c0aa63a7',1,'osmo_twrtp_bind_local(struct osmo_twrtp *endp, const struct osmo_sockaddr *rtp_addr, bool bind_rtcp): twrtp.c'],['../group__twrtp.html#gaaebac4722d129a840d35a3d0c0aa63a7',1,'osmo_twrtp_bind_local(struct osmo_twrtp *endp, const struct osmo_sockaddr *rtp_addr, bool bind_rtcp): twrtp.c']]], ['osmo_5ftwrtp_5fcreate_144',['osmo_twrtp_create',['../group__twrtp.html#gacf8121473c5a45b5710a0b95d8e16575',1,'osmo_twrtp_create(void *ctx, uint16_t clock_khz, uint16_t quantum_ms, bool random_ts_seq, const struct osmo_twjit_config *twjit_config): twrtp.c'],['../group__twrtp.html#gacf8121473c5a45b5710a0b95d8e16575',1,'osmo_twrtp_create(void *ctx, uint16_t clock_khz, uint16_t quantum_ms, bool random_ts_seq, const struct osmo_twjit_config *twjit_config): twrtp.c']]], ['osmo_5ftwrtp_5fdestroy_145',['osmo_twrtp_destroy',['../group__twrtp.html#ga5630b784627262f27ca75b524e094a73',1,'osmo_twrtp_destroy(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#ga5630b784627262f27ca75b524e094a73',1,'osmo_twrtp_destroy(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5fget_5frtcp_5ffd_146',['osmo_twrtp_get_rtcp_fd',['../group__twrtp.html#gadf5ed8a54818f6705d1e036c3ddd9cf5',1,'osmo_twrtp_get_rtcp_fd(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#gadf5ed8a54818f6705d1e036c3ddd9cf5',1,'osmo_twrtp_get_rtcp_fd(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5fget_5frtp_5ffd_147',['osmo_twrtp_get_rtp_fd',['../group__twrtp.html#ga059c9fdc8016d0e872d226f7980fd872',1,'osmo_twrtp_get_rtp_fd(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#ga059c9fdc8016d0e872d226f7980fd872',1,'osmo_twrtp_get_rtp_fd(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5fget_5fstats_148',['osmo_twrtp_get_stats',['../group__twrtp.html#gaaee07c8c0e31f8551868079a18cb29cf',1,'osmo_twrtp_get_stats(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#gaaee07c8c0e31f8551868079a18cb29cf',1,'osmo_twrtp_get_stats(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5fget_5ftwjit_149',['osmo_twrtp_get_twjit',['../group__twrtp.html#gaa2cb81a157a22376b0c51ffc2421760e',1,'osmo_twrtp_get_twjit(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#gaa2cb81a157a22376b0c51ffc2421760e',1,'osmo_twrtp_get_twjit(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5fgot_5frtcp_5frr_150',['osmo_twrtp_got_rtcp_rr',['../group__twrtp.html#gab5cb8eab0ff864174338d6e8cab24b2b',1,'osmo_twrtp_got_rtcp_rr(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#gab5cb8eab0ff864174338d6e8cab24b2b',1,'osmo_twrtp_got_rtcp_rr(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5frr_5fjitter_5flast_151',['osmo_twrtp_rr_jitter_last',['../group__twrtp.html#gafe2455fdfebeda8f4b810ceae34311b1',1,'osmo_twrtp_rr_jitter_last(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#gafe2455fdfebeda8f4b810ceae34311b1',1,'osmo_twrtp_rr_jitter_last(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5frr_5fjitter_5fmax_152',['osmo_twrtp_rr_jitter_max',['../group__twrtp.html#gacd7e9922bc1682c51befe67e8fccbbd0',1,'osmo_twrtp_rr_jitter_max(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#gacd7e9922bc1682c51befe67e8fccbbd0',1,'osmo_twrtp_rr_jitter_max(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5frr_5flost_5fcumulative_153',['osmo_twrtp_rr_lost_cumulative',['../group__twrtp.html#ga0cb9e5f4ea6238a051d3fc51cb39e6fa',1,'osmo_twrtp_rr_lost_cumulative(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#ga0cb9e5f4ea6238a051d3fc51cb39e6fa',1,'osmo_twrtp_rr_lost_cumulative(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5frr_5flost_5fword_154',['osmo_twrtp_rr_lost_word',['../group__twrtp.html#ga1476c1b31757949bbc7777bee60e5666',1,'osmo_twrtp_rr_lost_word(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#ga1476c1b31757949bbc7777bee60e5666',1,'osmo_twrtp_rr_lost_word(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5fsend_5frtcp_5frr_155',['osmo_twrtp_send_rtcp_rr',['../group__twrtp.html#gab331b2461929cbfd4f26b34b11060fd9',1,'osmo_twrtp_send_rtcp_rr(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#gab331b2461929cbfd4f26b34b11060fd9',1,'osmo_twrtp_send_rtcp_rr(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5fset_5fauto_5frtcp_5finterval_156',['osmo_twrtp_set_auto_rtcp_interval',['../group__twrtp.html#ga6b1118cac2c6362a7de38d4aba7eb2c6',1,'osmo_twrtp_set_auto_rtcp_interval(struct osmo_twrtp *endp, uint16_t interval): twrtp.c'],['../group__twrtp.html#ga6b1118cac2c6362a7de38d4aba7eb2c6',1,'osmo_twrtp_set_auto_rtcp_interval(struct osmo_twrtp *endp, uint16_t interval): twrtp.c']]], ['osmo_5ftwrtp_5fset_5fdscp_157',['osmo_twrtp_set_dscp',['../group__twrtp.html#ga4fb17a2a0eb8d531c934d6e129e45265',1,'osmo_twrtp_set_dscp(struct osmo_twrtp *endp, uint8_t dscp): twrtp.c'],['../group__twrtp.html#ga4fb17a2a0eb8d531c934d6e129e45265',1,'osmo_twrtp_set_dscp(struct osmo_twrtp *endp, uint8_t dscp): twrtp.c']]], ['osmo_5ftwrtp_5fset_5fraw_5frx_5fcb_158',['osmo_twrtp_set_raw_rx_cb',['../group__twrtp.html#ga98fce03a5a6dd6a58759c43b3ecb536b',1,'osmo_twrtp_set_raw_rx_cb(struct osmo_twrtp *endp, osmo_twrtp_raw_rx_cb cb, void *user_data): twrtp.c'],['../group__twrtp.html#ga98fce03a5a6dd6a58759c43b3ecb536b',1,'osmo_twrtp_set_raw_rx_cb(struct osmo_twrtp *endp, osmo_twrtp_raw_rx_cb cb, void *user_data): twrtp.c']]], ['osmo_5ftwrtp_5fset_5fremote_159',['osmo_twrtp_set_remote',['../group__twrtp.html#gaa712a64e760d07cc5c22cbf2d5772ce9',1,'osmo_twrtp_set_remote(struct osmo_twrtp *endp, const struct osmo_sockaddr *rtp_addr): twrtp.c'],['../group__twrtp.html#gaa712a64e760d07cc5c22cbf2d5772ce9',1,'osmo_twrtp_set_remote(struct osmo_twrtp *endp, const struct osmo_sockaddr *rtp_addr): twrtp.c']]], ['osmo_5ftwrtp_5fset_5fsdes_160',['osmo_twrtp_set_sdes',['../group__twrtp.html#ga8072fe44546bcfe663a06ae56efa4db8',1,'osmo_twrtp_set_sdes(struct osmo_twrtp *endp, const char *cname, const char *name, const char *email, const char *phone, const char *loc, const char *tool, const char *note): twrtp.c'],['../group__twrtp.html#ga8072fe44546bcfe663a06ae56efa4db8',1,'osmo_twrtp_set_sdes(struct osmo_twrtp *endp, const char *cname, const char *name, const char *email, const char *phone, const char *loc, const char *tool, const char *note): twrtp.c']]], ['osmo_5ftwrtp_5fset_5fsocket_5fprio_161',['osmo_twrtp_set_socket_prio',['../group__twrtp.html#ga85635115eb97f0400ca9698dc1e6fb41',1,'osmo_twrtp_set_socket_prio(struct osmo_twrtp *endp, int prio): twrtp.c'],['../group__twrtp.html#ga85635115eb97f0400ca9698dc1e6fb41',1,'osmo_twrtp_set_socket_prio(struct osmo_twrtp *endp, int prio): twrtp.c']]], ['osmo_5ftwrtp_5fsupply_5ffds_162',['osmo_twrtp_supply_fds',['../group__twrtp.html#ga1d22a40f737ead143bfca1d75259aba2',1,'osmo_twrtp_supply_fds(struct osmo_twrtp *endp, int rtp_fd, int rtcp_fd): twrtp.c'],['../group__twrtp.html#ga1d22a40f737ead143bfca1d75259aba2',1,'osmo_twrtp_supply_fds(struct osmo_twrtp *endp, int rtp_fd, int rtcp_fd): twrtp.c']]], ['osmo_5ftwrtp_5ftwjit_5frx_5fctrl_163',['osmo_twrtp_twjit_rx_ctrl',['../group__twrtp.html#gaaf8aa5a57b46f846b865cb370b36a52e',1,'osmo_twrtp_twjit_rx_ctrl(struct osmo_twrtp *endp, bool rx_enable): twrtp.c'],['../group__twrtp.html#gaaf8aa5a57b46f846b865cb370b36a52e',1,'osmo_twrtp_twjit_rx_ctrl(struct osmo_twrtp *endp, bool rx_enable): twrtp.c']]], ['osmo_5ftwrtp_5ftwjit_5frx_5fpoll_164',['osmo_twrtp_twjit_rx_poll',['../group__twrtp.html#gacaa8b25a610a5ed982eba709a516c3e2',1,'osmo_twrtp_twjit_rx_poll(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#gacaa8b25a610a5ed982eba709a516c3e2',1,'osmo_twrtp_twjit_rx_poll(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5ftx_5fforward_165',['osmo_twrtp_tx_forward',['../group__twrtp.html#ga2907d4ec5bdd2bbb32f37d72b3275d94',1,'osmo_twrtp_tx_forward(struct osmo_twrtp *endp, struct msgb *msg): twrtp.c'],['../group__twrtp.html#ga2907d4ec5bdd2bbb32f37d72b3275d94',1,'osmo_twrtp_tx_forward(struct osmo_twrtp *endp, struct msgb *msg): twrtp.c']]], ['osmo_5ftwrtp_5ftx_5fquantum_166',['osmo_twrtp_tx_quantum',['../group__twrtp.html#gae20168f9074f530ae0d9270697fadaeb',1,'osmo_twrtp_tx_quantum(struct osmo_twrtp *endp, const uint8_t *payload, unsigned payload_len, uint8_t payload_type, bool marker, bool auto_marker, bool send_rtcp): twrtp.c'],['../group__twrtp.html#gae20168f9074f530ae0d9270697fadaeb',1,'osmo_twrtp_tx_quantum(struct osmo_twrtp *endp, const uint8_t *payload, unsigned payload_len, uint8_t payload_type, bool marker, bool auto_marker, bool send_rtcp): twrtp.c']]], ['osmo_5ftwrtp_5ftx_5frestart_167',['osmo_twrtp_tx_restart',['../group__twrtp.html#ga2e365e51cc37adb56a77b9c2bfa26683',1,'osmo_twrtp_tx_restart(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#ga2e365e51cc37adb56a77b9c2bfa26683',1,'osmo_twrtp_tx_restart(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5ftx_5fskip_168',['osmo_twrtp_tx_skip',['../group__twrtp.html#ga971ca670aa852281620c69cbd69a57e8',1,'osmo_twrtp_tx_skip(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#ga971ca670aa852281620c69cbd69a57e8',1,'osmo_twrtp_tx_skip(struct osmo_twrtp *endp): twrtp.c']]], ['osmux_5fsnprintf_169',['osmux_snprintf',['../group__osmux.html#gaf654e092ca97dd764f59905a2ed21650',1,'osmux.c']]], ['osmux_5fxfrm_5finput_170',['osmux_xfrm_input',['../group__osmux.html#ga9c7d30c0d7d9bc0caf744799d629d4cc',1,'osmux_input.c']]], ['osmux_5fxfrm_5finput_5falloc_171',['osmux_xfrm_input_alloc',['../group__osmux.html#gad61cdde332496df6d7350d147e50b8be',1,'osmux_input.c']]], ['osmux_5fxfrm_5finput_5ffini_172',['osmux_xfrm_input_fini',['../group__osmux.html#ga13655a3bdc68f5e96ad1fe1c03dc235e',1,'osmux_input.c']]], ['osmux_5fxfrm_5finput_5finit_173',['osmux_xfrm_input_init',['../group__osmux.html#ga96230b0431d5d4d91f2dd57a9c85c366',1,'osmux_input.c']]], ['osmux_5fxfrm_5foutput_5falloc_174',['osmux_xfrm_output_alloc',['../group__osmux.html#ga41a217bffa1b0ac095c98ab0fab82c25',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fflush_175',['osmux_xfrm_output_flush',['../group__osmux.html#gaaac410425f6470396ae9db53ebb8dc44',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5finit_176',['osmux_xfrm_output_init',['../group__osmux.html#ga90d58246bcd24a6126898cd6c47dddf4',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5finit2_177',['osmux_xfrm_output_init2',['../group__osmux.html#gaa076e54fa0d249721a4c7b174a8ed2d1',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fsched_178',['osmux_xfrm_output_sched',['../group__osmux.html#gafee78ee4522a9caa238301d7b913dfd6',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5frtp_5fmsgb_5falloc_5fcb_179',['osmux_xfrm_output_set_rtp_msgb_alloc_cb',['../group__osmux.html#ga97187827e1f793f2392e54585343db32',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5frtp_5fpl_5ftype_180',['osmux_xfrm_output_set_rtp_pl_type',['../group__osmux.html#ga0d96c8a544e0ff56576615e0b2ac7774',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5frtp_5fssrc_181',['osmux_xfrm_output_set_rtp_ssrc',['../group__osmux.html#ga08151bad3c12df245d4c0e4f9c4ca966',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5ftx_5fcb_182',['osmux_xfrm_output_set_tx_cb',['../group__osmux.html#ga3936e43e881d0992648937417969ead1',1,'osmux_output.c']]] ]; html/search/all_4.html0000644000175000017500000000263315057675337014156 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/search.js0000644000175000017500000005500415057675337014100 0ustar buildbuild/* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ function convertToId(search) { var result = ''; for (i=0;i do a search { this.Search(); } } this.OnSearchSelectKey = function(evt) { var e = (evt) ? evt : window.event; // for IE if (e.keyCode==40 && this.searchIndex0) // Up { this.searchIndex--; this.OnSelectItem(this.searchIndex); } else if (e.keyCode==13 || e.keyCode==27) { this.OnSelectItem(this.searchIndex); this.CloseSelectionWindow(); this.DOMSearchField().focus(); } return false; } // --------- Actions // Closes the results window. this.CloseResultsWindow = function() { this.DOMPopupSearchResultsWindow().style.display = 'none'; this.DOMSearchClose().style.display = 'none'; this.Activate(false); } this.CloseSelectionWindow = function() { this.DOMSearchSelectWindow().style.display = 'none'; } // Performs a search. this.Search = function() { this.keyTimeout = 0; // strip leading whitespace var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); var code = searchValue.toLowerCase().charCodeAt(0); var idxChar = searchValue.substr(0, 1).toLowerCase(); if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair { idxChar = searchValue.substr(0, 2); } var resultsPage; var resultsPageWithSearch; var hasResultsPage; var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); if (idx!=-1) { var hexCode=idx.toString(16); resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; resultsPageWithSearch = resultsPage+'?'+escape(searchValue); hasResultsPage = true; } else // nothing available for this search term { resultsPage = this.resultsPath + '/nomatches' + this.extension; resultsPageWithSearch = resultsPage; hasResultsPage = false; } window.frames.MSearchResults.location = resultsPageWithSearch; var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); if (domPopupSearchResultsWindow.style.display!='block') { var domSearchBox = this.DOMSearchBox(); this.DOMSearchClose().style.display = 'inline-block'; var domPopupSearchResults = this.DOMPopupSearchResults(); var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; domPopupSearchResultsWindow.style.display = 'block'; left -= domPopupSearchResults.offsetWidth; var maxWidth = document.body.clientWidth; var width = 400; if (left<10) left=10; if (width+left+8>maxWidth) width=maxWidth-left-8; domPopupSearchResultsWindow.style.top = top + 'px'; domPopupSearchResultsWindow.style.left = left + 'px'; domPopupSearchResultsWindow.style.width = width + 'px'; } this.lastSearchValue = searchValue; this.lastResultsPage = resultsPage; } // -------- Activation Functions // Activates or deactivates the search panel, resetting things to // their default values if necessary. this.Activate = function(isActive) { if (isActive || // open it this.DOMPopupSearchResultsWindow().style.display == 'block' ) { this.DOMSearchBox().className = 'MSearchBoxActive'; var searchField = this.DOMSearchField(); if (searchField.value == this.searchLabel) // clear "Search" term upon entry { searchField.value = ''; this.searchActive = true; } } else if (!isActive) // directly remove the panel { this.DOMSearchBox().className = 'MSearchBoxInactive'; this.DOMSearchField().value = this.searchLabel; this.searchActive = false; this.lastSearchValue = '' this.lastResultsPage = ''; } } } // ----------------------------------------------------------------------- // The class that handles everything on the search results page. function SearchResults(name) { // The number of matches from the last run of . this.lastMatchCount = 0; this.lastKey = 0; this.repeatOn = false; // Toggles the visibility of the passed element ID. this.FindChildElement = function(id) { var parentElement = document.getElementById(id); var element = parentElement.firstChild; while (element && element!=parentElement) { if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { return element; } if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { element = element.firstChild; } else if (element.nextSibling) { element = element.nextSibling; } else { do { element = element.parentNode; } while (element && element!=parentElement && !element.nextSibling); if (element && element!=parentElement) { element = element.nextSibling; } } } } this.Toggle = function(id) { var element = this.FindChildElement(id); if (element) { if (element.style.display == 'block') { element.style.display = 'none'; } else { element.style.display = 'block'; } } } // Searches for the passed string. If there is no parameter, // it takes it from the URL query. // // Always returns true, since other documents may try to call it // and that may or may not be possible. this.Search = function(search) { if (!search) // get search word from URL { search = window.location.search; search = search.substring(1); // Remove the leading '?' search = unescape(search); } search = search.replace(/^ +/, ""); // strip leading spaces search = search.replace(/ +$/, ""); // strip trailing spaces search = search.toLowerCase(); search = convertToId(search); var resultRows = document.getElementsByTagName("div"); var matches = 0; var i = 0; while (i < resultRows.length) { var row = resultRows.item(i); if (row.className == "SRResult") { var rowMatchName = row.id.toLowerCase(); rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' if (search.length<=rowMatchName.length && rowMatchName.substr(0, search.length)==search) { row.style.display = 'block'; matches++; } else { row.style.display = 'none'; } } i++; } document.getElementById("Searching").style.display='none'; if (matches == 0) // no results { document.getElementById("NoMatches").style.display='block'; } else // at least one result { document.getElementById("NoMatches").style.display='none'; } this.lastMatchCount = matches; return true; } // return the first item with index index or higher that is visible this.NavNext = function(index) { var focusItem; while (1) { var focusName = 'Item'+index; focusItem = document.getElementById(focusName); if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { break; } else if (!focusItem) // last element { break; } focusItem=null; index++; } return focusItem; } this.NavPrev = function(index) { var focusItem; while (1) { var focusName = 'Item'+index; focusItem = document.getElementById(focusName); if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { break; } else if (!focusItem) // last element { break; } focusItem=null; index--; } return focusItem; } this.ProcessKeys = function(e) { if (e.type == "keydown") { this.repeatOn = false; this.lastKey = e.keyCode; } else if (e.type == "keypress") { if (!this.repeatOn) { if (this.lastKey) this.repeatOn = true; return false; // ignore first keypress after keydown } } else if (e.type == "keyup") { this.lastKey = 0; this.repeatOn = false; } return this.lastKey!=0; } this.Nav = function(evt,itemIndex) { var e = (evt) ? evt : window.event; // for IE if (e.keyCode==13) return true; if (!this.ProcessKeys(e)) return false; if (this.lastKey==38) // Up { var newIndex = itemIndex-1; var focusItem = this.NavPrev(newIndex); if (focusItem) { var child = this.FindChildElement(focusItem.parentNode.parentNode.id); if (child && child.style.display == 'block') // children visible { var n=0; var tmpElem; while (1) // search for last child { tmpElem = document.getElementById('Item'+newIndex+'_c'+n); if (tmpElem) { focusItem = tmpElem; } else // found it! { break; } n++; } } } if (focusItem) { focusItem.focus(); } else // return focus to search field { parent.document.getElementById("MSearchField").focus(); } } else if (this.lastKey==40) // Down { var newIndex = itemIndex+1; var focusItem; var item = document.getElementById('Item'+itemIndex); var elem = this.FindChildElement(item.parentNode.parentNode.id); if (elem && elem.style.display == 'block') // children visible { focusItem = document.getElementById('Item'+itemIndex+'_c0'); } if (!focusItem) focusItem = this.NavNext(newIndex); if (focusItem) focusItem.focus(); } else if (this.lastKey==39) // Right { var item = document.getElementById('Item'+itemIndex); var elem = this.FindChildElement(item.parentNode.parentNode.id); if (elem) elem.style.display = 'block'; } else if (this.lastKey==37) // Left { var item = document.getElementById('Item'+itemIndex); var elem = this.FindChildElement(item.parentNode.parentNode.id); if (elem) elem.style.display = 'none'; } else if (this.lastKey==27) // Escape { parent.searchBox.CloseResultsWindow(); parent.document.getElementById("MSearchField").focus(); } else if (this.lastKey==13) // Enter { return true; } return false; } this.NavChild = function(evt,itemIndex,childIndex) { var e = (evt) ? evt : window.event; // for IE if (e.keyCode==13) return true; if (!this.ProcessKeys(e)) return false; if (this.lastKey==38) // Up { if (childIndex>0) { var newIndex = childIndex-1; document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); } else // already at first child, jump to parent { document.getElementById('Item'+itemIndex).focus(); } } else if (this.lastKey==40) // Down { var newIndex = childIndex+1; var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); if (!elem) // last child, jump to parent next parent { elem = this.NavNext(itemIndex+1); } if (elem) { elem.focus(); } } else if (this.lastKey==27) // Escape { parent.searchBox.CloseResultsWindow(); parent.document.getElementById("MSearchField").focus(); } else if (this.lastKey==13) // Enter { return true; } return false; } } function setKeyActions(elem,action) { elem.setAttribute('onkeydown',action); elem.setAttribute('onkeypress',action); elem.setAttribute('onkeyup',action); } function setClassAttr(elem,attr) { elem.setAttribute('class',attr); elem.setAttribute('className',attr); } function createResults() { var results = document.getElementById("SRResults"); for (var e=0; e
    Loading...
    Searching...
    No Matches
    html/search/classes_2.js0000644000175000017500000000133015057675337014502 0ustar buildbuildvar searchData= [ ['osmo_5fipa_5fmsgb_5fcb_0',['osmo_ipa_msgb_cb',['../structosmo__ipa__msgb__cb.html',1,'']]], ['osmo_5fjibuf_1',['osmo_jibuf',['../structosmo__jibuf.html',1,'']]], ['osmo_5ftwjit_5frr_5finfo_2',['osmo_twjit_rr_info',['../structosmo__twjit__rr__info.html',1,'']]], ['osmo_5ftwjit_5fstats_3',['osmo_twjit_stats',['../structosmo__twjit__stats.html',1,'']]], ['osmo_5ftwrtp_5fstats_4',['osmo_twrtp_stats',['../structosmo__twrtp__stats.html',1,'']]], ['osmux_5fhdr_5',['osmux_hdr',['../structosmux__hdr.html',1,'']]], ['osmux_5fin_5fhandle_6',['osmux_in_handle',['../structosmux__in__handle.html',1,'']]], ['osmux_5fout_5fhandle_7',['osmux_out_handle',['../structosmux__out__handle.html',1,'']]] ]; html/search/groups_1.html0000644000175000017500000000263615057675337014725 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_2.js0000644000175000017500000000044515057675337014155 0ustar buildbuildvar searchData= [ ['osmux_2ec_0',['osmux.c',['../osmux_8c.html',1,'']]], ['osmux_2eh_1',['osmux.h',['../osmux_8h.html',1,'']]], ['osmux_5finput_2ec_2',['osmux_input.c',['../osmux__input_8c.html',1,'']]], ['osmux_5foutput_2ec_3',['osmux_output.c',['../osmux__output_8c.html',1,'']]] ]; html/search/variables_0.html0000644000175000017500000000264115057675337015351 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_4.html0000644000175000017500000000264115057675337015355 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_7.html0000644000175000017500000000263315057675337014161 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/defines_0.js0000644000175000017500000000040015057675337014455 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/variables_3.js0000644000175000017500000000023615057675337015022 0ustar buildbuildvar searchData= [ ['max_5fseq_5fext_0',['max_seq_ext',['../structosmo__twjit__rr__info.html#aac5a9bf8abb41a803da8592cee7e3148',1,'osmo_twjit_rr_info']]] ]; html/search/files_1.html0000644000175000017500000000263515057675337014507 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_1.html0000644000175000017500000000263715057675337015044 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_1.js0000644000175000017500000000024715057675337014507 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.html0000644000175000017500000000263315057675337014157 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_2.html0000644000175000017500000000263715057675337015045 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/functions_0.html0000644000175000017500000000264115057675337015411 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_0.js0000644000175000017500000000077015057675337014371 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.js0000644000175000017500000000022615057675337015016 0ustar buildbuildvar searchData= [ ['base_5fseq_0',['base_seq',['../structosmo__twjit__rr__info.html#a55a2069db2d025292d2f54d14abfa0db',1,'osmo_twjit_rr_info']]] ]; html/search/searchdata.js0000644000175000017500000000076115057675337014732 0ustar buildbuildvar indexSectionsWithContent = { 0: "abdeijmorst", 1: "aior", 2: "djos", 3: "o", 4: "bejmors", 5: "o", 6: "mo", 7: "ot", 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.js0000644000175000017500000000073715057675337014515 0ustar buildbuildvar searchData= [ ['rtcp_5fhdr_0',['rtcp_hdr',['../structrtcp__hdr.html',1,'']]], ['rtcp_5frr_5fblock_1',['rtcp_rr_block',['../structrtcp__rr__block.html',1,'']]], ['rtcp_5fsr_5fblock_2',['rtcp_sr_block',['../structrtcp__sr__block.html',1,'']]], ['rtcp_5fsr_5frr_5fhdr_3',['rtcp_sr_rr_hdr',['../structrtcp__sr__rr__hdr.html',1,'']]], ['rtp_5fhdr_4',['rtp_hdr',['../structrtp__hdr.html',1,'']]], ['rtp_5fx_5fhdr_5',['rtp_x_hdr',['../structrtp__x__hdr.html',1,'']]] ]; html/search/all_0.js0000644000175000017500000000024115057675337013613 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/variables_3.html0000644000175000017500000000264115057675337015354 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_0.html0000644000175000017500000000263315057675337014152 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/mag_sel.svg0000644000175000017500000000451215057675337014423 0ustar buildbuild image/svg+xml html/search/search_l.png0000644000175000017500000000106715057675337014563 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.html0000644000175000017500000000263315057675337014155 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_8.js0000644000175000017500000000114515057675337013627 0ustar buildbuildvar searchData= [ ['rtcp_5fhdr_0',['rtcp_hdr',['../structrtcp__hdr.html',1,'']]], ['rtcp_5frr_5fblock_1',['rtcp_rr_block',['../structrtcp__rr__block.html',1,'']]], ['rtcp_5fsr_5fblock_2',['rtcp_sr_block',['../structrtcp__sr__block.html',1,'']]], ['rtcp_5fsr_5frr_5fhdr_3',['rtcp_sr_rr_hdr',['../structrtcp__sr__rr__hdr.html',1,'']]], ['rtp_5fhdr_4',['rtp_hdr',['../structrtp__hdr.html',1,'']]], ['rtp_5fx_5fhdr_5',['rtp_x_hdr',['../structrtp__x__hdr.html',1,'']]], ['rx_5fpackets_6',['rx_packets',['../structosmo__twjit__rr__info.html#a5f3d83ca8470d45943991164b22969e7',1,'osmo_twjit_rr_info']]] ]; html/search/variables_6.js0000644000175000017500000000021415057675337015021 0ustar buildbuildvar searchData= [ ['ssrc_0',['ssrc',['../structosmo__twjit__rr__info.html#a95023909bd6410be60a3ec0fb4e34981',1,'osmo_twjit_rr_info']]] ]; html/search/all_1.html0000644000175000017500000000263315057675337014153 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_5.html0000644000175000017500000000264115057675337015356 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_6.html0000644000175000017500000000264115057675337015357 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_3.js0000644000175000017500000000023615057675337013622 0ustar buildbuildvar searchData= [ ['expected_5fpkt_0',['expected_pkt',['../structosmo__twjit__rr__info.html#ad31676a36b0ba3634ecbd3b93aac8c5e',1,'osmo_twjit_rr_info']]] ]; html/search/pages_0.js0000644000175000017500000000013715057675337014146 0ustar buildbuildvar searchData= [ ['deprecated_20list_0',['Deprecated List',['../deprecated.html',1,'']]] ]; html/search/typedefs_0.html0000644000175000017500000000264015057675337015223 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_1.js0000644000175000017500000000020615057675337014147 0ustar buildbuildvar searchData= [ ['jibuf_2ec_0',['jibuf.c',['../jibuf_8c.html',1,'']]], ['jibuf_2eh_1',['jibuf.h',['../jibuf_8h.html',1,'']]] ]; html/search/all_9.html0000644000175000017500000000263315057675337014163 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_2.html0000644000175000017500000000263315057675337014154 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/defines_1.html0000644000175000017500000000263715057675337015024 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/defines_0.html0000644000175000017500000000263715057675337015023 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_a.html0000644000175000017500000000263315057675337014233 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/search_m.png0000644000175000017500000000023615057675337014561 0ustar buildbuildPNG  IHDR5^KMgAMAOX2tEXtSoftwareAdobe ImageReadyqe<0IDATxb,//g```<~8#?bbZP,Xnݺ <~EIENDB`html/search/all_1.js0000644000175000017500000000022615057675337013617 0ustar buildbuildvar searchData= [ ['base_5fseq_0',['base_seq',['../structosmo__twjit__rr__info.html#a55a2069db2d025292d2f54d14abfa0db',1,'osmo_twjit_rr_info']]] ]; html/search/classes_0.html0000644000175000017500000000263715057675337015043 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_7.js0000644000175000017500000011617415057675337013637 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_5fname_5ff_69',['osmo_stream_cli_set_name_f',['../group__stream__cli.html#gacf917820669504d5f2856eaf74508921',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fnodelay_70',['osmo_stream_cli_set_nodelay',['../group__stream__cli.html#gaa196e78db6ca32abb1473566b4f1b04b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fparam_71',['osmo_stream_cli_set_param',['../group__stream__cli.html#ga0638e98001fa4bdd36533718472dfac7',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fport_72',['osmo_stream_cli_set_port',['../group__stream__cli.html#gab8b9f65bebfeb83c6e33d102e9439770',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fpriority_73',['osmo_stream_cli_set_priority',['../group__stream__cli.html#gac3ec56e61ce062300ad1df73a5f2c7f8',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fproto_74',['osmo_stream_cli_set_proto',['../group__stream__cli.html#ga91d57aa94a370520540d7272af66a23b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fread_5fcb_75',['osmo_stream_cli_set_read_cb',['../group__stream__cli.html#ga798f23db7e2e1d999775589db8a73d03',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fread_5fcb2_76',['osmo_stream_cli_set_read_cb2',['../group__stream__cli.html#ga7892eb77d40f08a254f654786d0b996b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5freconnect_5ftimeout_77',['osmo_stream_cli_set_reconnect_timeout',['../group__stream__cli.html#gade74792afe35f31dd2584c888db3dd62',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fsegmentation_5fcb_78',['osmo_stream_cli_set_segmentation_cb',['../group__stream__cli.html#gab6094559935824750d82b9164ed76910',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fsegmentation_5fcb2_79',['osmo_stream_cli_set_segmentation_cb2',['../group__stream__cli.html#gaf62f1dbe4570d8ffd00b3bdc3f28d24b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5ftx_5fqueue_5fmax_5flength_80',['osmo_stream_cli_set_tx_queue_max_length',['../group__stream__cli.html#ga889f96540a1a2271a40dee063eaf5e9d',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5ftype_81',['osmo_stream_cli_set_type',['../group__stream__cli.html#ga5e5c4c9aacc1cd1d303c0295018594cb',1,'stream_cli.c']]], ['osmo_5fstream_5fsctp_5fmsg_5fflags_5fnotification_82',['OSMO_STREAM_SCTP_MSG_FLAGS_NOTIFICATION',['../stream_8h.html#a123b7866ed4985a81246bfede79a8ea9',1,'stream.h']]], ['osmo_5fstream_5fsrv_5fcreate_83',['osmo_stream_srv_create',['../group__stream__srv.html#ga136b426790b6322f58f89059b88aaa0b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fcreate2_84',['osmo_stream_srv_create2',['../group__stream__srv.html#ga8be283e1a143e346b4d6ccf33cbb9b98',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fdestroy_85',['osmo_stream_srv_destroy',['../group__stream__srv.html#ga47f18e063f64f22cb74d58d8b7243bed',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fdata_86',['osmo_stream_srv_get_data',['../group__stream__srv.html#gae2a0ef01097d964c71e38600b4c078d5',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5ffd_87',['osmo_stream_srv_get_fd',['../group__stream__srv.html#ga803c8ba415f66cc1029b3899cc53b807',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fiofd_88',['osmo_stream_srv_get_iofd',['../group__stream__srv.html#ga9e00a9172d5b2708afa269d52c118eff',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fmaster_89',['osmo_stream_srv_get_master',['../group__stream__srv.html#ga9cf689935bf6ffac4f86f56219d73c8e',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fname_90',['osmo_stream_srv_get_name',['../group__stream__srv.html#gad34dc0f7ebf7c84653514566e431a1d2',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fofd_91',['osmo_stream_srv_get_ofd',['../group__stream__srv.html#ga47bbca4f12717db2e6158eefe6310b9b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fsockname_92',['osmo_stream_srv_get_sockname',['../group__stream__srv.html#ga4f176a35751509dc741fbd2b52f45b22',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fclose_93',['osmo_stream_srv_link_close',['../group__stream__srv.html#gad325d97b09c724e830c98d76b890520d',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fcreate_94',['osmo_stream_srv_link_create',['../group__stream__srv.html#gaad262988c7ac365566f03843c560f892',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fdestroy_95',['osmo_stream_srv_link_destroy',['../group__stream__srv.html#ga882acaaa5935422b0e09a2ce8c8019ec',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fdata_96',['osmo_stream_srv_link_get_data',['../group__stream__srv.html#gacb5d68c2a6a9663f99266c70747bce04',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5ffd_97',['osmo_stream_srv_link_get_fd',['../group__stream__srv.html#gae2ef09bc8da55db30d967563dfc6561a',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fname_98',['osmo_stream_srv_link_get_name',['../group__stream__srv.html#ga67520942e5a404a0b3a6960b8a161de8',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fofd_99',['osmo_stream_srv_link_get_ofd',['../group__stream__srv.html#ga7b8981351a154c357fcefd39c31ad42a',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fsockname_100',['osmo_stream_srv_link_get_sockname',['../group__stream__srv.html#ga7d7b6af7df24e90dc758a088bae6316d',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fis_5fopened_101',['osmo_stream_srv_link_is_opened',['../group__stream__srv.html#ga28243be108ed0302b0f5a9d1dfc96b22',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fopen_102',['osmo_stream_srv_link_open',['../group__stream__srv.html#ga603b89074d3e8c0fb44144ab1864f0d4',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5faccept_5fcb_103',['osmo_stream_srv_link_set_accept_cb',['../group__stream__srv.html#ga1eea525d4e1e7a24c9c08881994ceb7e',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5faddr_104',['osmo_stream_srv_link_set_addr',['../group__stream__srv.html#gacece90116484e34540def69b05c66f57',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5faddrs_105',['osmo_stream_srv_link_set_addrs',['../group__stream__srv.html#gaadabca7d23c52c39e291bf7e05f0055b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fdata_106',['osmo_stream_srv_link_set_data',['../group__stream__srv.html#ga5ef0f0c85a52c08e8c10d36a8f44e392',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fdomain_107',['osmo_stream_srv_link_set_domain',['../group__stream__srv.html#ga9629b516297c31f34af48e4630973dab',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fip_5fdscp_108',['osmo_stream_srv_link_set_ip_dscp',['../group__stream__srv.html#ga53be410e4b8cf79e850b8cd5c01b4c78',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fmsgb_5falloc_5finfo_109',['osmo_stream_srv_link_set_msgb_alloc_info',['../group__stream__srv.html#ga925981abcacca9f9a3375d511309cb32',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fname_110',['osmo_stream_srv_link_set_name',['../group__stream__srv.html#gadef998825a4739660b198151fcee4201',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fnodelay_111',['osmo_stream_srv_link_set_nodelay',['../group__stream__srv.html#ga41e8ad2c761aaa00313aa11d1f29a3ed',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fparam_112',['osmo_stream_srv_link_set_param',['../group__stream__srv.html#ga759bceb4ce155f88e3e7817ce4c9449d',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fport_113',['osmo_stream_srv_link_set_port',['../group__stream__srv.html#ga76bbbafd1d8dc9c9ebffd301503b6dd9',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fpriority_114',['osmo_stream_srv_link_set_priority',['../group__stream__srv.html#ga3bfcfe6f09fa8f87dacb7ea215c64bae',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fproto_115',['osmo_stream_srv_link_set_proto',['../group__stream__srv.html#ga2508987133a93863d2a50103004b0f36',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5ftx_5fqueue_5fmax_5flength_116',['osmo_stream_srv_link_set_tx_queue_max_length',['../group__stream__srv.html#gad88e9249699c53894cb34c099b5e0c4b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5ftype_117',['osmo_stream_srv_link_set_type',['../group__stream__srv.html#ga1903f9aa2e6f9283ebcf20f573b1d970',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fread_5fcb2_5ft_118',['osmo_stream_srv_read_cb2_t',['../group__stream__srv.html#ga5b6beeb3ec1effa8afa948deb7a4fc15',1,'stream.h']]], ['osmo_5fstream_5fsrv_5frecv_119',['osmo_stream_srv_recv',['../group__stream__srv.html#gac86242c41223c525c770ff7e7515d83e',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fsend_120',['osmo_stream_srv_send',['../group__stream__srv.html#gaa1589994cf6eab27742cafee6b7fb491',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fclosed_5fcb_121',['osmo_stream_srv_set_closed_cb',['../group__stream__srv.html#gaed83d9686289eee534d77a61b96fbd90',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fdata_122',['osmo_stream_srv_set_data',['../group__stream__srv.html#ga9891663b20714d72f992e44ad1e92eea',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fflush_5fand_5fdestroy_123',['osmo_stream_srv_set_flush_and_destroy',['../group__stream__srv.html#ga8390ce6740e56eb22215e1c5805c95f1',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fname_124',['osmo_stream_srv_set_name',['../group__stream__srv.html#ga196834d254fd94922d6be91b7b5b1ed3',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fname_5ff_125',['osmo_stream_srv_set_name_f',['../group__stream__srv.html#ga7af35085592c1dbaf2a3b6be1b49bef2',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fparam_126',['osmo_stream_srv_set_param',['../group__stream__srv.html#ga0e7adb8aef2f007144d4df24b21fbfe4',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fread_5fcb_127',['osmo_stream_srv_set_read_cb',['../group__stream__srv.html#gad0d7b7e236826c52f10a7b4f50009d01',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fsegmentation_5fcb_128',['osmo_stream_srv_set_segmentation_cb',['../group__stream__srv.html#ga560a6d868bf95bf2f3a4b716bfd5cac9',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fsegmentation_5fcb2_129',['osmo_stream_srv_set_segmentation_cb2',['../group__stream__srv.html#ga348c4560f69403fc3a3dfcbe874c2593',1,'stream_srv.c']]], ['osmo_5ftwjit_5fconfig_5falloc_130',['osmo_twjit_config_alloc',['../group__twjit.html#ga259b383e11fc673da0e931a806c20f91',1,'osmo_twjit_config_alloc(void *ctx): twjit_conf.c'],['../group__twjit.html#ga259b383e11fc673da0e931a806c20f91',1,'osmo_twjit_config_alloc(void *ctx): twjit_conf.c']]], ['osmo_5ftwjit_5fconfig_5ffree_131',['osmo_twjit_config_free',['../group__twjit.html#gaeaa7314c9ee2efbdce688cc13b63b463',1,'osmo_twjit_config_free(struct osmo_twjit_config *conf): twjit_conf.c'],['../group__twjit.html#gaeaa7314c9ee2efbdce688cc13b63b463',1,'osmo_twjit_config_free(struct osmo_twjit_config *conf): twjit_conf.c']]], ['osmo_5ftwjit_5fconfig_5fset_5fbuffer_5fdepth_132',['osmo_twjit_config_set_buffer_depth',['../group__twjit.html#ga4e56a380bf9751aaf6f6fc323c747c2c',1,'osmo_twjit_config_set_buffer_depth(struct osmo_twjit_config *conf, uint16_t bd_start, uint16_t bd_hiwat): twjit_conf.c'],['../group__twjit.html#ga4e56a380bf9751aaf6f6fc323c747c2c',1,'osmo_twjit_config_set_buffer_depth(struct osmo_twjit_config *conf, uint16_t bd_start, uint16_t bd_hiwat): twjit_conf.c']]], ['osmo_5ftwjit_5fconfig_5fset_5fhandover_5fon_5fmarker_133',['osmo_twjit_config_set_handover_on_marker',['../group__twjit.html#ga63204cb283949fd8c4417142616f6591',1,'osmo_twjit_config_set_handover_on_marker(struct osmo_twjit_config *conf, bool hom): twjit_conf.c'],['../group__twjit.html#ga63204cb283949fd8c4417142616f6591',1,'osmo_twjit_config_set_handover_on_marker(struct osmo_twjit_config *conf, bool hom): twjit_conf.c']]], ['osmo_5ftwjit_5fconfig_5fset_5fmax_5ffuture_5fsec_134',['osmo_twjit_config_set_max_future_sec',['../group__twjit.html#ga55d8b223908b5a638ec62983fcfc7706',1,'osmo_twjit_config_set_max_future_sec(struct osmo_twjit_config *conf, uint16_t max_future_sec): twjit_conf.c'],['../group__twjit.html#ga55d8b223908b5a638ec62983fcfc7706',1,'osmo_twjit_config_set_max_future_sec(struct osmo_twjit_config *conf, uint16_t max_future_sec): twjit_conf.c']]], ['osmo_5ftwjit_5fconfig_5fset_5fstart_5fmax_5fdelta_135',['osmo_twjit_config_set_start_max_delta',['../group__twjit.html#ga260c4ebd28ed8592c4b04fc9cadc2935',1,'osmo_twjit_config_set_start_max_delta(struct osmo_twjit_config *conf, uint16_t delta_ms): twjit_conf.c'],['../group__twjit.html#ga260c4ebd28ed8592c4b04fc9cadc2935',1,'osmo_twjit_config_set_start_max_delta(struct osmo_twjit_config *conf, uint16_t delta_ms): twjit_conf.c']]], ['osmo_5ftwjit_5fconfig_5fset_5fstart_5fmin_5fdelta_136',['osmo_twjit_config_set_start_min_delta',['../group__twjit.html#ga8df47e86d7ead591db87da21c73e8dda',1,'osmo_twjit_config_set_start_min_delta(struct osmo_twjit_config *conf, uint16_t delta_ms): twjit_conf.c'],['../group__twjit.html#ga8df47e86d7ead591db87da21c73e8dda',1,'osmo_twjit_config_set_start_min_delta(struct osmo_twjit_config *conf, uint16_t delta_ms): twjit_conf.c']]], ['osmo_5ftwjit_5fconfig_5fset_5fthinning_5fint_137',['osmo_twjit_config_set_thinning_int',['../group__twjit.html#ga8c272a9f3344a110dce9e6d66d505493',1,'osmo_twjit_config_set_thinning_int(struct osmo_twjit_config *conf, uint16_t thinning_int): twjit_conf.c'],['../group__twjit.html#ga8c272a9f3344a110dce9e6d66d505493',1,'osmo_twjit_config_set_thinning_int(struct osmo_twjit_config *conf, uint16_t thinning_int): twjit_conf.c']]], ['osmo_5ftwjit_5fconfig_5fwrite_138',['osmo_twjit_config_write',['../group__twjit.html#gaec23d0393bcf6a30efc503e167afff1b',1,'osmo_twjit_config_write(struct vty *vty, const struct osmo_twjit_config *conf, const char *prefix): twjit_conf.c'],['../group__twjit.html#gaec23d0393bcf6a30efc503e167afff1b',1,'osmo_twjit_config_write(struct vty *vty, const struct osmo_twjit_config *conf, const char *prefix): twjit_conf.c']]], ['osmo_5ftwjit_5fcreate_139',['osmo_twjit_create',['../group__twjit.html#ga77a05c62c2cc131b4ca8a00cf8ecca62',1,'osmo_twjit_create(void *ctx, uint16_t clock_khz, uint16_t quantum_ms, const struct osmo_twjit_config *config): twjit.c'],['../group__twjit.html#ga77a05c62c2cc131b4ca8a00cf8ecca62',1,'osmo_twjit_create(void *ctx, uint16_t clock_khz, uint16_t quantum_ms, const struct osmo_twjit_config *config): twjit.c']]], ['osmo_5ftwjit_5fdestroy_140',['osmo_twjit_destroy',['../group__twjit.html#ga7c28897aed4b25c3ede1a67fc5e6ae95',1,'osmo_twjit_destroy(struct osmo_twjit *twjit): twjit.c'],['../group__twjit.html#ga7c28897aed4b25c3ede1a67fc5e6ae95',1,'osmo_twjit_destroy(struct osmo_twjit *twjit): twjit.c']]], ['osmo_5ftwjit_5fget_5frr_5finfo_141',['osmo_twjit_get_rr_info',['../group__twjit.html#ga40f81a7ab7af3942e540a50bb367ae56',1,'osmo_twjit_get_rr_info(struct osmo_twjit *twjit): twjit.c'],['../group__twjit.html#ga40f81a7ab7af3942e540a50bb367ae56',1,'osmo_twjit_get_rr_info(struct osmo_twjit *twjit): twjit.c']]], ['osmo_5ftwjit_5fget_5fstats_142',['osmo_twjit_get_stats',['../group__twjit.html#gaeb5d008cacb7d8329c0f0fffb4463504',1,'osmo_twjit_get_stats(struct osmo_twjit *twjit): twjit.c'],['../group__twjit.html#gaeb5d008cacb7d8329c0f0fffb4463504',1,'osmo_twjit_get_stats(struct osmo_twjit *twjit): twjit.c']]], ['osmo_5ftwjit_5finput_143',['osmo_twjit_input',['../group__twjit.html#gaf3383fd56f33f86d21aa41afe318c064',1,'osmo_twjit_input(struct osmo_twjit *twjit, struct msgb *msg): twjit.c'],['../group__twjit.html#gaf3383fd56f33f86d21aa41afe318c064',1,'osmo_twjit_input(struct osmo_twjit *twjit, struct msgb *msg): twjit.c']]], ['osmo_5ftwjit_5foutput_144',['osmo_twjit_output',['../group__twjit.html#gaad365cac430364b862957f46eaaca391',1,'osmo_twjit_output(struct osmo_twjit *twjit): twjit.c'],['../group__twjit.html#gaad365cac430364b862957f46eaaca391',1,'osmo_twjit_output(struct osmo_twjit *twjit): twjit.c']]], ['osmo_5ftwjit_5freset_145',['osmo_twjit_reset',['../group__twjit.html#ga76bed8e0f9d9a23d8d6fea1d8b62abbf',1,'osmo_twjit_reset(struct osmo_twjit *twjit): twjit.c'],['../group__twjit.html#ga76bed8e0f9d9a23d8d6fea1d8b62abbf',1,'osmo_twjit_reset(struct osmo_twjit *twjit): twjit.c']]], ['osmo_5ftwjit_5frr_5finfo_146',['osmo_twjit_rr_info',['../structosmo__twjit__rr__info.html',1,'']]], ['osmo_5ftwjit_5frr_5finfo_5fvalid_147',['osmo_twjit_rr_info_valid',['../group__twjit.html#ga7a0b80aa4271d55bbb720a73ab4db421',1,'osmo_twjit_rr_info_valid(struct osmo_twjit *twjit): twjit.c'],['../group__twjit.html#ga7a0b80aa4271d55bbb720a73ab4db421',1,'osmo_twjit_rr_info_valid(struct osmo_twjit *twjit): twjit.c']]], ['osmo_5ftwjit_5fset_5fconfig_148',['osmo_twjit_set_config',['../group__twjit.html#ga930cda4155d06b50b87fcdc1785e7bec',1,'osmo_twjit_set_config(struct osmo_twjit *twjit, const struct osmo_twjit_config *config): twjit.c'],['../group__twjit.html#ga930cda4155d06b50b87fcdc1785e7bec',1,'osmo_twjit_set_config(struct osmo_twjit *twjit, const struct osmo_twjit_config *config): twjit.c']]], ['osmo_5ftwjit_5fstats_149',['osmo_twjit_stats',['../structosmo__twjit__stats.html',1,'']]], ['osmo_5ftwrtp_5fbind_5flocal_150',['osmo_twrtp_bind_local',['../group__twrtp.html#gaaebac4722d129a840d35a3d0c0aa63a7',1,'osmo_twrtp_bind_local(struct osmo_twrtp *endp, const struct osmo_sockaddr *rtp_addr, bool bind_rtcp): twrtp.c'],['../group__twrtp.html#gaaebac4722d129a840d35a3d0c0aa63a7',1,'osmo_twrtp_bind_local(struct osmo_twrtp *endp, const struct osmo_sockaddr *rtp_addr, bool bind_rtcp): twrtp.c']]], ['osmo_5ftwrtp_5fcreate_151',['osmo_twrtp_create',['../group__twrtp.html#gacf8121473c5a45b5710a0b95d8e16575',1,'osmo_twrtp_create(void *ctx, uint16_t clock_khz, uint16_t quantum_ms, bool random_ts_seq, const struct osmo_twjit_config *twjit_config): twrtp.c'],['../group__twrtp.html#gacf8121473c5a45b5710a0b95d8e16575',1,'osmo_twrtp_create(void *ctx, uint16_t clock_khz, uint16_t quantum_ms, bool random_ts_seq, const struct osmo_twjit_config *twjit_config): twrtp.c']]], ['osmo_5ftwrtp_5fdestroy_152',['osmo_twrtp_destroy',['../group__twrtp.html#ga5630b784627262f27ca75b524e094a73',1,'osmo_twrtp_destroy(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#ga5630b784627262f27ca75b524e094a73',1,'osmo_twrtp_destroy(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5fget_5frtcp_5ffd_153',['osmo_twrtp_get_rtcp_fd',['../group__twrtp.html#gadf5ed8a54818f6705d1e036c3ddd9cf5',1,'osmo_twrtp_get_rtcp_fd(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#gadf5ed8a54818f6705d1e036c3ddd9cf5',1,'osmo_twrtp_get_rtcp_fd(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5fget_5frtp_5ffd_154',['osmo_twrtp_get_rtp_fd',['../group__twrtp.html#ga059c9fdc8016d0e872d226f7980fd872',1,'osmo_twrtp_get_rtp_fd(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#ga059c9fdc8016d0e872d226f7980fd872',1,'osmo_twrtp_get_rtp_fd(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5fget_5fstats_155',['osmo_twrtp_get_stats',['../group__twrtp.html#gaaee07c8c0e31f8551868079a18cb29cf',1,'osmo_twrtp_get_stats(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#gaaee07c8c0e31f8551868079a18cb29cf',1,'osmo_twrtp_get_stats(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5fget_5ftwjit_156',['osmo_twrtp_get_twjit',['../group__twrtp.html#gaa2cb81a157a22376b0c51ffc2421760e',1,'osmo_twrtp_get_twjit(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#gaa2cb81a157a22376b0c51ffc2421760e',1,'osmo_twrtp_get_twjit(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5fgot_5frtcp_5frr_157',['osmo_twrtp_got_rtcp_rr',['../group__twrtp.html#gab5cb8eab0ff864174338d6e8cab24b2b',1,'osmo_twrtp_got_rtcp_rr(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#gab5cb8eab0ff864174338d6e8cab24b2b',1,'osmo_twrtp_got_rtcp_rr(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5frr_5fjitter_5flast_158',['osmo_twrtp_rr_jitter_last',['../group__twrtp.html#gafe2455fdfebeda8f4b810ceae34311b1',1,'osmo_twrtp_rr_jitter_last(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#gafe2455fdfebeda8f4b810ceae34311b1',1,'osmo_twrtp_rr_jitter_last(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5frr_5fjitter_5fmax_159',['osmo_twrtp_rr_jitter_max',['../group__twrtp.html#gacd7e9922bc1682c51befe67e8fccbbd0',1,'osmo_twrtp_rr_jitter_max(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#gacd7e9922bc1682c51befe67e8fccbbd0',1,'osmo_twrtp_rr_jitter_max(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5frr_5flost_5fcumulative_160',['osmo_twrtp_rr_lost_cumulative',['../group__twrtp.html#ga0cb9e5f4ea6238a051d3fc51cb39e6fa',1,'osmo_twrtp_rr_lost_cumulative(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#ga0cb9e5f4ea6238a051d3fc51cb39e6fa',1,'osmo_twrtp_rr_lost_cumulative(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5frr_5flost_5fword_161',['osmo_twrtp_rr_lost_word',['../group__twrtp.html#ga1476c1b31757949bbc7777bee60e5666',1,'osmo_twrtp_rr_lost_word(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#ga1476c1b31757949bbc7777bee60e5666',1,'osmo_twrtp_rr_lost_word(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5fsend_5frtcp_5frr_162',['osmo_twrtp_send_rtcp_rr',['../group__twrtp.html#gab331b2461929cbfd4f26b34b11060fd9',1,'osmo_twrtp_send_rtcp_rr(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#gab331b2461929cbfd4f26b34b11060fd9',1,'osmo_twrtp_send_rtcp_rr(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5fset_5fauto_5frtcp_5finterval_163',['osmo_twrtp_set_auto_rtcp_interval',['../group__twrtp.html#ga6b1118cac2c6362a7de38d4aba7eb2c6',1,'osmo_twrtp_set_auto_rtcp_interval(struct osmo_twrtp *endp, uint16_t interval): twrtp.c'],['../group__twrtp.html#ga6b1118cac2c6362a7de38d4aba7eb2c6',1,'osmo_twrtp_set_auto_rtcp_interval(struct osmo_twrtp *endp, uint16_t interval): twrtp.c']]], ['osmo_5ftwrtp_5fset_5fdscp_164',['osmo_twrtp_set_dscp',['../group__twrtp.html#ga4fb17a2a0eb8d531c934d6e129e45265',1,'osmo_twrtp_set_dscp(struct osmo_twrtp *endp, uint8_t dscp): twrtp.c'],['../group__twrtp.html#ga4fb17a2a0eb8d531c934d6e129e45265',1,'osmo_twrtp_set_dscp(struct osmo_twrtp *endp, uint8_t dscp): twrtp.c']]], ['osmo_5ftwrtp_5fset_5fraw_5frx_5fcb_165',['osmo_twrtp_set_raw_rx_cb',['../group__twrtp.html#ga98fce03a5a6dd6a58759c43b3ecb536b',1,'osmo_twrtp_set_raw_rx_cb(struct osmo_twrtp *endp, osmo_twrtp_raw_rx_cb cb, void *user_data): twrtp.c'],['../group__twrtp.html#ga98fce03a5a6dd6a58759c43b3ecb536b',1,'osmo_twrtp_set_raw_rx_cb(struct osmo_twrtp *endp, osmo_twrtp_raw_rx_cb cb, void *user_data): twrtp.c']]], ['osmo_5ftwrtp_5fset_5fremote_166',['osmo_twrtp_set_remote',['../group__twrtp.html#gaa712a64e760d07cc5c22cbf2d5772ce9',1,'osmo_twrtp_set_remote(struct osmo_twrtp *endp, const struct osmo_sockaddr *rtp_addr): twrtp.c'],['../group__twrtp.html#gaa712a64e760d07cc5c22cbf2d5772ce9',1,'osmo_twrtp_set_remote(struct osmo_twrtp *endp, const struct osmo_sockaddr *rtp_addr): twrtp.c']]], ['osmo_5ftwrtp_5fset_5fsdes_167',['osmo_twrtp_set_sdes',['../group__twrtp.html#ga8072fe44546bcfe663a06ae56efa4db8',1,'osmo_twrtp_set_sdes(struct osmo_twrtp *endp, const char *cname, const char *name, const char *email, const char *phone, const char *loc, const char *tool, const char *note): twrtp.c'],['../group__twrtp.html#ga8072fe44546bcfe663a06ae56efa4db8',1,'osmo_twrtp_set_sdes(struct osmo_twrtp *endp, const char *cname, const char *name, const char *email, const char *phone, const char *loc, const char *tool, const char *note): twrtp.c']]], ['osmo_5ftwrtp_5fset_5fsocket_5fprio_168',['osmo_twrtp_set_socket_prio',['../group__twrtp.html#ga85635115eb97f0400ca9698dc1e6fb41',1,'osmo_twrtp_set_socket_prio(struct osmo_twrtp *endp, int prio): twrtp.c'],['../group__twrtp.html#ga85635115eb97f0400ca9698dc1e6fb41',1,'osmo_twrtp_set_socket_prio(struct osmo_twrtp *endp, int prio): twrtp.c']]], ['osmo_5ftwrtp_5fstats_169',['osmo_twrtp_stats',['../structosmo__twrtp__stats.html',1,'']]], ['osmo_5ftwrtp_5fsupply_5ffds_170',['osmo_twrtp_supply_fds',['../group__twrtp.html#ga1d22a40f737ead143bfca1d75259aba2',1,'osmo_twrtp_supply_fds(struct osmo_twrtp *endp, int rtp_fd, int rtcp_fd): twrtp.c'],['../group__twrtp.html#ga1d22a40f737ead143bfca1d75259aba2',1,'osmo_twrtp_supply_fds(struct osmo_twrtp *endp, int rtp_fd, int rtcp_fd): twrtp.c']]], ['osmo_5ftwrtp_5ftwjit_5frx_5fctrl_171',['osmo_twrtp_twjit_rx_ctrl',['../group__twrtp.html#gaaf8aa5a57b46f846b865cb370b36a52e',1,'osmo_twrtp_twjit_rx_ctrl(struct osmo_twrtp *endp, bool rx_enable): twrtp.c'],['../group__twrtp.html#gaaf8aa5a57b46f846b865cb370b36a52e',1,'osmo_twrtp_twjit_rx_ctrl(struct osmo_twrtp *endp, bool rx_enable): twrtp.c']]], ['osmo_5ftwrtp_5ftwjit_5frx_5fpoll_172',['osmo_twrtp_twjit_rx_poll',['../group__twrtp.html#gacaa8b25a610a5ed982eba709a516c3e2',1,'osmo_twrtp_twjit_rx_poll(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#gacaa8b25a610a5ed982eba709a516c3e2',1,'osmo_twrtp_twjit_rx_poll(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5ftx_5fforward_173',['osmo_twrtp_tx_forward',['../group__twrtp.html#ga2907d4ec5bdd2bbb32f37d72b3275d94',1,'osmo_twrtp_tx_forward(struct osmo_twrtp *endp, struct msgb *msg): twrtp.c'],['../group__twrtp.html#ga2907d4ec5bdd2bbb32f37d72b3275d94',1,'osmo_twrtp_tx_forward(struct osmo_twrtp *endp, struct msgb *msg): twrtp.c']]], ['osmo_5ftwrtp_5ftx_5fquantum_174',['osmo_twrtp_tx_quantum',['../group__twrtp.html#gae20168f9074f530ae0d9270697fadaeb',1,'osmo_twrtp_tx_quantum(struct osmo_twrtp *endp, const uint8_t *payload, unsigned payload_len, uint8_t payload_type, bool marker, bool auto_marker, bool send_rtcp): twrtp.c'],['../group__twrtp.html#gae20168f9074f530ae0d9270697fadaeb',1,'osmo_twrtp_tx_quantum(struct osmo_twrtp *endp, const uint8_t *payload, unsigned payload_len, uint8_t payload_type, bool marker, bool auto_marker, bool send_rtcp): twrtp.c']]], ['osmo_5ftwrtp_5ftx_5frestart_175',['osmo_twrtp_tx_restart',['../group__twrtp.html#ga2e365e51cc37adb56a77b9c2bfa26683',1,'osmo_twrtp_tx_restart(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#ga2e365e51cc37adb56a77b9c2bfa26683',1,'osmo_twrtp_tx_restart(struct osmo_twrtp *endp): twrtp.c']]], ['osmo_5ftwrtp_5ftx_5fskip_176',['osmo_twrtp_tx_skip',['../group__twrtp.html#ga971ca670aa852281620c69cbd69a57e8',1,'osmo_twrtp_tx_skip(struct osmo_twrtp *endp): twrtp.c'],['../group__twrtp.html#ga971ca670aa852281620c69cbd69a57e8',1,'osmo_twrtp_tx_skip(struct osmo_twrtp *endp): twrtp.c']]], ['osmocom_20datagram_20socket_177',['Osmocom Datagram Socket',['../group__datagram.html',1,'']]], ['osmocom_20jitter_20buffer_178',['Osmocom Jitter Buffer',['../group__jibuf.html',1,'']]], ['osmocom_20multiplex_20protocol_179',['Osmocom Multiplex Protocol',['../group__osmux.html',1,'']]], ['osmocom_20stream_20client_180',['Osmocom Stream Client',['../group__stream__cli.html',1,'']]], ['osmocom_20stream_20server_181',['Osmocom Stream Server',['../group__stream__srv.html',1,'']]], ['osmux_2ec_182',['osmux.c',['../osmux_8c.html',1,'']]], ['osmux_2eh_183',['osmux.h',['../osmux_8h.html',1,'']]], ['osmux_5fhdr_184',['osmux_hdr',['../structosmux__hdr.html',1,'']]], ['osmux_5fin_5fhandle_185',['osmux_in_handle',['../structosmux__in__handle.html',1,'']]], ['osmux_5finput_2ec_186',['osmux_input.c',['../osmux__input_8c.html',1,'']]], ['osmux_5fout_5fhandle_187',['osmux_out_handle',['../structosmux__out__handle.html',1,'']]], ['osmux_5foutput_2ec_188',['osmux_output.c',['../osmux__output_8c.html',1,'']]], ['osmux_5fseq_189',['osmux_seq',['../structosmux__in__handle.html#a1ba076a41ef9c3413665b7444c6521cc',1,'osmux_in_handle']]], ['osmux_5fsnprintf_190',['osmux_snprintf',['../group__osmux.html#gaf654e092ca97dd764f59905a2ed21650',1,'osmux.c']]], ['osmux_5fxfrm_5finput_191',['osmux_xfrm_input',['../group__osmux.html#ga9c7d30c0d7d9bc0caf744799d629d4cc',1,'osmux_input.c']]], ['osmux_5fxfrm_5finput_5falloc_192',['osmux_xfrm_input_alloc',['../group__osmux.html#gad61cdde332496df6d7350d147e50b8be',1,'osmux_input.c']]], ['osmux_5fxfrm_5finput_5ffini_193',['osmux_xfrm_input_fini',['../group__osmux.html#ga13655a3bdc68f5e96ad1fe1c03dc235e',1,'osmux_input.c']]], ['osmux_5fxfrm_5finput_5finit_194',['osmux_xfrm_input_init',['../group__osmux.html#ga96230b0431d5d4d91f2dd57a9c85c366',1,'osmux_input.c']]], ['osmux_5fxfrm_5foutput_5falloc_195',['osmux_xfrm_output_alloc',['../group__osmux.html#ga41a217bffa1b0ac095c98ab0fab82c25',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fflush_196',['osmux_xfrm_output_flush',['../group__osmux.html#gaaac410425f6470396ae9db53ebb8dc44',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5finit_197',['osmux_xfrm_output_init',['../group__osmux.html#ga90d58246bcd24a6126898cd6c47dddf4',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5finit2_198',['osmux_xfrm_output_init2',['../group__osmux.html#gaa076e54fa0d249721a4c7b174a8ed2d1',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fsched_199',['osmux_xfrm_output_sched',['../group__osmux.html#gafee78ee4522a9caa238301d7b913dfd6',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5frtp_5fmsgb_5falloc_5fcb_200',['osmux_xfrm_output_set_rtp_msgb_alloc_cb',['../group__osmux.html#ga97187827e1f793f2392e54585343db32',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5frtp_5fpl_5ftype_201',['osmux_xfrm_output_set_rtp_pl_type',['../group__osmux.html#ga0d96c8a544e0ff56576615e0b2ac7774',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5frtp_5fssrc_202',['osmux_xfrm_output_set_rtp_ssrc',['../group__osmux.html#ga08151bad3c12df245d4c0e4f9c4ca966',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5ftx_5fcb_203',['osmux_xfrm_output_set_tx_cb',['../group__osmux.html#ga3936e43e881d0992648937417969ead1',1,'osmux_output.c']]] ]; html/search/defines_1.js0000644000175000017500000000030015057675337014455 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.css0000644000175000017500000001072215057675337014252 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.html0000644000175000017500000000263515057675337014510 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/pages_0.html0000644000175000017500000000263515057675337014503 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_8.html0000644000175000017500000000263315057675337014162 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_1.js0000644000175000017500000000023615057675337015020 0ustar buildbuildvar searchData= [ ['expected_5fpkt_0',['expected_pkt',['../structosmo__twjit__rr__info.html#ad31676a36b0ba3634ecbd3b93aac8c5e',1,'osmo_twjit_rr_info']]] ]; html/search/typedefs_0.js0000644000175000017500000000051415057675337014671 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.html0000644000175000017500000000263615057675337014724 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_5.js0000644000175000017500000000042015057675337013617 0ustar buildbuildvar searchData= [ ['jibuf_2ec_0',['jibuf.c',['../jibuf_8c.html',1,'']]], ['jibuf_2eh_1',['jibuf.h',['../jibuf_8h.html',1,'']]], ['jitter_5faccum_2',['jitter_accum',['../structosmo__twjit__rr__info.html#a87354c21b9215ee56d87dcb5a7606a78',1,'osmo_twjit_rr_info']]] ]; html/search/variables_5.js0000644000175000017500000000023215057675337015020 0ustar buildbuildvar searchData= [ ['rx_5fpackets_0',['rx_packets',['../structosmo__twjit__rr__info.html#a5f3d83ca8470d45943991164b22969e7',1,'osmo_twjit_rr_info']]] ]; html/search/all_2.js0000644000175000017500000000034315057675337013620 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/search_r.png0000644000175000017500000000105115057675337014562 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/all_9.js0000644000175000017500000000053615057675337013633 0ustar buildbuildvar searchData= [ ['ssrc_0',['ssrc',['../structosmo__twjit__rr__info.html#a95023909bd6410be60a3ec0fb4e34981',1,'osmo_twjit_rr_info']]], ['stream_2eh_1',['stream.h',['../stream_8h.html',1,'']]], ['stream_5fcli_2ec_2',['stream_cli.c',['../stream__cli_8c.html',1,'']]], ['stream_5fsrv_2ec_3',['stream_srv.c',['../stream__srv_8c.html',1,'']]] ]; html/search/classes_3.html0000644000175000017500000000263715057675337015046 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/structosmo__twjit__rr__info.html0000644000175000017500000002331315057675337017532 0ustar buildbuild libosmo-netif: osmo_twjit_rr_info Struct Reference
    libosmo-netif 1.6.0.16-c51c
    Osmocom network interface library

    Info collected from the incoming RTP data stream for the purpose of generating RTCP reception report blocks. More...

    #include <twjit.h>

    Data Fields

    uint32_t ssrc
     received SSRC to which all following info applies
     
    uint32_t rx_packets
     count of "received packets" for RTCP RR packet loss calculation
     
    uint32_t base_seq
     "base" sequence number for "expected packets" computation
     
    uint32_t max_seq_ext
     "extended highest sequence number" field of RTCP RR
     
    uint32_t expected_pkt
     count of "expected packets" for RTCP RR packet loss calculation
     
    uint32_t jitter_accum
     "interarrival jitter" measure of RFC 3550, accumulator for the leaky integrator algorithm prescribed by the RFC, sans-FP version. More...
     

    Detailed Description

    Info collected from the incoming RTP data stream for the purpose of generating RTCP reception report blocks.

    See twrtp guide document section 5.1.

    Key point: unlike the counters in struct osmo_twjit_stats, all RR info is reset to initial whenever incoming SSRC changes, as necessitated by RTCP data model being organized per SSRC.

    The same ABI considerations apply to this struct as osmo_twjit_stats.

    Field Documentation

    ◆ jitter_accum

    uint32_t osmo_twjit_rr_info::jitter_accum

    "interarrival jitter" measure of RFC 3550, accumulator for the leaky integrator algorithm prescribed by the RFC, sans-FP version.

    Right-shift this accumulator by 4 bits when emitting RTCP RR.


    The documentation for this struct was generated from the following file:
    html/structamr__hdr__bwe.html0000644000175000017500000001123615057675337015731 0ustar buildbuild libosmo-netif: amr_hdr_bwe Struct Reference
    libosmo-netif 1.6.0.16-c51c
    Osmocom network interface library
    amr_hdr_bwe Struct Reference

    Data Fields

    uint8_t data [0]
     

    The documentation for this struct was generated from the following file:
    • include/osmocom/netif/amr.h
    html/structrtcp__sr__rr__hdr.html0000644000175000017500000001347115057675337016636 0ustar buildbuild libosmo-netif: rtcp_sr_rr_hdr Struct Reference
    libosmo-netif 1.6.0.16-c51c
    Osmocom network interface library
    rtcp_sr_rr_hdr Struct Reference

    Data Fields

    uint8_t v_p_rc
     
    uint8_t pt
     
    uint16_t len
     
    uint32_t ssrc
     

    The documentation for this struct was generated from the following file: