html/0000755000175000017500000000000014720474626011016 5ustar buildbuildhtml/osmux__output_8c.html0000644000175000017500000003247714720474626015245 0ustar buildbuild libosmo-netif: src/osmux_output.c File Reference
libosmo-netif 1.5.1.12-e6c0
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/doxygen.svg0000644000175000017500000003602614720474626013223 0ustar buildbuild html/dir_15662fdf1b5c37dde6a3ed82e5410e57.js0000644000175000017500000000121414720474626016652 0ustar buildbuildvar dir_15662fdf1b5c37dde6a3ed82e5410e57 = [ [ "amr.h", "amr_8h_source.html", null ], [ "datagram.h", "datagram_8h.html", "datagram_8h" ], [ "ipa.h", "ipa_8h_source.html", null ], [ "ipa_unit.h", "ipa__unit_8h_source.html", null ], [ "jibuf.h", "jibuf_8h.html", "jibuf_8h" ], [ "osmux.h", "osmux_8h.html", "osmux_8h" ], [ "prim.h", "prim_8h_source.html", null ], [ "rs232.h", "rs232_8h_source.html", null ], [ "rtp.h", "rtp_8h_source.html", null ], [ "sctp.h", "sctp_8h_source.html", null ], [ "stream.h", "stream_8h.html", "stream_8h" ], [ "stream_private.h", "stream__private_8h_source.html", null ] ];html/structosmux__out__handle.html0000644000175000017500000002203114720474626017022 0ustar buildbuild libosmo-netif: osmux_out_handle Struct Reference
libosmo-netif 1.5.1.12-e6c0
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/stream__cli_8c.js0000644000175000017500000000736514720474626014242 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_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_local_addr", "group__stream__cli.html#ga70420e7c664cc4c4e69ac4d3476e7f53", null ], [ "osmo_stream_cli_set_local_addrs", "group__stream__cli.html#ga090fc3fcd1706b815ef5a729921c100e", null ], [ "osmo_stream_cli_set_local_port", "group__stream__cli.html#ga4d83e3cf7fdf7eb354c2015ff9bed98a", null ], [ "osmo_stream_cli_set_name", "group__stream__cli.html#gaeb712dc553735736047f9b11d9583baa", null ], [ "osmo_stream_cli_set_nodelay", "group__stream__cli.html#gaa196e78db6ca32abb1473566b4f1b04b", null ], [ "osmo_stream_cli_set_param", "group__stream__cli.html#ga0638e98001fa4bdd36533718472dfac7", null ], [ "osmo_stream_cli_set_port", "group__stream__cli.html#gab8b9f65bebfeb83c6e33d102e9439770", null ], [ "osmo_stream_cli_set_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_type", "group__stream__cli.html#ga5e5c4c9aacc1cd1d303c0295018594cb", null ] ];html/group__osmux.js0000644000175000017500000000352014720474626014102 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/stream__private_8h_source.html0000644000175000017500000002400614720474626017051 0ustar buildbuild libosmo-netif: include/osmocom/netif/stream_private.h Source File
libosmo-netif 1.5.1.12-e6c0
Osmocom network interface library
stream_private.h
1#pragma once
2
3#include <stdbool.h>
4#include <stdint.h>
5
6#include <osmocom/core/socket.h>
7
8#include "config.h"
9
10#ifdef HAVE_LIBSCTP
11#include <netinet/sctp.h>
12 #define OSMO_STREAM_MAX_ADDRS OSMO_SOCK_MAX_ADDRS
13 /*
14 * Platforms that don't have MSG_NOSIGNAL (which disables SIGPIPE)
15 * usually have SO_NOSIGPIPE (set via setsockopt).
16 */
17 #ifndef MSG_NOSIGNAL
18 #define MSG_NOSIGNAL 0
19 #endif
20#else
21 #define OSMO_STREAM_MAX_ADDRS 1
22#endif
23
26enum osmo_stream_mode {
27 OSMO_STREAM_MODE_UNKNOWN,
28 OSMO_STREAM_MODE_OSMO_FD,
29 OSMO_STREAM_MODE_OSMO_IO,
30};
31
32struct osmo_io_fd;
33struct msghdr;
34
35int stream_sctp_sock_activate_events(int fd);
36int stream_setsockopt_nodelay(int fd, int proto, int on);
37int stream_sctp_recvmsg_wrapper(int fd, struct msgb *msg, const char *log_pfx);
38
39int stream_iofd_sctp_send_msgb(struct osmo_io_fd *iofd, struct msgb *msg, int sendmsg_flags);
40int stream_iofd_sctp_recvmsg_trailer(struct osmo_io_fd *iofd, struct msgb *msg, int ret, const struct msghdr *msgh);
41
html/osmux_8c.js0000644000175000017500000000015214720474626013117 0ustar buildbuildvar osmux_8c = [ [ "osmux_snprintf", "group__osmux.html#gaf654e092ca97dd764f59905a2ed21650", null ] ];html/jibuf_8h.html0000644000175000017500000002765114720474626013415 0ustar buildbuild libosmo-netif: include/osmocom/netif/jibuf.h File Reference
libosmo-netif 1.5.1.12-e6c0
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/structosmo__jibuf.html0000644000175000017500000003123614720474626015451 0ustar buildbuild libosmo-netif: osmo_jibuf Struct Reference
libosmo-netif 1.5.1.12-e6c0
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/closed.png0000644000175000017500000000020414720474626012771 0ustar buildbuild‰PNG  IHDR à‘KIDATxíÝm @!†ÑGk™É7À-`&séts¦Àñþòð@åk}ª2€… P%Á_Ëþ¿N² .:0Dk¥‹Â›x" Ö›)¡xÒ5õIEND®B`‚html/doxygen.css0000644000175000017500000010161414720474626013210 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/group__stream__cli.js0000644000175000017500000000737614720474626015225 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_local_addr", "group__stream__cli.html#ga70420e7c664cc4c4e69ac4d3476e7f53", null ], [ "osmo_stream_cli_set_local_addrs", "group__stream__cli.html#ga090fc3fcd1706b815ef5a729921c100e", null ], [ "osmo_stream_cli_set_local_port", "group__stream__cli.html#ga4d83e3cf7fdf7eb354c2015ff9bed98a", null ], [ "osmo_stream_cli_set_name", "group__stream__cli.html#gaeb712dc553735736047f9b11d9583baa", null ], [ "osmo_stream_cli_set_nodelay", "group__stream__cli.html#gaa196e78db6ca32abb1473566b4f1b04b", null ], [ "osmo_stream_cli_set_param", "group__stream__cli.html#ga0638e98001fa4bdd36533718472dfac7", null ], [ "osmo_stream_cli_set_port", "group__stream__cli.html#gab8b9f65bebfeb83c6e33d102e9439770", null ], [ "osmo_stream_cli_set_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_type", "group__stream__cli.html#ga5e5c4c9aacc1cd1d303c0295018594cb", null ] ];html/bc_s.png0000644000175000017500000000124414720474626012433 0ustar buildbuild‰PNG  IHDR€_ kIDATxíËkQÆϹÉ̤I&“¦mš&156*nÄ…”ܸR,4 +Hµ(U­b”ª1‚ŠˆJ.º(E·mßúhëJmKS'C›(‚èäÑ…¤ï &äÖþ ‡ïrÎåü3gö(z÷ýÒ&_9ó}’ÕŸ@‰mÚu ` Øh`ñ÷Ô¯  „ú&·ññ×Ù~“½—Üò‡ÎÝÑM4¸%‰3²§?Êêh)€ÿù™\ÄYi>Jb @gûßiÞˆú²Ñkg§ãê\è½­šEUæv+?E€î"pæÖÛB\ƒY&ðØó$vM+ê’Dn¼)}òþ:§Xoâ ƒ3ŠÚ¯'¯¿.‚fÁ0ìuŠ9òLýj€f6¸%«3Gf”Ô#Ôsm(,ùÃk*Ê’³Jª…¯¼JË¢o䆔¼u_~ °r]%%mnu]z°r5[ÍÆ°«Úò•Xeµ’†Iù<ÈèÐÅg@IÔÚÞàµë3‚:/<JÇ’ÐQ) ñ¹…tÚß÷(Mû\63éCgl!ýí;ÿ¸4Ùhâñ=÷Zë29­w’ÝÒ´·ˆV;ÊL3ƒj&7©·º½÷a!I†)ëë$-öÇÓú³›‹7tIV¾VàñÔübf¨8¡ÈƒB<﫵imnÿœÈ‡„ lߣù‡ÛD —#É5“­'Æ4?쬲øM’™›°»g¬‚|5Åçµ½GNdÓÐr|ô”Ã&„ì"7+'³@ 5‡Gâž‘Ç…âɬ^;õã–.3Òr"ý_R³¿Â@²oI¾å$IEND®B`‚html/structosmux__in__handle.js0000644000175000017500000000017614720474626016277 0ustar buildbuildvar structosmux__in__handle = [ [ "osmux_seq", "structosmux__in__handle.html#a1ba076a41ef9c3413665b7444c6521cc", null ] ];html/stream__srv_8c.html0000644000175000017500000011557214720474626014635 0ustar buildbuild libosmo-netif: src/stream_srv.c File Reference
libosmo-netif 1.5.1.12-e6c0
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...
 
void osmo_stream_srv_link_set_addr (struct osmo_stream_srv_link *link, const char *addr)
 Set the local address to which we bind. More...
 
int osmo_stream_srv_link_set_addrs (struct osmo_stream_srv_link *link, const char **addr, size_t addrcnt)
 Set the local address set to which we bind. More...
 
void osmo_stream_srv_link_set_port (struct osmo_stream_srv_link *link, uint16_t port)
 Set the local port number to which we bind. More...
 
void osmo_stream_srv_link_set_proto (struct osmo_stream_srv_link *link, uint16_t proto)
 Set the protocol for the stream server link. More...
 
int osmo_stream_srv_link_set_type (struct osmo_stream_srv_link *link, int type)
 Set the socket type for the stream server link. More...
 
int osmo_stream_srv_link_set_domain (struct osmo_stream_srv_link *link, int domain)
 Set the socket type for the stream server link. More...
 
void osmo_stream_srv_link_set_data (struct osmo_stream_srv_link *link, void *data)
 Set application private data of the stream server link. More...
 
void * osmo_stream_srv_link_get_data (struct osmo_stream_srv_link *link)
 Retrieve application private data of the stream server link. More...
 
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...
 
void osmo_stream_srv_link_destroy (struct osmo_stream_srv_link *link)
 Destroy the stream server link. More...
 
int osmo_stream_srv_link_open (struct osmo_stream_srv_link *link)
 Open the stream server link. More...
 
bool osmo_stream_srv_link_is_opened (const struct osmo_stream_srv_link *link)
 Check whether the stream server link is opened. More...
 
void osmo_stream_srv_link_close (struct osmo_stream_srv_link *link)
 Close the stream server link and unregister from select loop. More...
 
int osmo_stream_srv_link_set_param (struct osmo_stream_srv_link *link, enum osmo_stream_srv_link_param par, void *val, size_t val_len)
 Set given parameter of stream_srv_link to given value. More...
 
struct osmo_stream_srv * osmo_stream_srv_create (void *ctx, struct osmo_stream_srv_link *link, int fd, osmo_stream_srv_read_cb_t read_cb, osmo_stream_srv_closed_cb_t closed_cb, void *data)
 Create a legacy osmo_fd mode Stream Server inside the specified link. More...
 
struct osmo_stream_srv * osmo_stream_srv_create2 (void *ctx, struct osmo_stream_srv_link *link, int fd, void *data)
 Create an osmo_iofd mode Stream Server inside the specified link. More...
 
void osmo_stream_srv_set_name (struct osmo_stream_srv *conn, const char *name)
 Set a name on the srv object (used during logging). More...
 
const char * osmo_stream_srv_get_name (const struct osmo_stream_srv *conn)
 Retrieve name previously set on the srv object (see osmo_stream_srv_set_name()). More...
 
void osmo_stream_srv_set_read_cb (struct osmo_stream_srv *conn, osmo_stream_srv_read_cb2_t read_cb)
 Set the call-back function for incoming data on an osmo_io stream_srv. More...
 
void osmo_stream_srv_set_closed_cb (struct osmo_stream_srv *conn, osmo_stream_srv_closed_cb_t closed_cb)
 Set the call-back function called when the stream server socket was closed. More...
 
void osmo_stream_srv_set_flush_and_destroy (struct osmo_stream_srv *conn)
 Prepare to send out all pending messages on the connection's Tx queue. More...
 
void osmo_stream_srv_set_data (struct osmo_stream_srv *conn, void *data)
 Set application private data of the stream server. More...
 
void osmo_stream_srv_set_segmentation_cb (struct osmo_stream_srv *conn, osmo_stream_srv_segmentation_cb_t segmentation_cb)
 Set the segmentation callback for target osmo_stream_srv structure. More...
 
void * osmo_stream_srv_get_data (struct osmo_stream_srv *conn)
 Retrieve application private data of the stream server. More...
 
const char * osmo_stream_srv_get_sockname (const struct osmo_stream_srv *conn)
 Retrieve the stream server socket description. More...
 
struct osmo_fd * osmo_stream_srv_get_ofd (struct osmo_stream_srv *conn)
 Retrieve Osmocom File Descriptor of a stream server in osmo_fd mode. More...
 
int osmo_stream_srv_get_fd (const struct osmo_stream_srv *conn)
 Retrieve File Descriptor of the stream server. More...
 
struct osmo_io_fd * osmo_stream_srv_get_iofd (const struct osmo_stream_srv *srv)
 Retrieve osmo_io descriptor of the stream server socket. More...
 
struct osmo_stream_srv_link * osmo_stream_srv_get_master (struct osmo_stream_srv *conn)
 Retrieve the master (Link) from a Stream Server. More...
 
void osmo_stream_srv_destroy (struct osmo_stream_srv *conn)
 Destroy given Stream Server. More...
 
void osmo_stream_srv_send (struct osmo_stream_srv *conn, struct msgb *msg)
 Enqueue data to be sent via an Osmocom stream server. More...
 
int osmo_stream_srv_recv (struct osmo_stream_srv *conn, struct msgb *msg)
 Receive data via an Osmocom stream server in osmo_fd mode. More...
 
void osmo_stream_srv_clear_tx_queue (struct osmo_stream_srv *conn)
 

Macro Definition Documentation

◆ LOGSLNK

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

◆ LOGSSRV

#define LOGSSRV (   srv,
  level,
  fmt,
  args... 
)
Value:
LOGP(DLINP, level, "SRVCONN(%s,%s) " fmt, \
srv->name ? : "", \
srv->sockname, \
## args)
html/structamr__hdr__bwe.html0000644000175000017500000001123714720474626015724 0ustar buildbuild libosmo-netif: amr_hdr_bwe Struct Reference
libosmo-netif 1.5.1.12-e6c0
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:
html/globals_defs.html0000644000175000017500000001003514720474626014327 0ustar buildbuild libosmo-netif: Globals
libosmo-netif 1.5.1.12-e6c0
Osmocom network interface library
 
html/stream__srv_8c.js0000644000175000017500000001016514720474626014275 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_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_proto", "group__stream__srv.html#ga2508987133a93863d2a50103004b0f36", null ], [ "osmo_stream_srv_link_set_type", "group__stream__srv.html#ga1903f9aa2e6f9283ebcf20f573b1d970", null ], [ "osmo_stream_srv_recv", "group__stream__srv.html#gac86242c41223c525c770ff7e7515d83e", null ], [ "osmo_stream_srv_send", "group__stream__srv.html#gaa1589994cf6eab27742cafee6b7fb491", null ], [ "osmo_stream_srv_set_closed_cb", "group__stream__srv.html#gaed83d9686289eee534d77a61b96fbd90", null ], [ "osmo_stream_srv_set_data", "group__stream__srv.html#ga9891663b20714d72f992e44ad1e92eea", null ], [ "osmo_stream_srv_set_flush_and_destroy", "group__stream__srv.html#ga8390ce6740e56eb22215e1c5805c95f1", null ], [ "osmo_stream_srv_set_name", "group__stream__srv.html#ga196834d254fd94922d6be91b7b5b1ed3", null ], [ "osmo_stream_srv_set_read_cb", "group__stream__srv.html#gad0d7b7e236826c52f10a7b4f50009d01", null ], [ "osmo_stream_srv_set_segmentation_cb", "group__stream__srv.html#ga560a6d868bf95bf2f3a4b716bfd5cac9", null ] ];html/dir_d44c64559bbebec7f509842c48db8b23.html0000644000175000017500000000763714720474626017232 0ustar buildbuild libosmo-netif: include Directory Reference
libosmo-netif 1.5.1.12-e6c0
Osmocom network interface library
include Directory Reference
html/menu.js0000644000175000017500000001335214720474626012324 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/annotated_dup.js0000644000175000017500000000131314720474626014177 0ustar buildbuildvar annotated_dup = [ [ "amr_hdr", "structamr__hdr.html", null ], [ "amr_hdr_bwe", "structamr__hdr__bwe.html", null ], [ "ipa_head", "structipa__head.html", null ], [ "ipa_head_ext", "structipa__head__ext.html", null ], [ "osmo_ipa_msgb_cb", "structosmo__ipa__msgb__cb.html", null ], [ "osmo_jibuf", "structosmo__jibuf.html", null ], [ "osmux_hdr", "structosmux__hdr.html", null ], [ "osmux_in_handle", "structosmux__in__handle.html", "structosmux__in__handle" ], [ "osmux_out_handle", "structosmux__out__handle.html", null ], [ "rtcp_hdr", "structrtcp__hdr.html", null ], [ "rtp_hdr", "structrtp__hdr.html", null ], [ "rtp_x_hdr", "structrtp__x__hdr.html", null ] ];html/globals.html0000644000175000017500000005403014720474626013331 0ustar buildbuild libosmo-netif: Globals
    libosmo-netif 1.5.1.12-e6c0
    Osmocom network interface library
    Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:

    - m -

    - o -

    html/navtree.js0000644000175000017500000003653514720474626013034 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: Osmocom Jitter Buffer
    libosmo-netif 1.5.1.12-e6c0
    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/osmux__input_8c.js0000644000175000017500000000062114720474626014476 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/bdwn.png0000644000175000017500000000022314720474626012453 0ustar buildbuild‰PNG  IHDR5åZIDATxíË € DŸP–1ñlžmÀ r±j².e è†D[ØɾÙÏÔ¼µ¦ã´Þ|陣6€Všë3´Å?Ls'(}¬>+ žKó÷¥¿ch`‚ ^׃ÞnIEND®B`‚html/dir_68267d1309a1af8e8297ef4c3efbcdba.js0000644000175000017500000000072414720474626017026 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/datagram_8h.js0000644000175000017500000000575114720474626013543 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/datagram_8h_source.html0000644000175000017500000007252214720474626015453 0ustar buildbuild libosmo-netif: include/osmocom/netif/datagram.h Source File
    libosmo-netif 1.5.1.12-e6c0
    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/open.png0000644000175000017500000000017314720474626012466 0ustar buildbuild‰PNG  IHDR à‘BIDATxíÝÁ €0 Ð׬ՙ\Àº€39—b!©9{|ðI>$#Àß´ý8/¨ÄØzƒ/Ï>2À[ÎgiU,/¬~¼Ï\ Ä9Ù¸IEND®B`‚html/group__stream__cli.html0000644000175000017500000025100114720474626015537 0ustar buildbuild libosmo-netif: Osmocom Stream Client
    libosmo-netif 1.5.1.12-e6c0
    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)
     

    Enumerations

    enum  osmo_stream_cli_param {
      OSMO_STREAM_CLI_PAR_SCTP_SOCKOPT_AUTH_SUPPORTED , OSMO_STREAM_CLI_PAR_SCTP_SOCKOPT_ASCONF_SUPPORTED , OSMO_STREAM_CLI_PAR_SCTP_INIT_NUM_OSTREAMS , OSMO_STREAM_CLI_PAR_SCTP_INIT_MAX_INSTREAMS ,
      OSMO_STREAM_CLI_PAR_SCTP_INIT_MAX_ATTEMPTS , OSMO_STREAM_CLI_PAR_SCTP_INIT_TIMEOUT
    }
     

    Functions

    void osmo_stream_cli_set_name (struct osmo_stream_cli *cli, const char *name)
     Set a name on the cli object (used during logging). More...
     
    const char * osmo_stream_cli_get_name (const struct osmo_stream_cli *cli)
     Retrieve name previously set on the cli object (see osmo_stream_cli_set_name()). More...
     
    void osmo_stream_cli_set_nodelay (struct osmo_stream_cli *cli, bool nodelay)
     Set the NODELAY socket option to avoid Nagle-like behavior. More...
     
    void osmo_stream_cli_set_addr (struct osmo_stream_cli *cli, const char *addr)
     Set the remote address to which we connect. More...
     
    int osmo_stream_cli_set_addrs (struct osmo_stream_cli *cli, const char **addr, size_t addrcnt)
     Set the remote address set to which we connect. More...
     
    void osmo_stream_cli_set_port (struct osmo_stream_cli *cli, uint16_t port)
     Set the remote port number to which we connect. More...
     
    int osmo_stream_cli_set_type (struct osmo_stream_cli *cli, int type)
     Set the socket type for the stream server link. More...
     
    int osmo_stream_cli_set_domain (struct osmo_stream_cli *cli, int domain)
     Set the socket type for the stream server link. More...
     
    void osmo_stream_cli_set_proto (struct osmo_stream_cli *cli, uint16_t proto)
     Set the protocol for the stream client socket. More...
     
    void osmo_stream_cli_set_local_addr (struct osmo_stream_cli *cli, const char *addr)
     Set the local address for the socket (to be bound to). More...
     
    int osmo_stream_cli_set_local_addrs (struct osmo_stream_cli *cli, const char **addr, size_t addrcnt)
     Set the local address set to which we bind. More...
     
    void osmo_stream_cli_set_local_port (struct osmo_stream_cli *cli, uint16_t port)
     Set the local port number for the socket (to be bound to). More...
     
    void osmo_stream_cli_set_data (struct osmo_stream_cli *cli, void *data)
     Set application private data of the stream client socket. More...
     
    void osmo_stream_cli_set_reconnect_timeout (struct osmo_stream_cli *cli, int timeout)
     Set the reconnect time of the stream client socket. More...
     
    void * osmo_stream_cli_get_data (struct osmo_stream_cli *cli)
     Retrieve application private data of the stream client socket. More...
     
    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_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.

    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

    Referenced by osmo_stream_cli_destroy(), and osmo_stream_cli_reconnect().

    ◆ osmo_stream_cli_create()

    struct osmo_stream_cli * osmo_stream_cli_create ( void *  ctx)

    Create an Osmocom stream client.

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

    ◆ osmo_stream_cli_destroy()

    void osmo_stream_cli_destroy ( struct osmo_stream_cli *  cli)

    Destroy a Osmocom stream client (includes close).

    Parameters
    [in]cliStream Client to destroy

    References osmo_stream_cli_close().

    ◆ osmo_stream_cli_get_data()

    void * osmo_stream_cli_get_data ( struct osmo_stream_cli *  cli)

    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

    References osmo_stream_cli_close().

    ◆ osmo_stream_cli_recv()

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

    Receive data via an Osmocom stream client in osmo_fd mode.

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

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

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

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

    ◆ osmo_stream_cli_send()

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

    Enqueue data to be sent via an Osmocom stream client.

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

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

    References osmo_stream_cli_is_connected().

    ◆ osmo_stream_cli_set_addr()

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

    Set the remote address to which we connect.

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

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

    References osmo_stream_cli_set_addrs().

    ◆ osmo_stream_cli_set_addrs()

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

    Set the remote address set to which we connect.

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

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

    Referenced by osmo_stream_cli_set_addr().

    ◆ osmo_stream_cli_set_connect_cb()

    void osmo_stream_cli_set_connect_cb ( struct osmo_stream_cli *  cli,
    osmo_stream_cli_connect_cb_t  connect_cb 
    )

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

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

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

    ◆ osmo_stream_cli_set_data()

    void osmo_stream_cli_set_data ( struct osmo_stream_cli *  cli,
    void *  data 
    )

    Set application private data of the stream client socket.

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

    ◆ osmo_stream_cli_set_disconnect_cb()

    void osmo_stream_cli_set_disconnect_cb ( struct osmo_stream_cli *  cli,
    osmo_stream_cli_disconnect_cb_t  disconnect_cb 
    )

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

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

    ◆ osmo_stream_cli_set_domain()

    int osmo_stream_cli_set_domain ( struct osmo_stream_cli *  cli,
    int  domain 
    )

    Set the socket type for the stream server link.

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

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

    ◆ osmo_stream_cli_set_local_addr()

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

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

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

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

    References osmo_stream_cli_set_local_addrs().

    ◆ osmo_stream_cli_set_local_addrs()

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

    Set the local address set to which we bind.

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

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

    Referenced by osmo_stream_cli_set_local_addr().

    ◆ osmo_stream_cli_set_local_port()

    void osmo_stream_cli_set_local_port ( struct osmo_stream_cli *  cli,
    uint16_t  port 
    )

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

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

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

    ◆ osmo_stream_cli_set_name()

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

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

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

    ◆ osmo_stream_cli_set_nodelay()

    void osmo_stream_cli_set_nodelay ( struct osmo_stream_cli *  cli,
    bool  nodelay 
    )

    Set the NODELAY socket option to avoid Nagle-like behavior.

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

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

    ◆ osmo_stream_cli_set_param()

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

    Set given parameter of stream client to given value.

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

    ◆ osmo_stream_cli_set_port()

    void osmo_stream_cli_set_port ( struct osmo_stream_cli *  cli,
    uint16_t  port 
    )

    Set the remote port number to which we connect.

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

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

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

    ◆ 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/modules.js0000644000175000017500000000062414720474626013026 0ustar buildbuildvar modules = [ [ "Osmocom Datagram Socket", "group__datagram.html", "group__datagram" ], [ "Osmocom Jitter Buffer", "group__jibuf.html", "group__jibuf" ], [ "Osmocom Stream Server", "group__stream__srv.html", "group__stream__srv" ], [ "Osmocom Stream Client", "group__stream__cli.html", "group__stream__cli" ], [ "Osmocom Multiplex Protocol", "group__osmux.html", "group__osmux" ] ];html/osmux__output_8c.js0000644000175000017500000000164714720474626014710 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/navtreedata.js0000644000175000017500000000424314720474626013655 0ustar buildbuild/* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ var NAVTREE = [ [ "libosmo-netif", "index.html", [ [ "Deprecated List", "deprecated.html", null ], [ "Modules", "modules.html", "modules" ], [ "Data Structures", "annotated.html", [ [ "Data Structures", "annotated.html", "annotated_dup" ], [ "Data Fields", "functions.html", [ [ "All", "functions.html", null ], [ "Variables", "functions_vars.html", null ] ] ] ] ], [ "Files", "files.html", [ [ "File List", "files.html", "files_dup" ], [ "Globals", "globals.html", [ [ "All", "globals.html", null ], [ "Functions", "globals_func.html", null ], [ "Typedefs", "globals_type.html", null ], [ "Macros", "globals_defs.html", null ] ] ] ] ] ] ] ]; var NAVTREEINDEX = [ "amr_8h_source.html" ]; var SYNCONMSG = 'click to disable panel synchronisation'; var SYNCOFFMSG = 'click to enable panel synchronisation';html/search/0000755000175000017500000000000014720474626012263 5ustar buildbuildhtml/search/classes_3.html0000644000175000017500000000263714720474626015040 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_3.js0000644000175000017500000000033514720474626014501 0ustar buildbuildvar searchData= [ ['rtcp_5fhdr_0',['rtcp_hdr',['../structrtcp__hdr.html',1,'']]], ['rtp_5fhdr_1',['rtp_hdr',['../structrtp__hdr.html',1,'']]], ['rtp_5fx_5fhdr_2',['rtp_x_hdr',['../structrtp__x__hdr.html',1,'']]] ]; html/search/defines_1.html0000644000175000017500000000263714720474626015016 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/pages_0.html0000644000175000017500000000263514720474626014475 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/variables_0.html0000644000175000017500000000264114720474626015343 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/close.svg0000644000175000017500000000240414720474626014111 0ustar buildbuild image/svg+xml html/search/files_3.js0000644000175000017500000000034614720474626014150 0ustar buildbuildvar searchData= [ ['stream_2eh_0',['stream.h',['../stream_8h.html',1,'']]], ['stream_5fcli_2ec_1',['stream_cli.c',['../stream__cli_8c.html',1,'']]], ['stream_5fsrv_2ec_2',['stream_srv.c',['../stream__srv_8c.html',1,'']]] ]; html/search/files_0.js0000644000175000017500000000023014720474626014135 0ustar buildbuildvar searchData= [ ['datagram_2ec_0',['datagram.c',['../datagram_8c.html',1,'']]], ['datagram_2eh_1',['datagram.h',['../datagram_8h.html',1,'']]] ]; html/search/typedefs_0.html0000644000175000017500000000264014720474626015215 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_1.js0000644000175000017500000000024714720474626014501 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/typedefs_0.js0000644000175000017500000000051414720474626014663 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/functions_0.js0000644000175000017500000004642714720474626015065 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,'osmo_stream_cli_close(struct osmo_stream_cli *cli): stream_cli.c'],['../group__stream__cli.html#gad217c1c1b83ac852e090afd49146db19',1,'osmo_stream_cli_close(struct osmo_stream_cli *cli): 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_5flocal_5faddr_61',['osmo_stream_cli_set_local_addr',['../group__stream__cli.html#ga70420e7c664cc4c4e69ac4d3476e7f53',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5flocal_5faddrs_62',['osmo_stream_cli_set_local_addrs',['../group__stream__cli.html#ga090fc3fcd1706b815ef5a729921c100e',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5flocal_5fport_63',['osmo_stream_cli_set_local_port',['../group__stream__cli.html#ga4d83e3cf7fdf7eb354c2015ff9bed98a',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fname_64',['osmo_stream_cli_set_name',['../group__stream__cli.html#gaeb712dc553735736047f9b11d9583baa',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fnodelay_65',['osmo_stream_cli_set_nodelay',['../group__stream__cli.html#gaa196e78db6ca32abb1473566b4f1b04b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fparam_66',['osmo_stream_cli_set_param',['../group__stream__cli.html#ga0638e98001fa4bdd36533718472dfac7',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fport_67',['osmo_stream_cli_set_port',['../group__stream__cli.html#gab8b9f65bebfeb83c6e33d102e9439770',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fproto_68',['osmo_stream_cli_set_proto',['../group__stream__cli.html#ga91d57aa94a370520540d7272af66a23b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fread_5fcb_69',['osmo_stream_cli_set_read_cb',['../group__stream__cli.html#ga798f23db7e2e1d999775589db8a73d03',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fread_5fcb2_70',['osmo_stream_cli_set_read_cb2',['../group__stream__cli.html#ga7892eb77d40f08a254f654786d0b996b',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5freconnect_5ftimeout_71',['osmo_stream_cli_set_reconnect_timeout',['../group__stream__cli.html#gade74792afe35f31dd2584c888db3dd62',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5fsegmentation_5fcb_72',['osmo_stream_cli_set_segmentation_cb',['../group__stream__cli.html#gab6094559935824750d82b9164ed76910',1,'stream_cli.c']]], ['osmo_5fstream_5fcli_5fset_5ftype_73',['osmo_stream_cli_set_type',['../group__stream__cli.html#ga5e5c4c9aacc1cd1d303c0295018594cb',1,'stream_cli.c']]], ['osmo_5fstream_5fsrv_5fcreate_74',['osmo_stream_srv_create',['../group__stream__srv.html#ga136b426790b6322f58f89059b88aaa0b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fcreate2_75',['osmo_stream_srv_create2',['../group__stream__srv.html#ga8be283e1a143e346b4d6ccf33cbb9b98',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fdestroy_76',['osmo_stream_srv_destroy',['../group__stream__srv.html#ga47f18e063f64f22cb74d58d8b7243bed',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fdata_77',['osmo_stream_srv_get_data',['../group__stream__srv.html#gae2a0ef01097d964c71e38600b4c078d5',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5ffd_78',['osmo_stream_srv_get_fd',['../group__stream__srv.html#ga803c8ba415f66cc1029b3899cc53b807',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fiofd_79',['osmo_stream_srv_get_iofd',['../group__stream__srv.html#ga9e00a9172d5b2708afa269d52c118eff',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fmaster_80',['osmo_stream_srv_get_master',['../group__stream__srv.html#ga9cf689935bf6ffac4f86f56219d73c8e',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fname_81',['osmo_stream_srv_get_name',['../group__stream__srv.html#gad34dc0f7ebf7c84653514566e431a1d2',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fofd_82',['osmo_stream_srv_get_ofd',['../group__stream__srv.html#ga47bbca4f12717db2e6158eefe6310b9b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fget_5fsockname_83',['osmo_stream_srv_get_sockname',['../group__stream__srv.html#ga4f176a35751509dc741fbd2b52f45b22',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fclose_84',['osmo_stream_srv_link_close',['../group__stream__srv.html#gad325d97b09c724e830c98d76b890520d',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fcreate_85',['osmo_stream_srv_link_create',['../group__stream__srv.html#gaad262988c7ac365566f03843c560f892',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fdestroy_86',['osmo_stream_srv_link_destroy',['../group__stream__srv.html#ga882acaaa5935422b0e09a2ce8c8019ec',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fdata_87',['osmo_stream_srv_link_get_data',['../group__stream__srv.html#gacb5d68c2a6a9663f99266c70747bce04',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5ffd_88',['osmo_stream_srv_link_get_fd',['../group__stream__srv.html#gae2ef09bc8da55db30d967563dfc6561a',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fname_89',['osmo_stream_srv_link_get_name',['../group__stream__srv.html#ga67520942e5a404a0b3a6960b8a161de8',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fofd_90',['osmo_stream_srv_link_get_ofd',['../group__stream__srv.html#ga7b8981351a154c357fcefd39c31ad42a',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fget_5fsockname_91',['osmo_stream_srv_link_get_sockname',['../group__stream__srv.html#ga7d7b6af7df24e90dc758a088bae6316d',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fis_5fopened_92',['osmo_stream_srv_link_is_opened',['../group__stream__srv.html#ga28243be108ed0302b0f5a9d1dfc96b22',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fopen_93',['osmo_stream_srv_link_open',['../group__stream__srv.html#ga603b89074d3e8c0fb44144ab1864f0d4',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5faccept_5fcb_94',['osmo_stream_srv_link_set_accept_cb',['../group__stream__srv.html#ga1eea525d4e1e7a24c9c08881994ceb7e',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5faddr_95',['osmo_stream_srv_link_set_addr',['../group__stream__srv.html#gacece90116484e34540def69b05c66f57',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5faddrs_96',['osmo_stream_srv_link_set_addrs',['../group__stream__srv.html#gaadabca7d23c52c39e291bf7e05f0055b',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fdata_97',['osmo_stream_srv_link_set_data',['../group__stream__srv.html#ga5ef0f0c85a52c08e8c10d36a8f44e392',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fdomain_98',['osmo_stream_srv_link_set_domain',['../group__stream__srv.html#ga9629b516297c31f34af48e4630973dab',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fname_99',['osmo_stream_srv_link_set_name',['../group__stream__srv.html#gadef998825a4739660b198151fcee4201',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fnodelay_100',['osmo_stream_srv_link_set_nodelay',['../group__stream__srv.html#ga41e8ad2c761aaa00313aa11d1f29a3ed',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fparam_101',['osmo_stream_srv_link_set_param',['../group__stream__srv.html#ga759bceb4ce155f88e3e7817ce4c9449d',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fport_102',['osmo_stream_srv_link_set_port',['../group__stream__srv.html#ga76bbbafd1d8dc9c9ebffd301503b6dd9',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5fproto_103',['osmo_stream_srv_link_set_proto',['../group__stream__srv.html#ga2508987133a93863d2a50103004b0f36',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5flink_5fset_5ftype_104',['osmo_stream_srv_link_set_type',['../group__stream__srv.html#ga1903f9aa2e6f9283ebcf20f573b1d970',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5frecv_105',['osmo_stream_srv_recv',['../group__stream__srv.html#gac86242c41223c525c770ff7e7515d83e',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fsend_106',['osmo_stream_srv_send',['../group__stream__srv.html#gaa1589994cf6eab27742cafee6b7fb491',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fclosed_5fcb_107',['osmo_stream_srv_set_closed_cb',['../group__stream__srv.html#gaed83d9686289eee534d77a61b96fbd90',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fdata_108',['osmo_stream_srv_set_data',['../group__stream__srv.html#ga9891663b20714d72f992e44ad1e92eea',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fflush_5fand_5fdestroy_109',['osmo_stream_srv_set_flush_and_destroy',['../group__stream__srv.html#ga8390ce6740e56eb22215e1c5805c95f1',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fname_110',['osmo_stream_srv_set_name',['../group__stream__srv.html#ga196834d254fd94922d6be91b7b5b1ed3',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fread_5fcb_111',['osmo_stream_srv_set_read_cb',['../group__stream__srv.html#gad0d7b7e236826c52f10a7b4f50009d01',1,'stream_srv.c']]], ['osmo_5fstream_5fsrv_5fset_5fsegmentation_5fcb_112',['osmo_stream_srv_set_segmentation_cb',['../group__stream__srv.html#ga560a6d868bf95bf2f3a4b716bfd5cac9',1,'stream_srv.c']]], ['osmux_5fsnprintf_113',['osmux_snprintf',['../group__osmux.html#gaf654e092ca97dd764f59905a2ed21650',1,'osmux.c']]], ['osmux_5fxfrm_5finput_114',['osmux_xfrm_input',['../group__osmux.html#ga9c7d30c0d7d9bc0caf744799d629d4cc',1,'osmux_input.c']]], ['osmux_5fxfrm_5finput_5falloc_115',['osmux_xfrm_input_alloc',['../group__osmux.html#gad61cdde332496df6d7350d147e50b8be',1,'osmux_input.c']]], ['osmux_5fxfrm_5finput_5ffini_116',['osmux_xfrm_input_fini',['../group__osmux.html#ga13655a3bdc68f5e96ad1fe1c03dc235e',1,'osmux_input.c']]], ['osmux_5fxfrm_5finput_5finit_117',['osmux_xfrm_input_init',['../group__osmux.html#ga96230b0431d5d4d91f2dd57a9c85c366',1,'osmux_input.c']]], ['osmux_5fxfrm_5foutput_5falloc_118',['osmux_xfrm_output_alloc',['../group__osmux.html#ga41a217bffa1b0ac095c98ab0fab82c25',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fflush_119',['osmux_xfrm_output_flush',['../group__osmux.html#gaaac410425f6470396ae9db53ebb8dc44',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5finit_120',['osmux_xfrm_output_init',['../group__osmux.html#ga90d58246bcd24a6126898cd6c47dddf4',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5finit2_121',['osmux_xfrm_output_init2',['../group__osmux.html#gaa076e54fa0d249721a4c7b174a8ed2d1',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fsched_122',['osmux_xfrm_output_sched',['../group__osmux.html#gafee78ee4522a9caa238301d7b913dfd6',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5frtp_5fmsgb_5falloc_5fcb_123',['osmux_xfrm_output_set_rtp_msgb_alloc_cb',['../group__osmux.html#ga97187827e1f793f2392e54585343db32',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5frtp_5fpl_5ftype_124',['osmux_xfrm_output_set_rtp_pl_type',['../group__osmux.html#ga0d96c8a544e0ff56576615e0b2ac7774',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5frtp_5fssrc_125',['osmux_xfrm_output_set_rtp_ssrc',['../group__osmux.html#ga08151bad3c12df245d4c0e4f9c4ca966',1,'osmux_output.c']]], ['osmux_5fxfrm_5foutput_5fset_5ftx_5fcb_126',['osmux_xfrm_output_set_tx_cb',['../group__osmux.html#ga3936e43e881d0992648937417969ead1',1,'osmux_output.c']]] ]; html/search/all_4.js0000644000175000017500000000040014720474626013606 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/all_4.html0000644000175000017500000000263314720474626014150 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/groups_0.js0000644000175000017500000000077014720474626014363 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/classes_1.html0000644000175000017500000000263714720474626015036 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/search.js0000644000175000017500000005500414720474626014072 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/search_r.png0000644000175000017500000000105114720474626014554 0ustar buildbuild‰PNG  IHDR7›•ygAMA± üa cHRMm˜sŽà8‚ÕzÊ´3Dv„6*½bKGDÿ‡Ì¿ pHYs  šœtIMEâ  OíWßIDAT(Ï…’AKQFI+ ª]‹–ýƒ–ý‚ý–A‹‚¶F»H* )¤…¡Í$¨E¨P»À„©6T ˜ ‚Žóæ£à„ãܳ=÷r¹÷›øÙèn±øѪ>ÿAxˆGüT¸%+ÍXùp§8;~ñóƒÉ'%u"÷óú !~\l:4¨‘‘ñt>ŠŒ)…¢O›7.œÄ^)2VòD‡6Ï$ZÚR Š> nܳ­ (:TUò\8’͇J%'N‡&éÝIÒär=tÒ—Ì®„,nóbfæB$‹Ê©6r§÷fn9à-Ë׻wÚ4Bx6êßïz|Ëûkmq$îH zXÔÝj«ÒyzÅÁe«X¸ZËE‡Éü°cû‘sÑÂ%tEXtdate:create2018-12-07T11:28:17+00:00-?CÛ%tEXtdate:modify2018-12-07T11:28:17+00:00\bûgIEND®B`‚html/search/all_5.html0000644000175000017500000000263314720474626014151 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_2.js0000644000175000017500000000044514720474626014147 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/defines_0.js0000644000175000017500000000040014720474626014447 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/search.css0000644000175000017500000001072214720474626014244 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/groups_0.html0000644000175000017500000000263614720474626014716 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_0.html0000644000175000017500000000263314720474626014144 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_3.html0000644000175000017500000000263314720474626014147 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_0.html0000644000175000017500000000263714720474626015035 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/files_0.html0000644000175000017500000000263514720474626014500 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_7.js0000644000175000017500000000034614720474626013622 0ustar buildbuildvar searchData= [ ['stream_2eh_0',['stream.h',['../stream_8h.html',1,'']]], ['stream_5fcli_2ec_1',['stream_cli.c',['../stream__cli_8c.html',1,'']]], ['stream_5fsrv_2ec_2',['stream_srv.c',['../stream__srv_8c.html',1,'']]] ]; html/search/functions_0.html0000644000175000017500000000264114720474626015403 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_0.js0000644000175000017500000000024114720474626013605 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_1.html0000644000175000017500000000263314720474626014145 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/classes_0.js0000644000175000017500000000024114720474626014472 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/files_3.html0000644000175000017500000000263514720474626014503 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/mag_sel.svg0000644000175000017500000000451214720474626014415 0ustar buildbuild image/svg+xml html/search/files_1.html0000644000175000017500000000263514720474626014501 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_6.html0000644000175000017500000000263314720474626014152 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/all_2.html0000644000175000017500000000263314720474626014146 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/pages_0.js0000644000175000017500000000013714720474626014140 0ustar buildbuildvar searchData= [ ['deprecated_20list_0',['Deprecated List',['../deprecated.html',1,'']]] ]; html/search/classes_2.js0000644000175000017500000000067014720474626014502 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,'']]], ['osmux_5fhdr_2',['osmux_hdr',['../structosmux__hdr.html',1,'']]], ['osmux_5fin_5fhandle_3',['osmux_in_handle',['../structosmux__in__handle.html',1,'']]], ['osmux_5fout_5fhandle_4',['osmux_out_handle',['../structosmux__out__handle.html',1,'']]] ]; html/search/files_1.js0000644000175000017500000000020614720474626014141 0ustar buildbuildvar searchData= [ ['jibuf_2ec_0',['jibuf.c',['../jibuf_8c.html',1,'']]], ['jibuf_2eh_1',['jibuf.h',['../jibuf_8h.html',1,'']]] ]; html/search/all_2.js0000644000175000017500000000024714720474626013615 0ustar buildbuildvar searchData= [ ['ipa_5fhead_0',['ipa_head',['../structipa__head.html',1,'']]], ['ipa_5fhead_5fext_1',['ipa_head_ext',['../structipa__head__ext.html',1,'']]] ]; html/search/search_m.png0000644000175000017500000000023614720474626014553 0ustar buildbuild‰PNG  IHDR5^KMgAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe<0IDATxÚb,//g```<~ü8ˆúøñ#ˆúÿÿ?bbZP,Xnݺ¤ ¥<~áE§IEND®B`‚html/search/search_l.png0000644000175000017500000000106714720474626014555 0ustar buildbuild‰PNG  IHDR:…å>gAMA± üa cHRMm˜sŽà8‚ÕzÊ´3Dv„6*½bKGDÿ‡Ì¿ pHYs  šœtIMEâ  OíWß*IDAT(Ï’ÍJBQF÷&Š&ö ›ô>Ѥ|ƒ(‚ÀFAI õ–¢‘`šAP Õ ‘~ÀŸ&FzžÕ A튷oM6‡uß-È/iÃtyÝžÛæ «¬Ù¹6bSÞ%ÏÝž pA’476Iæìvܧäx£B•Ÿ6‰LîDü
    Loading...
    Searching...
    No Matches
    html/search/all_1.js0000644000175000017500000000034314720474626013611 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/searchdata.js0000644000175000017500000000074714720474626014730 0ustar buildbuildvar indexSectionsWithContent = { 0: "adijmors", 1: "aior", 2: "djos", 3: "o", 4: "o", 5: "o", 6: "mo", 7: "o", 8: "d" }; var indexSectionNames = { 0: "all", 1: "classes", 2: "files", 3: "functions", 4: "variables", 5: "typedefs", 6: "defines", 7: "groups", 8: "pages" }; var indexSectionLabels = { 0: "All", 1: "Data Structures", 2: "Files", 3: "Functions", 4: "Variables", 5: "Typedefs", 6: "Macros", 7: "Modules", 8: "Pages" }; html/search/all_3.js0000644000175000017500000000020614720474626013611 0ustar buildbuildvar searchData= [ ['jibuf_2ec_0',['jibuf.c',['../jibuf_8c.html',1,'']]], ['jibuf_2eh_1',['jibuf.h',['../jibuf_8h.html',1,'']]] ]; html/search/all_6.js0000644000175000017500000000033514720474626013617 0ustar buildbuildvar searchData= [ ['rtcp_5fhdr_0',['rtcp_hdr',['../structrtcp__hdr.html',1,'']]], ['rtp_5fhdr_1',['rtp_hdr',['../structrtp__hdr.html',1,'']]], ['rtp_5fx_5fhdr_2',['rtp_x_hdr',['../structrtp__x__hdr.html',1,'']]] ]; html/search/variables_0.js0000644000175000017500000000022114720474626015003 0ustar buildbuildvar searchData= [ ['osmux_5fseq_0',['osmux_seq',['../structosmux__in__handle.html#a1ba076a41ef9c3413665b7444c6521cc',1,'osmux_in_handle']]] ]; html/search/nomatches.html0000644000175000017500000000076414720474626015141 0ustar buildbuild
    No Matches
    html/search/defines_0.html0000644000175000017500000000263714720474626015015 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/search/defines_1.js0000644000175000017500000000030014720474626014447 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/all_7.html0000644000175000017500000000263314720474626014153 0ustar buildbuild
    Loading...
    Searching...
    No Matches
    html/dynsections.js0000644000175000017500000001054414720474626013722 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: osmux_hdr Struct Reference
    libosmo-netif 1.5.1.12-e6c0
    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/dir_abe9b486a10ccc5afdf8abc29637e0c1.html0000644000175000017500000001072014720474626017471 0ustar buildbuild libosmo-netif: include/osmocom Directory Reference
    libosmo-netif 1.5.1.12-e6c0
    Osmocom network interface library
    osmocom Directory Reference

    Directories

    directory  netif
     
    html/globals_type.html0000644000175000017500000000766714720474626014410 0ustar buildbuild libosmo-netif: Globals
    libosmo-netif 1.5.1.12-e6c0
    Osmocom network interface library
     
    • osmo_stream_cli_read_cb2_t : stream.h
    • osmo_stream_srv_read_cb2_t : stream.h
    html/nav_f.png0000644000175000017500000000023114720474626012611 0ustar buildbuild‰PNG  IHDR8³»`IDATxíÝK€ EÑ–·[†øBÑmkâÄÂH—prÓ¼.‚Žó‚ꎤR6Z VI±E‚5j³„lóš›iI˜¬ÞêçJ0ŒÑÑ/Žû›™uøñóÞ¿6sH ÝõyIEND®B`‚html/datagram_8h.html0000644000175000017500000006250214720474626014070 0ustar buildbuild libosmo-netif: include/osmocom/netif/datagram.h File Reference
    libosmo-netif 1.5.1.12-e6c0
    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/jibuf_8h_source.html0000644000175000017500000004214514720474626014770 0ustar buildbuild libosmo-netif: include/osmocom/netif/jibuf.h Source File
    libosmo-netif 1.5.1.12-e6c0
    Osmocom network interface library
    jibuf.h
    Go to the documentation of this file.
    1#pragma once
    2
    3#include <stdint.h>
    4#include <stdbool.h>
    5#include <time.h>
    6
    7#include <osmocom/core/timer.h>
    8
    17typedef void (*osmo_jibuf_dequeue_cb)(struct msgb *msg, void *data);
    18
    20struct osmo_jibuf {
    21 void *talloc_ctx;
    22 bool started;
    23 struct osmo_timer_list timer;
    24 struct llist_head msg_list; /* sorted by output ts */
    25 uint32_t min_delay; /* in msec */
    26 uint32_t max_delay; /* in msec */
    27 uint32_t threshold_delay; /* in msec */
    28
    29 osmo_jibuf_dequeue_cb dequeue_cb;
    30 void *dequeue_cb_data;
    31
    32 /* number of pkt drops since we last changed the buffer size */
    33 uint32_t last_dropped;
    34 uint32_t consecutive_drops;
    35
    36 uint32_t ref_rx_ts;
    37 uint32_t ref_tx_ts;
    38 uint16_t ref_tx_seq;
    39
    40 struct timeval last_enqueue_time;
    41 struct timeval next_dequeue_time;
    42
    43 bool skew_enabled;
    44 int32_t skew_us; /* src clock skew, in usec */
    45
    46 struct {
    47 uint32_t total_enqueued;
    48 uint64_t total_dropped;
    49 } stats;
    50};
    51
    52
    53struct osmo_jibuf *osmo_jibuf_alloc(void *talloc_ctx);
    54
    55void osmo_jibuf_delete(struct osmo_jibuf *jb);
    56
    57int osmo_jibuf_enqueue(struct osmo_jibuf *jb, struct msgb *msg);
    58
    59bool osmo_jibuf_empty(struct osmo_jibuf *jb);
    60
    61void osmo_jibuf_set_min_delay(struct osmo_jibuf *jb, uint32_t min_delay);
    62void osmo_jibuf_set_max_delay(struct osmo_jibuf *jb, uint32_t max_delay);
    63
    64void osmo_jibuf_enable_skew_compensation(struct osmo_jibuf *jb, bool enable);
    65
    66void osmo_jibuf_set_dequeue_cb(struct osmo_jibuf *jb, osmo_jibuf_dequeue_cb dequeue_cb, void* cb_data);
    67
    void osmo_jibuf_enable_skew_compensation(struct osmo_jibuf *jb, bool enable)
    Toggle use of skew detection and compensation mechanism.
    Definition: jibuf.c:450
    struct osmo_jibuf * osmo_jibuf_alloc(void *talloc_ctx)
    Allocate a new jitter buffer instance.
    Definition: jibuf.c:299
    void osmo_jibuf_set_dequeue_cb(struct osmo_jibuf *jb, osmo_jibuf_dequeue_cb dequeue_cb, void *cb_data)
    Set dequeue callback for the jitter buffer.
    Definition: jibuf.c:461
    int osmo_jibuf_enqueue(struct osmo_jibuf *jb, struct msgb *msg)
    Try to enqueue a packet into the jitter buffer.
    Definition: jibuf.c:343
    void osmo_jibuf_set_max_delay(struct osmo_jibuf *jb, uint32_t max_delay)
    Set maximum buffer size for the jitter buffer.
    Definition: jibuf.c:438
    void osmo_jibuf_set_min_delay(struct osmo_jibuf *jb, uint32_t min_delay)
    Set minimum buffer size for the jitter buffer.
    Definition: jibuf.c:428
    void osmo_jibuf_delete(struct osmo_jibuf *jb)
    Destroy a previously allocated jitter buffer instance.
    Definition: jibuf.c:321
    bool osmo_jibuf_empty(struct osmo_jibuf *jb)
    Check whether the jitter buffer instance has packets queued or not.
    Definition: jibuf.c:419
    A structure representing a single instance of a jitter buffer.
    Definition: jibuf.h:20
    html/globals_func.html0000644000175000017500000005227214720474626014352 0ustar buildbuild libosmo-netif: Globals
    libosmo-netif 1.5.1.12-e6c0
    Osmocom network interface library
     

    - o -

    html/stream_8h.js0000644000175000017500000002032314720474626013246 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_local_addr", "group__stream__cli.html#ga70420e7c664cc4c4e69ac4d3476e7f53", null ], [ "osmo_stream_cli_set_local_addrs", "group__stream__cli.html#ga090fc3fcd1706b815ef5a729921c100e", null ], [ "osmo_stream_cli_set_local_port", "group__stream__cli.html#ga4d83e3cf7fdf7eb354c2015ff9bed98a", null ], [ "osmo_stream_cli_set_name", "group__stream__cli.html#gaeb712dc553735736047f9b11d9583baa", null ], [ "osmo_stream_cli_set_nodelay", "group__stream__cli.html#gaa196e78db6ca32abb1473566b4f1b04b", null ], [ "osmo_stream_cli_set_param", "group__stream__cli.html#ga0638e98001fa4bdd36533718472dfac7", null ], [ "osmo_stream_cli_set_port", "group__stream__cli.html#gab8b9f65bebfeb83c6e33d102e9439770", null ], [ "osmo_stream_cli_set_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_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_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_proto", "group__stream__srv.html#ga2508987133a93863d2a50103004b0f36", null ], [ "osmo_stream_srv_link_set_type", "group__stream__srv.html#ga1903f9aa2e6f9283ebcf20f573b1d970", null ], [ "osmo_stream_srv_recv", "group__stream__srv.html#gac86242c41223c525c770ff7e7515d83e", null ], [ "osmo_stream_srv_send", "group__stream__srv.html#gaa1589994cf6eab27742cafee6b7fb491", null ], [ "osmo_stream_srv_set_closed_cb", "group__stream__srv.html#gaed83d9686289eee534d77a61b96fbd90", null ], [ "osmo_stream_srv_set_data", "group__stream__srv.html#ga9891663b20714d72f992e44ad1e92eea", null ], [ "osmo_stream_srv_set_flush_and_destroy", "group__stream__srv.html#ga8390ce6740e56eb22215e1c5805c95f1", null ], [ "osmo_stream_srv_set_name", "group__stream__srv.html#ga196834d254fd94922d6be91b7b5b1ed3", null ], [ "osmo_stream_srv_set_read_cb", "group__stream__srv.html#gad0d7b7e236826c52f10a7b4f50009d01", null ], [ "osmo_stream_srv_set_segmentation_cb", "group__stream__srv.html#ga560a6d868bf95bf2f3a4b716bfd5cac9", null ] ];html/sync_on.png0000644000175000017500000000151514720474626013176 0ustar buildbuild‰PNG  IHDRàw=øIDATxíÝ_HTYÀñï8ã¤ó§i§4-g6ÆËÕ&kQ)¨Ô!Š0ÒURKÚ…„ê¡/»PEÁ>ìK-+KÁ²Ñ.Y”¾dEPaA‰ø°¥¶›ZSÓïÜ;3wºŠ–¯—߯gfîïœsçœWKÇñ.€ÉøD­¨a‘'¬âq_ôˆk¢ÀŒ ÀDŽøQ´ÄïC¨¶åñÏÿgÅ ñ 0„Y‚:qZ¦Á)~õâ€èLý0HVñ× žz-¿‰C“%¨g¦˜6€é8%Úõ¬ëwêÙUÏ¿˜ª³Ä }? ?€·3ÀÀž©Š À”K• @hà a±ðaÇæUe‹ sù~ë2²ì“&Ú&B*AÄljæºììi*˨,Ëçí»÷oÆ£T”,d[˜¼3-*ÁÀ…>å‡Ë çLÉŸçfk˜Ò éw#*AEjKUy>ûšËÉõ&{µ¢8—m5Ki¬ jjƒD*¿NŽÖigwÃ7Dª’mz骹úKÛ¾±ˆ¶M!æ¤ÍkÐ?šoý¬_åÓlXí#Ò~–¸¬ê×ÒÑXŠÓ‘ùRÙ*Eû‚ՂדðEÜ;6«e"Q(²Ù=–¿Ezæ5Kؼָ_ 1òzBªJë ±XŒì96åªjL^7{ùãJÑ÷1½i@%8'7M©_\Qœ#ÓUŒËñýÿyõ Wo Éx8¼s¥v¯ªì|×SnÜ q_m Ýé î>bèÕí[JX,½4[Tú{R£ë¼ôˆ¾þa€tÝjjzzÅ'ÅìȶiIžŽòwÏs ¡€—ÕKøõâC^ŽŒ˜Y­¨µÉ%6¨´êˆº]vÛðhâ½iWv–hôëê°Ò¨¾'æÌ‚·ñ|[ßìúÅ^€YrD=<ýDû]äÇ÷s€Ïõ‹8™ºCì? À ¨—t4õá©Ž¡Jã‡W‹É± îr¼cjMɘìx| šE©øNÔ‰œøA¢þ«–€Z¼ñ‡jó î#™§¢¢4gIEND®B`‚html/structrtcp__hdr.html0000644000175000017500000001261614720474626015123 0ustar buildbuild libosmo-netif: rtcp_hdr Struct Reference
    libosmo-netif 1.5.1.12-e6c0
    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/menudata.js0000644000175000017500000000407514720474626013160 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/navtreeindex0.js0000644000175000017500000002531514720474626014136 0ustar buildbuildvar NAVTREEINDEX0 = { "amr_8h_source.html":[3,0,0,0,0,0], "annotated.html":[2,0], "datagram_8c.html":[1,0,1], "datagram_8h.html":[1,0,0], "deprecated.html":[0], "dir_15662fdf1b5c37dde6a3ed82e5410e57.html":[3,0,0,0,0], "dir_68267d1309a1af8e8297ef4c3efbcdba.html":[3,0,1], "dir_abe9b486a10ccc5afdf8abc29637e0c1.html":[3,0,0,0], "dir_d44c64559bbebec7f509842c48db8b23.html":[3,0,0], "files.html":[3,0], "functions.html":[2,1,0], "functions_vars.html":[2,1,1], "globals.html":[3,1,0], "globals_defs.html":[3,1,3], "globals_func.html":[3,1,1], "globals_type.html":[3,1,2], "group__datagram.html":[1,0], "group__datagram.html#ga01efa7269834a745d80910a64c6f61c0":[1,0,8], "group__datagram.html#ga01fb36f8c19b2b64705d8263f7f53f59":[1,0,4], "group__datagram.html#ga095ce94e65f1607026c37c12e6f5e9c0":[1,0,29], "group__datagram.html#ga0eb580467681e8fa91be35a83a74f132":[1,0,23], "group__datagram.html#ga16d69e998c663cdec0b76560a2d8cfb9":[1,0,12], "group__datagram.html#ga27bf4c1d8e4c30ef7b4ec49665d6fc90":[1,0,22], "group__datagram.html#ga36d7e1f26af3308b51f95e06d1c742d7":[1,0,5], "group__datagram.html#ga46db4acbfc35668e35601338d64364ed":[1,0,2], "group__datagram.html#ga48d7e39656886b52aa176fc1b14c84cf":[1,0,32], "group__datagram.html#ga56ee60c89f1a3bc975ab0ede5b71ff15":[1,0,3], "group__datagram.html#ga5a0f7221b8583aac5153f167c4e2177d":[1,0,15], "group__datagram.html#ga6677ee8d976d2e1bed8e0c01e103c18f":[1,0,21], "group__datagram.html#ga66d6c9d5f0243a4f7ed458c62d8e20dd":[1,0,16], "group__datagram.html#ga6b6ef2f02e3d260f1e84a2ecf8c67b5a":[1,0,20], "group__datagram.html#ga6c843f43db5439f8f0ba38f72dbb1a20":[1,0,30], "group__datagram.html#ga6e4b92b9c7f210d1cb3782425d0bdac0":[1,0,10], "group__datagram.html#ga8d712623df3862e55ad248dc5ecd626c":[1,0,26], "group__datagram.html#ga9180ae9a36a9927d4bdb49cdc5708b1f":[1,0,19], "group__datagram.html#ga94fe94f64f1285715db36eb1f2e9deaa":[1,0,28], "group__datagram.html#gaa6a5fbd5f227d15cefe6b234fefb3b4d":[1,0,17], "group__datagram.html#gaad6f9ca0688cd4a8a95ec6002f52ded5":[1,0,25], "group__datagram.html#gaae58d13a6fd634ebfddd486d0d428c5e":[1,0,7], "group__datagram.html#gac65de108c52dba83b178d6453e9fb545":[1,0,6], "group__datagram.html#gad378ba5cc66ee0c27a277906d8434e31":[1,0,13], "group__datagram.html#gad4638b9943090f5bf1a7b75fa8efde46":[1,0,27], "group__datagram.html#gad7af9f04fe4847b0e2eefe35fa05a8b8":[1,0,9], "group__datagram.html#gadeaa837f3df8382bd7a50e668b9d3a61":[1,0,24], "group__datagram.html#gae2962232548d41621520c6c71da423a5":[1,0,31], "group__datagram.html#gaf21d974e14fa22f910313b240d31d40f":[1,0,18], "group__datagram.html#gaf558e9c2f02216ed95db039ddaf31050":[1,0,11], "group__datagram.html#gafbd947def18d8e34062876433ac05e91":[1,0,14], "group__jibuf.html":[1,1], "group__jibuf.html#ga096e87b2dbdade72c35d51a51fe57839":[1,1,5], "group__jibuf.html#ga20592f230f9d1233752fd318996f2c9d":[1,1,2], "group__jibuf.html#ga3a8213fe8bed42d649fcb1c8d13e23d8":[1,1,7], "group__jibuf.html#ga522165ddc51578436ae2d26691fa7ec0":[1,1,6], "group__jibuf.html#ga5e84571c3348525b6ad647a22cd2581d":[1,1,8], "group__jibuf.html#gabcd63f39049bc4d6b3541a674b78963d":[1,1,9], "group__jibuf.html#gacdac7beaf3d97543718ddfa33123fb7e":[1,1,3], "group__jibuf.html#gae73a3b805b83f453339adeee9cdfaba4":[1,1,4], "group__osmux.html":[1,4], "group__osmux.html#ga08151bad3c12df245d4c0e4f9c4ca966":[1,4,19], "group__osmux.html#ga0d96c8a544e0ff56576615e0b2ac7774":[1,4,18], "group__osmux.html#ga13655a3bdc68f5e96ad1fe1c03dc235e":[1,4,10], "group__osmux.html#ga3936e43e881d0992648937417969ead1":[1,4,20], "group__osmux.html#ga41a217bffa1b0ac095c98ab0fab82c25":[1,4,12], "group__osmux.html#ga90d58246bcd24a6126898cd6c47dddf4":[1,4,14], "group__osmux.html#ga96230b0431d5d4d91f2dd57a9c85c366":[1,4,11], "group__osmux.html#ga97187827e1f793f2392e54585343db32":[1,4,17], "group__osmux.html#ga9c7d30c0d7d9bc0caf744799d629d4cc":[1,4,8], "group__osmux.html#gaa076e54fa0d249721a4c7b174a8ed2d1":[1,4,15], "group__osmux.html#gaaac410425f6470396ae9db53ebb8dc44":[1,4,13], "group__osmux.html#gad61cdde332496df6d7350d147e50b8be":[1,4,9], "group__osmux.html#gaf654e092ca97dd764f59905a2ed21650":[1,4,7], "group__osmux.html#gafee78ee4522a9caa238301d7b913dfd6":[1,4,16], "group__stream__cli.html":[1,3], "group__stream__cli.html#ga0038e937cf0f36c59e0e3991523219a1":[1,3,17], "group__stream__cli.html#ga0615daa4aac253a3d530f35fddbc68bd":[1,3,9], "group__stream__cli.html#ga0638e98001fa4bdd36533718472dfac7":[1,3,28], "group__stream__cli.html#ga06f9743c19068bb720a4949ae8467243":[1,3,15], "group__stream__cli.html#ga090fc3fcd1706b815ef5a729921c100e":[1,3,24], "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#ga33ce730fc91ebade9b7188fa220656c6":[1,3,22], "group__stream__cli.html#ga4d83e3cf7fdf7eb354c2015ff9bed98a":[1,3,25], "group__stream__cli.html#ga5e5c4c9aacc1cd1d303c0295018594cb":[1,3,35], "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,23], "group__stream__cli.html#ga7892eb77d40f08a254f654786d0b996b":[1,3,32], "group__stream__cli.html#ga798f23db7e2e1d999775589db8a73d03":[1,3,31], "group__stream__cli.html#ga79a09e9c9b8cc98991cd5eebdb41ed57":[1,3,11], "group__stream__cli.html#ga86b4b9c8e563f8426d3cdae803e3ec38":[1,3,12], "group__stream__cli.html#ga91d57aa94a370520540d7272af66a23b":[1,3,30], "group__stream__cli.html#ga9d0dac2f390c660c85fa347765f4f45a":[1,3,4], "group__stream__cli.html#gaa196e78db6ca32abb1473566b4f1b04b":[1,3,27], "group__stream__cli.html#gaab1e7ef0ccc88e124c5f7bbb5e46c29c":[1,3,18], "group__stream__cli.html#gaacf415b97e1184baadeee5c60387422b":[1,3,16], "group__stream__cli.html#gab6094559935824750d82b9164ed76910":[1,3,34], "group__stream__cli.html#gab8b9f65bebfeb83c6e33d102e9439770":[1,3,29], "group__stream__cli.html#gac32d0489dd05ab89fb0c54dfd360d5b3":[1,3,7], "group__stream__cli.html#gad217c1c1b83ac852e090afd49146db19":[1,3,2], "group__stream__cli.html#gade74792afe35f31dd2584c888db3dd62":[1,3,33], "group__stream__cli.html#gaeb712dc553735736047f9b11d9583baa":[1,3,26], "group__stream__cli.html#gaecd148ae11f2f619aa52dd2900a15827":[1,3,10], "group__stream__cli.html#gafa39b1dcc139ad12cbc38d51049bf14f":[1,3,1], "group__stream__cli.html#gaffc6ac3b28d87c910294a2f522a1eaab":[1,3,6], "group__stream__srv.html":[1,2], "group__stream__srv.html#ga136b426790b6322f58f89059b88aaa0b":[1,2,1], "group__stream__srv.html#ga1903f9aa2e6f9283ebcf20f573b1d970":[1,2,31], "group__stream__srv.html#ga196834d254fd94922d6be91b7b5b1ed3":[1,2,37], "group__stream__srv.html#ga1eea525d4e1e7a24c9c08881994ceb7e":[1,2,21], "group__stream__srv.html#ga2508987133a93863d2a50103004b0f36":[1,2,30], "group__stream__srv.html#ga28243be108ed0302b0f5a9d1dfc96b22":[1,2,19], "group__stream__srv.html#ga41e8ad2c761aaa00313aa11d1f29a3ed":[1,2,27], "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#ga560a6d868bf95bf2f3a4b716bfd5cac9":[1,2,39], "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,28], "group__stream__srv.html#ga76bbbafd1d8dc9c9ebffd301503b6dd9":[1,2,29], "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,36], "group__stream__srv.html#ga882acaaa5935422b0e09a2ce8c8019ec":[1,2,13], "group__stream__srv.html#ga8be283e1a143e346b4d6ccf33cbb9b98":[1,2,2], "group__stream__srv.html#ga9629b516297c31f34af48e4630973dab":[1,2,25], "group__stream__srv.html#ga9891663b20714d72f992e44ad1e92eea":[1,2,35], "group__stream__srv.html#ga9cf689935bf6ffac4f86f56219d73c8e":[1,2,7], "group__stream__srv.html#ga9e00a9172d5b2708afa269d52c118eff":[1,2,6], "group__stream__srv.html#gaa1589994cf6eab27742cafee6b7fb491":[1,2,33], "group__stream__srv.html#gaad262988c7ac365566f03843c560f892":[1,2,12], "group__stream__srv.html#gaadabca7d23c52c39e291bf7e05f0055b":[1,2,23], "group__stream__srv.html#gac86242c41223c525c770ff7e7515d83e":[1,2,32], "group__stream__srv.html#gacb5d68c2a6a9663f99266c70747bce04":[1,2,14], "group__stream__srv.html#gacece90116484e34540def69b05c66f57":[1,2,22], "group__stream__srv.html#gad0d7b7e236826c52f10a7b4f50009d01":[1,2,38], "group__stream__srv.html#gad325d97b09c724e830c98d76b890520d":[1,2,11], "group__stream__srv.html#gad34dc0f7ebf7c84653514566e431a1d2":[1,2,8], "group__stream__srv.html#gadef998825a4739660b198151fcee4201":[1,2,26], "group__stream__srv.html#gae2a0ef01097d964c71e38600b4c078d5":[1,2,4], "group__stream__srv.html#gae2ef09bc8da55db30d967563dfc6561a":[1,2,15], "group__stream__srv.html#gaed83d9686289eee534d77a61b96fbd90":[1,2,34], "index.html":[], "ipa_8h_source.html":[3,0,0,0,0,2], "ipa__unit_8h_source.html":[3,0,0,0,0,3], "jibuf_8c.html":[3,0,1,1], "jibuf_8h.html":[1,1,0], "modules.html":[1], "osmux_8c.html":[1,4,1], "osmux_8h.html":[1,4,0], "osmux__input_8c.html":[1,4,2], "osmux__output_8c.html":[1,4,3], "pages.html":[], "prim_8h_source.html":[3,0,0,0,0,6], "rs232_8h_source.html":[3,0,0,0,0,7], "rtp_8h_source.html":[3,0,0,0,0,8], "sctp_8h_source.html":[3,0,0,0,0,9], "stream_8h.html":[3,0,0,0,0,10], "stream_8h.html#a123b7866ed4985a81246bfede79a8ea9":[3,0,0,0,0,10,2], "stream_8h.html#a2693c0cc5c6222dd9ed42c8c4bf8aec8":[3,0,0,0,0,10,0], "stream_8h.html#ac2c359892ad63309b59a4b402f6a3e81":[3,0,0,0,0,10,1], "stream_8h_source.html":[3,0,0,0,0,10], "stream__cli_8c.html":[3,0,1,5], "stream__private_8h_source.html":[3,0,0,0,0,11], "stream__srv_8c.html":[3,0,1,6], "structamr__hdr.html":[2,0,0], "structamr__hdr__bwe.html":[2,0,1], "structipa__head.html":[2,0,2], "structipa__head__ext.html":[2,0,3], "structosmo__ipa__msgb__cb.html":[2,0,4], "structosmo__jibuf.html":[1,1,1], "structosmux__hdr.html":[1,4,4], "structosmux__in__handle.html":[1,4,5], "structosmux__in__handle.html#a1ba076a41ef9c3413665b7444c6521cc":[1,4,5,0], "structosmux__out__handle.html":[1,4,6], "structrtcp__hdr.html":[2,0,9], "structrtp__hdr.html":[2,0,10], "structrtp__x__hdr.html":[2,0,11] }; html/folderclosed.png0000644000175000017500000000115014720474626014166 0ustar buildbuild‰PNG  IHDRÚ}\ˆ/IDATxí]MOÔ@~ÚúuØlp]ö¿#›Å]PYECˆ\9ù¼yÑß`ÖÄÿàÿÀÉxóâ¢C &=qÐÄ£—vZçv¶3m؃‡vžLûNç}Þ÷}Þ½ZA@n° OäNp ’xóþK°ññ€xÜj”°8sÑ€“ “€œ_¼[Âíæ§ïD'‚•yye+ø¼û 7#rNŸlïük* ¾0Ь_d«_(àñÖ±àôz=ñxõv§÷h©‰z¹€šØP-äóä’̪uý¼$»\DãJc—B4¯ãÝÖ.:£Ï-ÑÏß}µŠLEíºþ #—ûáºÀÏgN;BŠ€6ïýñ䬜…ö@’Ðåñp&™h>p9¤™EEά¨ÎÊ‘" u¥n€$R"?{¹<˜…ë…%PNtâ$‰߶±úá+^<é"§2 ªDq”q´\¬«Ò™a–Œ‘©Aÿ€"Ôµ ™êŸèP£}#Eàz{û.8i îp³ê(ADwD¦E<ê¬cE¦$ HdÊÄ ”.:Ù GŽ-`ŒL‚ý¾'¢‰Ä<¤CIª½;ÙÇTZd±i};>èôß‚z×;Kק8t ¤Ž q”:uvÿv•Ý›¬²ÙvEân{„M·FXg¼ÌfZÖ¨°¹‰*›ßÌß©±ù©:›j–YqèÜë#3çÏSøWøÿÿÑr'ø Ôùù‚ ©¡IEND®B`‚html/structosmo__ipa__msgb__cb.html0000644000175000017500000001207414720474626017074 0ustar buildbuild libosmo-netif: osmo_ipa_msgb_cb Struct Reference
    libosmo-netif 1.5.1.12-e6c0
    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/functions.html0000644000175000017500000000766114720474626013726 0ustar buildbuild libosmo-netif: Data Fields
    libosmo-netif 1.5.1.12-e6c0
    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/dir_68267d1309a1af8e8297ef4c3efbcdba.html0000644000175000017500000001513514720474626017360 0ustar buildbuild libosmo-netif: src Directory Reference
    libosmo-netif 1.5.1.12-e6c0
    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/modules.html0000644000175000017500000001265014720474626013360 0ustar buildbuild libosmo-netif: Modules
    libosmo-netif 1.5.1.12-e6c0
    Osmocom network interface library
    Modules
    Here is a list of all modules:
     Osmocom Datagram SocketThis code is intended to abstract any use of datagram type sockets, such as UDP
     Osmocom Jitter Buffer
     Osmocom Stream ServerThis code is intended to abstract any server-side use of stream-type sockets, such as TCP and SCTP
     Osmocom Stream ClientThis code is intended to abstract any client use of stream-type sockets, such as TCP and SCTP
     Osmocom Multiplex ProtocolThis code implements a variety of utility functions related to the OSMUX user-plane multiplexing protocol, an efficient alternative to plain UDP/RTP streams for voice transport in back-haul of cellular networks
    html/jibuf_8h.js0000644000175000017500000000142114720474626013050 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__cli_8c.html0000644000175000017500000010551114720474626014562 0ustar buildbuild libosmo-netif: src/stream_cli.c File Reference
    libosmo-netif 1.5.1.12-e6c0
    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)
     

    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...
     
    void osmo_stream_cli_close (struct osmo_stream_cli *cli)
     Close an Osmocom Stream Client. More...
     
    int osmo_stream_cli_get_fd (const struct osmo_stream_cli *cli)
     Retrieve file descriptor of the stream client socket. More...
     
    struct osmo_io_fd * osmo_stream_cli_get_iofd (const struct osmo_stream_cli *cli)
     Retrieve osmo_io descriptor of the stream client socket. More...
     
    struct osmo_stream_cli * osmo_stream_cli_create (void *ctx)
     Create an Osmocom stream client. More...
     
    void osmo_stream_cli_set_name (struct osmo_stream_cli *cli, const char *name)
     Set a name on the cli object (used during logging). More...
     
    const char * osmo_stream_cli_get_name (const struct osmo_stream_cli *cli)
     Retrieve name previously set on the cli object (see osmo_stream_cli_set_name()). More...
     
    void osmo_stream_cli_set_addr (struct osmo_stream_cli *cli, const char *addr)
     Set the remote address to which we connect. More...
     
    int osmo_stream_cli_set_addrs (struct osmo_stream_cli *cli, const char **addr, size_t addrcnt)
     Set the remote address set to which we connect. More...
     
    void osmo_stream_cli_set_port (struct osmo_stream_cli *cli, uint16_t port)
     Set the remote port number to which we connect. More...
     
    void osmo_stream_cli_set_local_port (struct osmo_stream_cli *cli, uint16_t port)
     Set the local port number for the socket (to be bound to). More...
     
    void osmo_stream_cli_set_local_addr (struct osmo_stream_cli *cli, const char *addr)
     Set the local address for the socket (to be bound to). More...
     
    int osmo_stream_cli_set_local_addrs (struct osmo_stream_cli *cli, const char **addr, size_t addrcnt)
     Set the local address set to which we bind. More...
     
    void osmo_stream_cli_set_proto (struct osmo_stream_cli *cli, uint16_t proto)
     Set the protocol for the stream client socket. More...
     
    void osmo_stream_cli_set_segmentation_cb (struct osmo_stream_cli *cli, osmo_stream_cli_segmentation_cb_t segmentation_cb)
     Set the segmentation callback for the client. More...
     
    int osmo_stream_cli_set_type (struct osmo_stream_cli *cli, int type)
     Set the socket type for the stream server link. More...
     
    int osmo_stream_cli_set_domain (struct osmo_stream_cli *cli, int domain)
     Set the socket type for the stream server link. More...
     
    void osmo_stream_cli_set_reconnect_timeout (struct osmo_stream_cli *cli, int timeout)
     Set the reconnect time of the stream client socket. More...
     
    void osmo_stream_cli_set_data (struct osmo_stream_cli *cli, void *data)
     Set application private data of the stream client socket. More...
     
    void * osmo_stream_cli_get_data (struct osmo_stream_cli *cli)
     Retrieve application private data of the stream client socket. More...
     
    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_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/stream_8h_source.html0000644000175000017500000023051114720474626015160 0ustar buildbuild libosmo-netif: include/osmocom/netif/stream.h Source File
    libosmo-netif 1.5.1.12-e6c0
    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
    63struct osmo_stream_srv_link;
    64
    65typedef int (*osmo_stream_srv_link_accept_cb_t)(struct osmo_stream_srv_link *link, int fd);
    66
    67struct osmo_stream_srv_link *osmo_stream_srv_link_create(void *ctx);
    68void osmo_stream_srv_link_destroy(struct osmo_stream_srv_link *link);
    69
    70void osmo_stream_srv_link_set_name(struct osmo_stream_srv_link *link, const char *name);
    71const char *osmo_stream_srv_link_get_name(const struct osmo_stream_srv_link *link);
    72void osmo_stream_srv_link_set_nodelay(struct osmo_stream_srv_link *link, bool nodelay);
    73void osmo_stream_srv_link_set_addr(struct osmo_stream_srv_link *link, const char *addr);
    74int osmo_stream_srv_link_set_addrs(struct osmo_stream_srv_link *link, const char **addr, size_t addrcnt);
    75void osmo_stream_srv_link_set_port(struct osmo_stream_srv_link *link, uint16_t port);
    76void osmo_stream_srv_link_set_proto(struct osmo_stream_srv_link *link, uint16_t proto);
    77int osmo_stream_srv_link_set_type(struct osmo_stream_srv_link *link, int type);
    78int osmo_stream_srv_link_set_domain(struct osmo_stream_srv_link *link, int domain);
    79void osmo_stream_srv_link_set_accept_cb(struct osmo_stream_srv_link *link, osmo_stream_srv_link_accept_cb_t accept_cb);
    80void osmo_stream_srv_link_set_data(struct osmo_stream_srv_link *link, void *data);
    81void *osmo_stream_srv_link_get_data(struct osmo_stream_srv_link *link);
    82char *osmo_stream_srv_link_get_sockname(const struct osmo_stream_srv_link *link);
    83struct osmo_fd *osmo_stream_srv_link_get_ofd(struct osmo_stream_srv_link *link);
    84int osmo_stream_srv_link_get_fd(const struct osmo_stream_srv_link *link);
    85bool osmo_stream_srv_link_is_opened(const struct osmo_stream_srv_link *link);
    86int osmo_stream_srv_link_open(struct osmo_stream_srv_link *link);
    87void osmo_stream_srv_link_close(struct osmo_stream_srv_link *link);
    88
    89enum osmo_stream_srv_link_param {
    90 OSMO_STREAM_SRV_LINK_PAR_SCTP_SOCKOPT_AUTH_SUPPORTED, /* uint8_t: 0 disable, 1 enable, 2 force disable, 3 force enable */
    91 OSMO_STREAM_SRV_LINK_PAR_SCTP_SOCKOPT_ASCONF_SUPPORTED, /* uint8_t: 0 disable, 1 enable, 2 force disable, 3 force enable */
    92 OSMO_STREAM_SRV_LINK_PAR_SCTP_INIT_NUM_OSTREAMS, /* uint16_t: amount of streams */
    93 OSMO_STREAM_SRV_LINK_PAR_SCTP_INIT_MAX_INSTREAMS, /* uint16_t: amount of streams */
    94};
    95
    96int osmo_stream_srv_link_set_param(struct osmo_stream_srv_link *link, enum osmo_stream_srv_link_param par,
    97 void *val, size_t val_len);
    98
    101struct osmo_stream_srv;
    102
    103typedef int (*osmo_stream_srv_read_cb_t)(struct osmo_stream_srv *conn);
    104typedef int (*osmo_stream_srv_closed_cb_t)(struct osmo_stream_srv *conn);
    105
    111typedef int (*osmo_stream_srv_read_cb2_t)(struct osmo_stream_srv *conn, int res, struct msgb *msg);
    112
    113typedef int (*osmo_stream_srv_segmentation_cb_t)(struct msgb *msg);
    114
    115struct osmo_stream_srv *osmo_stream_srv_create(void *ctx, struct osmo_stream_srv_link *link, int fd,
    116 osmo_stream_srv_read_cb_t read_cb,
    117 osmo_stream_srv_closed_cb_t closed_cb,
    118 void *data);
    119struct osmo_stream_srv *osmo_stream_srv_create2(void *ctx, struct osmo_stream_srv_link *link, int fd, void *data);
    120void osmo_stream_srv_set_name(struct osmo_stream_srv *conn, const char *name);
    121const char *osmo_stream_srv_get_name(const struct osmo_stream_srv *conn);
    122void osmo_stream_srv_set_read_cb(struct osmo_stream_srv *conn, osmo_stream_srv_read_cb2_t read_cb);
    123void osmo_stream_srv_set_closed_cb(struct osmo_stream_srv *conn, osmo_stream_srv_closed_cb_t close_cb);
    124void *osmo_stream_srv_get_data(struct osmo_stream_srv *conn);
    125struct osmo_stream_srv_link *osmo_stream_srv_get_master(struct osmo_stream_srv *conn);
    126const char *osmo_stream_srv_get_sockname(const struct osmo_stream_srv *conn);
    127struct osmo_fd *osmo_stream_srv_get_ofd(struct osmo_stream_srv *srv);
    128int osmo_stream_srv_get_fd(const struct osmo_stream_srv *srv);
    129struct osmo_io_fd *osmo_stream_srv_get_iofd(const struct osmo_stream_srv *srv);
    130void osmo_stream_srv_destroy(struct osmo_stream_srv *conn);
    131
    132void osmo_stream_srv_set_flush_and_destroy(struct osmo_stream_srv *conn);
    133void osmo_stream_srv_set_data(struct osmo_stream_srv *conn, void *data);
    134
    135void osmo_stream_srv_set_segmentation_cb(struct osmo_stream_srv *conn, osmo_stream_srv_segmentation_cb_t segmentation_cb);
    136
    137void osmo_stream_srv_send(struct osmo_stream_srv *conn, struct msgb *msg);
    138int osmo_stream_srv_recv(struct osmo_stream_srv *conn, struct msgb *msg);
    139
    140void osmo_stream_srv_clear_tx_queue(struct osmo_stream_srv *conn);
    141
    177struct osmo_stream_cli;
    178
    179typedef int (*osmo_stream_cli_connect_cb_t)(struct osmo_stream_cli *cli);
    180typedef int (*osmo_stream_cli_disconnect_cb_t)(struct osmo_stream_cli *cli);
    181typedef int (*osmo_stream_cli_read_cb_t)(struct osmo_stream_cli *cli);
    182
    188typedef int (*osmo_stream_cli_read_cb2_t)(struct osmo_stream_cli *cli, int res, struct msgb *msg);
    189
    190typedef int (*osmo_stream_cli_segmentation_cb_t)(struct msgb *msg);
    191
    192void osmo_stream_cli_set_name(struct osmo_stream_cli *cli, const char *name);
    193const char *osmo_stream_cli_get_name(const struct osmo_stream_cli *cli);
    194void osmo_stream_cli_set_nodelay(struct osmo_stream_cli *cli, bool nodelay);
    195void osmo_stream_cli_set_addr(struct osmo_stream_cli *cli, const char *addr);
    196int osmo_stream_cli_set_addrs(struct osmo_stream_cli *cli, const char **addr, size_t addrcnt);
    197void osmo_stream_cli_set_port(struct osmo_stream_cli *cli, uint16_t port);
    198int osmo_stream_cli_set_type(struct osmo_stream_cli *cli, int type);
    199int osmo_stream_cli_set_domain(struct osmo_stream_cli *cli, int domain);
    200void osmo_stream_cli_set_proto(struct osmo_stream_cli *cli, uint16_t proto);
    201void osmo_stream_cli_set_local_addr(struct osmo_stream_cli *cli, const char *addr);
    202int osmo_stream_cli_set_local_addrs(struct osmo_stream_cli *cli, const char **addr, size_t addrcnt);
    203void osmo_stream_cli_set_local_port(struct osmo_stream_cli *cli, uint16_t port);
    204void osmo_stream_cli_set_data(struct osmo_stream_cli *cli, void *data);
    205void osmo_stream_cli_set_reconnect_timeout(struct osmo_stream_cli *cli, int timeout);
    206void *osmo_stream_cli_get_data(struct osmo_stream_cli *cli);
    207char *osmo_stream_cli_get_sockname(const struct osmo_stream_cli *cli);
    208struct osmo_fd *osmo_stream_cli_get_ofd(struct osmo_stream_cli *cli);
    209int osmo_stream_cli_get_fd(const struct osmo_stream_cli *cli);
    210struct osmo_io_fd *osmo_stream_cli_get_iofd(const struct osmo_stream_cli *cli);
    211void osmo_stream_cli_set_connect_cb(struct osmo_stream_cli *cli, osmo_stream_cli_connect_cb_t connect_cb);
    212void osmo_stream_cli_set_disconnect_cb(struct osmo_stream_cli *cli, osmo_stream_cli_disconnect_cb_t disconnect_cb);
    213void osmo_stream_cli_set_read_cb(struct osmo_stream_cli *cli, osmo_stream_cli_read_cb_t read_cb);
    214void osmo_stream_cli_set_read_cb2(struct osmo_stream_cli *cli, osmo_stream_cli_read_cb2_t read_cb);
    215void osmo_stream_cli_set_segmentation_cb(struct osmo_stream_cli *cli, osmo_stream_cli_segmentation_cb_t segmentation_cb);
    216void osmo_stream_cli_reconnect(struct osmo_stream_cli *cli);
    217bool osmo_stream_cli_is_connected(struct osmo_stream_cli *cli);
    218
    219struct osmo_stream_cli *osmo_stream_cli_create(void *ctx);
    220void osmo_stream_cli_destroy(struct osmo_stream_cli *cli);
    221
    222int osmo_stream_cli_open(struct osmo_stream_cli *cli);
    223int osmo_stream_cli_open2(struct osmo_stream_cli *cli, int reconnect) \
    224 OSMO_DEPRECATED("Use osmo_stream_cli_set_reconnect_timeout() or osmo_stream_cli_reconnect() instead");
    225void osmo_stream_cli_close(struct osmo_stream_cli *cli);
    226
    227void osmo_stream_cli_send(struct osmo_stream_cli *cli, struct msgb *msg);
    228int osmo_stream_cli_recv(struct osmo_stream_cli *cli, struct msgb *msg);
    229
    230void osmo_stream_cli_clear_tx_queue(struct osmo_stream_cli *cli);
    231
    232enum osmo_stream_cli_param {
    233 OSMO_STREAM_CLI_PAR_SCTP_SOCKOPT_AUTH_SUPPORTED, /* uint8_t: 0 disable, 1 enable, 2 force disable, 3 force enable */
    234 OSMO_STREAM_CLI_PAR_SCTP_SOCKOPT_ASCONF_SUPPORTED, /* uint8_t: 0 disable, 1 enable, 2 force disable, 3 force enable */
    235 OSMO_STREAM_CLI_PAR_SCTP_INIT_NUM_OSTREAMS, /* uint16_t: amount of streams */
    236 OSMO_STREAM_CLI_PAR_SCTP_INIT_MAX_INSTREAMS, /* uint16_t: amount of streams */
    237 OSMO_STREAM_CLI_PAR_SCTP_INIT_MAX_ATTEMPTS, /* uint16_t: amount of attempts */
    238 OSMO_STREAM_CLI_PAR_SCTP_INIT_TIMEOUT, /* uint16_t: milliseconds */
    239};
    240
    241int osmo_stream_cli_set_param(struct osmo_stream_cli *cli, enum osmo_stream_cli_param par,
    242 void *val, size_t val_len);
    243
    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:590
    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:806
    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:1213
    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:1134
    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:663
    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:579
    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:188
    void osmo_stream_cli_reconnect(struct osmo_stream_cli *cli)
    Re-connect an Osmocom Stream Client.
    Definition: stream_cli.c:127
    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:875
    struct osmo_stream_cli * osmo_stream_cli_create(void *ctx)
    Create an Osmocom stream client.
    Definition: stream_cli.c:433
    int osmo_stream_cli_set_domain(struct osmo_stream_cli *cli, int domain)
    Set the socket type for the stream server link.
    Definition: stream_cli.c:744
    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:639
    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:724
    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:773
    void * osmo_stream_cli_get_data(struct osmo_stream_cli *cli)
    Retrieve application private data of the stream client socket.
    Definition: stream_cli.c:781
    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:827
    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:818
    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:651
    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:851
    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:838
    bool osmo_stream_cli_is_connected(struct osmo_stream_cli *cli)
    Check if Osmocom Stream Client is in connected state.
    Definition: stream_cli.c:146
    int osmo_stream_cli_open(struct osmo_stream_cli *cli)
    Open connection of an Osmocom stream client.
    Definition: stream_cli.c:962
    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:688
    void osmo_stream_cli_destroy(struct osmo_stream_cli *cli)
    Destroy a Osmocom stream client (includes close).
    Definition: stream_cli.c:861
    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:936
    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:602
    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:1082
    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:710
    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:627
    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:244
    void osmo_stream_cli_close(struct osmo_stream_cli *cli)
    Close an Osmocom Stream Client.
    Definition: stream_cli.c:184
    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:764
    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:568
    char * osmo_stream_cli_get_sockname(const struct osmo_stream_cli *cli)
    Retrieve the stream client socket description.
    Definition: stream_cli.c:791
    void osmo_stream_cli_clear_tx_queue(struct osmo_stream_cli *cli)
    Clear the transmit queue of the stream client.
    Definition: stream_cli.c:1189
    int osmo_stream_cli_get_fd(const struct osmo_stream_cli *cli)
    Retrieve file descriptor of the stream client socket.
    Definition: stream_cli.c:224
    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:824
    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:296
    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:911
    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:441
    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:282
    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:513
    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:219
    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:1028
    void osmo_stream_srv_destroy(struct osmo_stream_srv *conn)
    Destroy given Stream Server.
    Definition: stream_srv.c:1076
    const char * osmo_stream_srv_get_sockname(const struct osmo_stream_srv *conn)
    Retrieve the stream server socket description.
    Definition: stream_srv.c:1014
    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:988
    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:111
    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:336
    int osmo_stream_srv_link_open(struct osmo_stream_srv_link *link)
    Open the stream server link.
    Definition: stream_srv.c:460
    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:207
    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:543
    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:269
    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:422
    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:409
    int osmo_stream_srv_get_fd(const struct osmo_stream_srv *srv)
    Retrieve File Descriptor of the stream server.
    Definition: stream_srv.c:1038
    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:961
    void osmo_stream_srv_link_destroy(struct osmo_stream_srv_link *link)
    Destroy the stream server link.
    Definition: stream_srv.c:450
    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:867
    int osmo_stream_srv_link_set_domain(struct osmo_stream_srv_link *link, int domain)
    Set the socket type for the stream server link.
    Definition: stream_srv.c:316
    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:970
    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:1066
    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:1057
    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:1100
    struct osmo_stream_srv_link * osmo_stream_srv_link_create(void *ctx)
    Create an Osmocom Stream Server Link.
    Definition: stream_srv.c:175
    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:245
    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:1149
    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:345
    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:232
    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:936
    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:527
    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:922
    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:198
    void * osmo_stream_srv_get_data(struct osmo_stream_srv *conn)
    Retrieve application private data of the stream server.
    Definition: stream_srv.c:1005
    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:430
    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:949
    html/tab_h.png0000644000175000017500000000026114720474626012600 0ustar buildbuild‰PNG  IHDR$ÇÇ[xIDATxíÝMÁ@†áž~¥ÜÆÎ’Evˆ¿"!•²‘d*×rGq=Š{¼ßSݧçë­ÓÉHÇ uO^õø[À_‡¢ãXvyËþÒ±=·VCffææ{°öŠó´Rçœ%_õçÿŽ¢ö·°Çrug¶(?gh\i>|sIEND®B`‚html/osmux_8h.js0000644000175000017500000000255714720474626013137 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/prim_8h_source.html0000644000175000017500000003627714720474626014651 0ustar buildbuild libosmo-netif: include/osmocom/netif/prim.h Source File
    libosmo-netif 1.5.1.12-e6c0
    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/structamr__hdr.html0000644000175000017500000001121114720474626014720 0ustar buildbuild libosmo-netif: amr_hdr Struct Reference
    libosmo-netif 1.5.1.12-e6c0
    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/group__datagram.js0000644000175000017500000000611514720474626014512 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/nav_h.png0000644000175000017500000000014214720474626012614 0ustar buildbuild‰PNG  IHDR ,é@)IDATxíÝA @BQ­³šÛ›Ð¢Žáà) )ëý éaÅèÜ¿Æo‡RlÐßIEND®B`‚html/classes.html0000644000175000017500000001233314720474626013343 0ustar buildbuild libosmo-netif: Data Structure Index
    libosmo-netif 1.5.1.12-e6c0
    Osmocom network interface library
    html/group__stream__srv.html0000644000175000017500000027604314720474626015617 0ustar buildbuild libosmo-netif: Osmocom Stream Server
    libosmo-netif 1.5.1.12-e6c0
    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)
     

    Enumerations

    enum  osmo_stream_srv_link_param { OSMO_STREAM_SRV_LINK_PAR_SCTP_SOCKOPT_AUTH_SUPPORTED , OSMO_STREAM_SRV_LINK_PAR_SCTP_SOCKOPT_ASCONF_SUPPORTED , OSMO_STREAM_SRV_LINK_PAR_SCTP_INIT_NUM_OSTREAMS , OSMO_STREAM_SRV_LINK_PAR_SCTP_INIT_MAX_INSTREAMS }
     

    Functions

    struct osmo_stream_srv_link * osmo_stream_srv_link_create (void *ctx)
     Create an Osmocom Stream Server Link. More...
     
    void osmo_stream_srv_link_destroy (struct osmo_stream_srv_link *link)
     Destroy the stream server link. More...
     
    void osmo_stream_srv_link_set_name (struct osmo_stream_srv_link *link, const char *name)
     Set a name on the srv_link object (used during logging). More...
     
    const char * osmo_stream_srv_link_get_name (const struct osmo_stream_srv_link *link)
     Retrieve name previously set on the srv_link object (see osmo_stream_srv_link_set_name()). More...
     
    void osmo_stream_srv_link_set_nodelay (struct osmo_stream_srv_link *link, bool nodelay)
     Set the NODELAY socket option to avoid Nagle-like behavior. More...
     
    void osmo_stream_srv_link_set_addr (struct osmo_stream_srv_link *link, const char *addr)
     Set the local address to which we bind. More...
     
    int osmo_stream_srv_link_set_addrs (struct osmo_stream_srv_link *link, const char **addr, size_t addrcnt)
     Set the local address set to which we bind. More...
     
    void osmo_stream_srv_link_set_port (struct osmo_stream_srv_link *link, uint16_t port)
     Set the local port number to which we bind. More...
     
    void osmo_stream_srv_link_set_proto (struct osmo_stream_srv_link *link, uint16_t proto)
     Set the protocol for the stream server link. More...
     
    int osmo_stream_srv_link_set_type (struct osmo_stream_srv_link *link, int type)
     Set the socket type for the stream server link. More...
     
    int osmo_stream_srv_link_set_domain (struct osmo_stream_srv_link *link, int domain)
     Set the socket type for the stream server link. More...
     
    void osmo_stream_srv_link_set_accept_cb (struct osmo_stream_srv_link *link, int(*accept_cb)(struct osmo_stream_srv_link *link, int fd))
     Set the accept() call-back of the stream server link. More...
     
    void osmo_stream_srv_link_set_data (struct osmo_stream_srv_link *link, void *data)
     Set application private data of the stream server link. More...
     
    void * osmo_stream_srv_link_get_data (struct osmo_stream_srv_link *link)
     Retrieve application private data of the stream server link. More...
     
    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...
     
    bool osmo_stream_srv_link_is_opened (const struct osmo_stream_srv_link *link)
     Check whether the stream server link is opened. More...
     
    int osmo_stream_srv_link_open (struct osmo_stream_srv_link *link)
     Open the stream server link. More...
     
    void osmo_stream_srv_link_close (struct osmo_stream_srv_link *link)
     Close the stream server link and unregister from select loop. More...
     
    int osmo_stream_srv_link_set_param (struct osmo_stream_srv_link *link, enum osmo_stream_srv_link_param par, void *val, size_t val_len)
     Set given parameter of stream_srv_link to given value. More...
     
    struct osmo_stream_srv * osmo_stream_srv_create (void *ctx, struct osmo_stream_srv_link *link, int fd, osmo_stream_srv_read_cb_t read_cb, osmo_stream_srv_closed_cb_t closed_cb, void *data)
     Create a legacy osmo_fd mode Stream Server inside the specified link. More...
     
    struct osmo_stream_srv * osmo_stream_srv_create2 (void *ctx, struct osmo_stream_srv_link *link, int fd, void *data)
     Create an osmo_iofd mode Stream Server inside the specified link. More...
     
    void osmo_stream_srv_set_name (struct osmo_stream_srv *conn, const char *name)
     Set a name on the srv object (used during logging). More...
     
    const char * osmo_stream_srv_get_name (const struct osmo_stream_srv *conn)
     Retrieve name previously set on the srv object (see osmo_stream_srv_set_name()). More...
     
    void osmo_stream_srv_set_read_cb (struct osmo_stream_srv *conn, osmo_stream_srv_read_cb2_t read_cb)
     Set the call-back function for incoming data on an osmo_io stream_srv. More...
     
    void osmo_stream_srv_set_closed_cb (struct osmo_stream_srv *conn, osmo_stream_srv_closed_cb_t closed_cb)
     Set the call-back function called when the stream server socket was closed. More...
     
    void * osmo_stream_srv_get_data (struct osmo_stream_srv *conn)
     Retrieve application private data of the stream server. More...
     
    struct osmo_stream_srv_link * osmo_stream_srv_get_master (struct osmo_stream_srv *conn)
     Retrieve the master (Link) from a Stream Server. More...
     
    const char * osmo_stream_srv_get_sockname (const struct osmo_stream_srv *conn)
     Retrieve the stream server socket description. More...
     
    struct osmo_fd * osmo_stream_srv_get_ofd (struct osmo_stream_srv *conn)
     Retrieve Osmocom File Descriptor of a stream server in osmo_fd mode. More...
     
    int osmo_stream_srv_get_fd (const struct osmo_stream_srv *conn)
     Retrieve File Descriptor of the stream server. More...
     
    struct osmo_io_fd * osmo_stream_srv_get_iofd (const struct osmo_stream_srv *srv)
     Retrieve osmo_io descriptor of the stream server socket. More...
     
    void osmo_stream_srv_destroy (struct osmo_stream_srv *conn)
     Destroy given Stream Server. More...
     
    void osmo_stream_srv_set_flush_and_destroy (struct osmo_stream_srv *conn)
     Prepare to send out all pending messages on the connection's Tx queue. More...
     
    void osmo_stream_srv_set_data (struct osmo_stream_srv *conn, void *data)
     Set application private data of the stream server. More...
     
    void osmo_stream_srv_set_segmentation_cb (struct osmo_stream_srv *conn, osmo_stream_srv_segmentation_cb_t segmentation_cb)
     Set the segmentation callback for target osmo_stream_srv structure. More...
     
    void osmo_stream_srv_send (struct osmo_stream_srv *conn, struct msgb *msg)
     Enqueue data to be sent via an Osmocom stream server. More...
     
    int osmo_stream_srv_recv (struct osmo_stream_srv *conn, struct msgb *msg)
     Receive data via an Osmocom stream server in osmo_fd mode. More...
     
    void osmo_stream_srv_clear_tx_queue (struct osmo_stream_srv *conn)
     

    Detailed Description

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

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

    osmo_stream_srv can operate in two different modes:

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

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

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

    A typical stream_srv usage would look like this:

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

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

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

    Typedef Documentation

    ◆ osmo_stream_srv_read_cb2_t

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

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

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

    Function Documentation

    ◆ osmo_stream_srv_create()

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

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

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

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

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

    ◆ osmo_stream_srv_create2()

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

    Create an osmo_iofd mode Stream Server inside the specified link.

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

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

    ◆ osmo_stream_srv_destroy()

    void osmo_stream_srv_destroy ( struct osmo_stream_srv *  conn)

    Destroy given Stream Server.

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

    Parameters
    [in]connStream Server to be destroyed

    ◆ osmo_stream_srv_get_data()

    void * osmo_stream_srv_get_data ( struct osmo_stream_srv *  conn)

    Retrieve application private data of the stream server.

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

    ◆ osmo_stream_srv_get_fd()

    int osmo_stream_srv_get_fd ( const struct osmo_stream_srv *  conn)

    Retrieve File Descriptor of the stream server.

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

    Referenced by osmo_stream_srv_get_sockname().

    ◆ osmo_stream_srv_get_iofd()

    struct osmo_io_fd * osmo_stream_srv_get_iofd ( const struct osmo_stream_srv *  srv)

    Retrieve osmo_io descriptor of the stream server socket.

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

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

    ◆ osmo_stream_srv_get_master()

    struct osmo_stream_srv_link * osmo_stream_srv_get_master ( struct osmo_stream_srv *  conn)

    Retrieve the master (Link) from a Stream Server.

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

    ◆ osmo_stream_srv_get_name()

    const char * osmo_stream_srv_get_name ( const struct osmo_stream_srv *  conn)

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

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

    ◆ osmo_stream_srv_get_ofd()

    struct osmo_fd * osmo_stream_srv_get_ofd ( struct osmo_stream_srv *  conn)

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

    Parameters
    [in]connStream Server
    Returns
    Pointer to osmo_fd

    ◆ osmo_stream_srv_get_sockname()

    const char * osmo_stream_srv_get_sockname ( const struct osmo_stream_srv *  conn)

    Retrieve the stream server socket description.

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

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

    References osmo_stream_srv_get_fd().

    ◆ osmo_stream_srv_link_close()

    void osmo_stream_srv_link_close ( struct osmo_stream_srv_link *  link)

    Close the stream server link and unregister from select loop.

    Does not destroy the server link, merely closes it!

    Parameters
    [in]linkStream Server Link to close

    References osmo_stream_srv_link_is_opened().

    Referenced by osmo_stream_srv_link_destroy().

    ◆ osmo_stream_srv_link_create()

    struct osmo_stream_srv_link * osmo_stream_srv_link_create ( void *  ctx)

    Create an Osmocom Stream Server Link.

    A Stream Server Link is the listen()+accept() "parent" to individual connections from remote clients.

    Parameters
    [in]ctxtalloc allocation context
    Returns
    Stream Server Link with default values (AF_UNSPEC, SOCK_STREAM, IPPROTO_TCP)

    ◆ osmo_stream_srv_link_destroy()

    void osmo_stream_srv_link_destroy ( struct osmo_stream_srv_link *  link)

    Destroy the stream server link.

    Closes + Releases Memory.

    Parameters
    [in]linkStream Server Link

    References osmo_stream_srv_link_close().

    ◆ osmo_stream_srv_link_get_data()

    void * osmo_stream_srv_link_get_data ( struct osmo_stream_srv_link *  link)

    Retrieve application private data of the stream server link.

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

    ◆ osmo_stream_srv_link_get_fd()

    int osmo_stream_srv_link_get_fd ( const struct osmo_stream_srv_link *  link)

    Retrieve File Descriptor of the stream server link.

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

    ◆ osmo_stream_srv_link_get_name()

    const char * osmo_stream_srv_link_get_name ( const struct osmo_stream_srv_link *  link)

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

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

    ◆ osmo_stream_srv_link_get_ofd()

    struct osmo_fd * osmo_stream_srv_link_get_ofd ( struct osmo_stream_srv_link *  link)

    Retrieve Osmocom File Descriptor of the stream server link.

    Parameters
    [in]linkStream Server Link
    Returns
    Pointer to osmo_fd

    ◆ osmo_stream_srv_link_get_sockname()

    char * osmo_stream_srv_link_get_sockname ( const struct osmo_stream_srv_link *  link)

    Retrieve description of the stream server link e.

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

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

    ◆ osmo_stream_srv_link_is_opened()

    bool osmo_stream_srv_link_is_opened ( const struct osmo_stream_srv_link *  link)

    Check whether the stream server link is opened.

    Parameters
    [in]linkStream Server Link to check

    Referenced by osmo_stream_srv_link_close().

    ◆ osmo_stream_srv_link_open()

    int osmo_stream_srv_link_open ( struct osmo_stream_srv_link *  link)

    Open the stream server link.

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

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

    ◆ osmo_stream_srv_link_set_accept_cb()

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

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

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

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

    ◆ osmo_stream_srv_link_set_addr()

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

    Set the local address to which we bind.

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

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

    References osmo_stream_srv_link_set_addrs().

    ◆ osmo_stream_srv_link_set_addrs()

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

    Set the local address set to which we bind.

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

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

    Referenced by osmo_stream_srv_link_set_addr().

    ◆ osmo_stream_srv_link_set_data()

    void osmo_stream_srv_link_set_data ( struct osmo_stream_srv_link *  link,
    void *  data 
    )

    Set application private data of the stream server link.

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

    ◆ osmo_stream_srv_link_set_domain()

    int osmo_stream_srv_link_set_domain ( struct osmo_stream_srv_link *  link,
    int  domain 
    )

    Set the socket type for the stream server link.

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

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

    ◆ osmo_stream_srv_link_set_name()

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

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

    Parameters
    [in]linkserver link whose name is to be set. The name is copied into the osmo_stream_srv_link, so the caller memory is not required to be valid beyond the call of this function.
    [in]namethe name to be set on link

    ◆ osmo_stream_srv_link_set_nodelay()

    void osmo_stream_srv_link_set_nodelay ( struct osmo_stream_srv_link *  link,
    bool  nodelay 
    )

    Set the NODELAY socket option to avoid Nagle-like behavior.

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

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

    ◆ osmo_stream_srv_link_set_param()

    int osmo_stream_srv_link_set_param ( struct osmo_stream_srv_link *  link,
    enum osmo_stream_srv_link_param  par,
    void *  val,
    size_t  val_len 
    )

    Set given parameter of stream_srv_link to given value.

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

    ◆ osmo_stream_srv_link_set_port()

    void osmo_stream_srv_link_set_port ( struct osmo_stream_srv_link *  link,
    uint16_t  port 
    )

    Set the local port number to which we bind.

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

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

    ◆ osmo_stream_srv_link_set_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_type()

    int osmo_stream_srv_link_set_type ( struct osmo_stream_srv_link *  link,
    int  type 
    )

    Set the socket type for the stream server link.

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

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

    ◆ osmo_stream_srv_recv()

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

    Receive data via an Osmocom stream server in osmo_fd mode.

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

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

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

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

    ◆ osmo_stream_srv_send()

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

    Enqueue data to be sent via an Osmocom stream server.

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

    ◆ osmo_stream_srv_set_closed_cb()

    void osmo_stream_srv_set_closed_cb ( struct osmo_stream_srv *  conn,
    osmo_stream_srv_closed_cb_t  closed_cb 
    )

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

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

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

    ◆ osmo_stream_srv_set_data()

    void osmo_stream_srv_set_data ( struct osmo_stream_srv *  conn,
    void *  data 
    )

    Set application private data of the stream server.

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

    ◆ osmo_stream_srv_set_flush_and_destroy()

    void osmo_stream_srv_set_flush_and_destroy ( struct osmo_stream_srv *  conn)

    Prepare to send out all pending messages on the connection's Tx queue.

    and then automatically destroy the stream with osmo_stream_srv_destroy(). This function disables queuing of new messages on the connection and also disables reception of new messages on the connection.

    Parameters
    [in]connStream Server to modify

    ◆ osmo_stream_srv_set_name()

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

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

    Parameters
    [in]connserver whose name is to be set. The name is copied into the osmo_stream_srv_link, so the caller memory is not required to be valid beyond the call of this function.
    [in]namethe name to be set on conn

    ◆ osmo_stream_srv_set_read_cb()

    void osmo_stream_srv_set_read_cb ( struct osmo_stream_srv *  conn,
    osmo_stream_srv_read_cb2_t  read_cb 
    )

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

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

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

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

    ◆ osmo_stream_srv_set_segmentation_cb()

    void osmo_stream_srv_set_segmentation_cb ( struct osmo_stream_srv *  conn,
    osmo_stream_srv_segmentation_cb_t  segmentation_cb 
    )

    Set the segmentation callback for target osmo_stream_srv structure.

    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.

    Parameters
    [in,out]connTarget Stream Server to modify
    [in]segmentation_cbSegmentation callback to be set
    html/ipa__unit_8h_source.html0000644000175000017500000003415114720474626015636 0ustar buildbuild libosmo-netif: include/osmocom/netif/ipa_unit.h Source File
    libosmo-netif 1.5.1.12-e6c0
    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/functions_vars.html0000644000175000017500000000746614720474626014764 0ustar buildbuild libosmo-netif: Data Fields - Variables
    libosmo-netif 1.5.1.12-e6c0
    Osmocom network interface library
     
    html/dir_15662fdf1b5c37dde6a3ed82e5410e57.html0000644000175000017500000002000014720474626017174 0ustar buildbuild libosmo-netif: include/osmocom/netif Directory Reference
    libosmo-netif 1.5.1.12-e6c0
    Osmocom network interface library
    netif Directory Reference

    Files

    file  amr.h [code]
     
    file  datagram.h [code]
     Osmocom datagram socket helpers.
     
    file  ipa.h [code]
     
    file  ipa_unit.h [code]
     
    file  jibuf.h [code]
     Osmocom Jitter Buffer helpers.
     
    file  osmux.h [code]
     Osmocom multiplex protocol helpers.
     
    file  prim.h [code]
     
    file  rs232.h [code]
     
    file  rtp.h [code]
     
    file  sctp.h [code]
     
    file  stream.h [code]
     
    file  stream_private.h [code]
     
    html/deprecated.html0000644000175000017500000001374014720474626014011 0ustar buildbuild libosmo-netif: Deprecated List
    libosmo-netif 1.5.1.12-e6c0
    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/datagram_8c.js0000644000175000017500000000575114720474626013536 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/group__datagram.html0000644000175000017500000020325314720474626015044 0ustar buildbuild libosmo-netif: Osmocom Datagram Socket
    libosmo-netif 1.5.1.12-e6c0
    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/nav_g.png0000644000175000017500000000013714720474626012617 0ustar buildbuild‰PNG  IHDRô1&IDATxíÝ1 ÁOHf„á_ ->~¸åM iËMèÀƒS½ü‚<IEND®B`‚html/tab_b.png0000644000175000017500000000025114720474626012571 0ustar buildbuild‰PNG  IHDR$ÇÇ[pIDATxíÝMƒ EáÇ»ÐÔ¸¸u`âÀ´V0РÆ}:t]DÁ²s¿ä®‚¶ýËu¥ø|’xùî½À>ÿ1»& mÄ8ÜSÙÑxÜLÀUûšÞ²ÄiE–ŠåOs„¢’nxàÒêÓKN²~jIEND®B`‚html/ipa_8h_source.html0000644000175000017500000003704014720474626014440 0ustar buildbuild libosmo-netif: include/osmocom/netif/ipa.h Source File
    libosmo-netif 1.5.1.12-e6c0
    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#endif
    Definition: ipa.h:16
    Definition: ipa.h:10
    Definition: ipa.h:21
    html/structrtp__hdr.html0000644000175000017500000001342514720474626014757 0ustar buildbuild libosmo-netif: rtp_hdr Struct Reference
    libosmo-netif 1.5.1.12-e6c0
    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/splitbar.png0000644000175000017500000000047214720474626013347 0ustar buildbuild‰PNG  IHDRM¸¿IDATxíÝ¡JCa‡ñç(˜ ëƒ%±Ø4 b±È˜Í¶3˜v^Á±˜…ãó–ŽELƒõ…¥•³ ,ÿb;íç{Ã/¼ðÞÀaYÕ¯åóøq:¼º¹›\òIIIIIIIIIIIIIIIIII-Òçl¹›«õ抢è_t/Ï»ã£ÑíYQVõðêäíã÷´×ùY¬Úÿµ§¦ivók¾_íåýÛ£I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$ýC[Vì=ü[„fÆIEND®B`‚html/jquery.js0000644000175000017500000053125514720474626012706 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/datagram_8c.html0000644000175000017500000006624314720474626014071 0ustar buildbuild libosmo-netif: src/datagram.c File Reference
    libosmo-netif 1.5.1.12-e6c0
    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/amr_8h_source.html0000644000175000017500000010442014720474626014443 0ustar buildbuild libosmo-netif: include/osmocom/netif/amr.h Source File
    libosmo-netif 1.5.1.12-e6c0
    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/pages.html0000644000175000017500000001016214720474626013003 0ustar buildbuild libosmo-netif: Related Pages
    libosmo-netif 1.5.1.12-e6c0
    Osmocom network interface library
    Related Pages
    Here is a list of all related documentation pages:
    html/osmux__input_8c.html0000644000175000017500000004223014720474626015030 0ustar buildbuild libosmo-netif: src/osmux_input.c File Reference
    libosmo-netif 1.5.1.12-e6c0
    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/resize.js0000644000175000017500000001261614720474626012663 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/structrtp__x__hdr.html0000644000175000017500000001203314720474626015437 0ustar buildbuild libosmo-netif: rtp_x_hdr Struct Reference
    libosmo-netif 1.5.1.12-e6c0
    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/osmux_8c.html0000644000175000017500000002010214720474626013444 0ustar buildbuild libosmo-netif: src/osmux.c File Reference
    libosmo-netif 1.5.1.12-e6c0
    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/group__osmux.html0000644000175000017500000013754614720474626014452 0ustar buildbuild libosmo-netif: Osmocom Multiplex Protocol
    libosmo-netif 1.5.1.12-e6c0
    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/annotated.html0000644000175000017500000001621714720474626013670 0ustar buildbuild libosmo-netif: Data Structures
    libosmo-netif 1.5.1.12-e6c0
    Osmocom network interface library
    Data Structures
    Here are the data structures with brief descriptions:
     Camr_hdr
     Camr_hdr_bwe
     Cipa_head
     Cipa_head_ext
     Cosmo_ipa_msgb_cb
     Cosmo_jibufA structure representing a single instance of a jitter buffer
     Cosmux_hdrOsmux protocol header
     Cosmux_in_handleOne to handle all existing RTP flows
     Cosmux_out_handleOne per OSmux circuit_id, ie
     Crtcp_hdr
     Crtp_hdr
     Crtp_x_hdr
    html/jibuf_8c.html0000644000175000017500000003774514720474626013415 0ustar buildbuild libosmo-netif: src/jibuf.c File Reference
    libosmo-netif 1.5.1.12-e6c0
    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/folderopen.png0000644000175000017500000000112514720474626013660 0ustar buildbuild‰PNG  IHDRÚ}\ˆIDATxí]?oÓPÿ9iš4i°;ii“¶‰ZŠ‰‘‰ÀÀ7`bèÔÙ¬Øù,HìU'ô$*Tµ]‚T¡DPÚÄ6wÏ}‰;¡C; a¿ÓߟûÝïîž¼jAÀ­InSþ}€9H“ÓŽ|?íÁ÷ =_ÊÆŠ­†¥Àue*;¯YEäsYäæB¢Ÿ¿þÄ—£sÙ½½ÙŒ† É«›©ÀYÇq !GÇ¿v̇¹ÑØ®š °Œ‚ÔF¹}q¥b]÷7í·0)Úd›¾ÿð-èº}Pfä£ÖY{4™ÑÂ@}úæôñ2ÛüÔ—ñúåNŒI‚ÁǃcçÁº%£¬UŠ°I³mc±ô˜å¼ÔÆüÈ>é¸xþt9Æ$µý OæVE*õU´Ì‚ç#ž×ˆ•ïûr@l$øPÿrHaaÇ¥ ²›dZ®rè‘ãqI„o¼øT\Ž,tªj2FAxv-LŸp׌p TÄI/ \¥sfí½; jViTƒèú¤o^cpÅü¼ûû»Ïb]”€¢¤<†aþÕœ²“ßÓ˜y“£§9:Œîù+À³€ñà,E žf³6éNˆÄE£KU}Ü^;¶ØnZ¢uß­US4— ѬëbížN¶.Úk¦ØjTÄöº%µªâ i¯VÄÊÝò§™ Èù¸)ùÿG€™òºJ@T x”IEND®B`‚html/osmux_8h_source.html0000644000175000017500000010230514720474626015037 0ustar buildbuild libosmo-netif: include/osmocom/netif/osmux.h Source File
    libosmo-netif 1.5.1.12-e6c0
    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/jibuf_8c.js0000644000175000017500000000142114720474626013043 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/group__jibuf.js0000644000175000017500000000156514720474626014035 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/navtree.css0000644000175000017500000000407414720474626013201 0ustar buildbuild#nav-tree .children_ul { margin:0; padding:4px; } #nav-tree ul { list-style:none outside none; margin:0px; padding:0px; } #nav-tree li { white-space:nowrap; margin:0px; padding:0px; } #nav-tree .plus { margin:0px; } #nav-tree .selected { background-image: url('tab_a.png'); background-repeat:repeat-x; color: #fff; text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); } #nav-tree img { margin:0px; padding:0px; border:0px; vertical-align: middle; } #nav-tree a { text-decoration:none; padding:0px; margin:0px; outline:none; } #nav-tree .label { margin:0px; padding:0px; font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; } #nav-tree .label a { padding:2px; } #nav-tree .selected a { text-decoration:none; color:#fff; } #nav-tree .children_ul { margin:0px; padding:0px; } #nav-tree .item { margin:0px; padding:0px; } #nav-tree { padding: 0px 0px; background-color: #FAFAFF; font-size:14px; overflow:auto; } #doc-content { overflow:auto; display:block; padding:0px; margin:0px; -webkit-overflow-scrolling : touch; /* iOS 5+ */ } #side-nav { padding:0 6px 0 0; margin: 0px; display:block; position: absolute; left: 0px; width: 250px; overflow : hidden; } .ui-resizable .ui-resizable-handle { display:block; } .ui-resizable-e { background-image:url("splitbar.png"); background-size:100%; background-repeat:repeat-y; background-attachment: scroll; cursor:ew-resize; height:100%; right:0; top:0; width:6px; } .ui-resizable-handle { display:none; font-size:0.1px; position:absolute; z-index:1; } #nav-tree-contents { margin: 6px 0px 0px 0px; } #nav-tree { background-image:url('nav_h.png'); background-repeat:repeat-x; background-color: #F9FAFC; -webkit-overflow-scrolling : touch; /* iOS 5+ */ } #nav-sync { position:absolute; top:5px; right:24px; z-index:0; } #nav-sync img { opacity:0.3; } #nav-sync img:hover { opacity:0.9; } @media print { #nav-tree { display: none; } div.ui-resizable-handle { display: none; position: relative; } } html/tab_s.png0000644000175000017500000000027014720474626012613 0ustar buildbuild‰PNG  IHDR$ÇÇ[IDATxíÝ ‚@@Ñ£?Q…¤"š¢%¦I‘—Šf–6[´HÃäQƒ<Þâõþ]ždr Í’s?ˆO=Ñññw'ÌF‡Ž íðö-~rÃ[œèŠ­ì¬mƒÖ¬ƒݯнŠÕF)Yº% §`nÌ,9B ™’©!ÑŒ\ý<Å#üîî•IEND®B`‚html/rtp_8h_source.html0000644000175000017500000004322514720474626014476 0ustar buildbuild libosmo-netif: include/osmocom/netif/rtp.h Source File
    libosmo-netif 1.5.1.12-e6c0
    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/structipa__head__ext.html0000644000175000017500000001204514720474626016063 0ustar buildbuild libosmo-netif: ipa_head_ext Struct Reference
    libosmo-netif 1.5.1.12-e6c0
    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/sync_off.png0000644000175000017500000000152514720474626013335 0ustar buildbuild‰PNG  IHDRàw=øIDATxíÝKhTWÀñÿä1I&3™8M¦Iš™†I3Ú©b$cÌ I1V1±-(Tö±±Ð.* t!‚K[¥Ä¥ˆ„¨´f£`l(øl©"Y”¤6ÆgÌTú}·sgîܹ ±d{8?æ̹÷;çÜuíÚ`:!±F¬¢BäŠ?Å°Äm'yÊÅ>ÑlU¯½üý‰è_‹?€Œê ]€Y(ŠNñ±8fý1°Öqún-eâ¨øtºmâÈ Ó0}b›ù%·©µ×Œ®=Ÿ0´³?Š1sŸ‹0€¯8À‘;_ ‹W|%\ Zð— >舽ln¨p©.aÇ{ )t;Ú b nŸš¯›65°¢¡2çÅÔ?Žž>Oдàuönm¤¢Ì`×­Z¬WjC~>‘Ö¾0+á {{©fÝ×Mæ·æÅ•ìÙ¼˜` Ý›%uA6´½ÅÆö¨Á,]k¢ÄW¼™u±›]‹ˆ7§¯iòh€ ¶¶¬ÏÖu1 ló —Ҷ̺–:ÞÍ\ÄcãÏxøhR²Êè‡Qt$¿ß§¨ ª fdºü<4BÿÙ[•f¸d7=.Mé9/—éªÃëù/ÿO Üaàò}€,‘j?Ÿõ.5Úšm?œÿŸ®ŽXÿ2¬#¸d píæ(£?cÛú¼!½›a1¥Þ—ŽòØ©ܾ7dÔK:‚ùÒ‰ì)Ê3‚Ü™àÌà]€,±H€µ+køöäu<|`·LhC7¹ÔeÍ Ÿ×Ÿ˜tÜ‹ óH$^2%l.êaeÐäýE”ÌÉ|ÅÜìî‰Ýsä }¸ýDû^hzé~ðR›¦Ã¡¿]|#ü¯@×—Ö‡[k¹–<|š(Ç*€Ý¹dÇtMé:Ýñø«Ø,êÅû¢]”' øXÓ_nò¡Æ|Øý /c§fžâOIEND®B`‚html/rs232_8h_source.html0000644000175000017500000001735414720474626014550 0ustar buildbuild libosmo-netif: include/osmocom/netif/rs232.h Source File
    libosmo-netif 1.5.1.12-e6c0
    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/doc.png0000644000175000017500000000135214720474626012272 0ustar buildbuild‰PNG  IHDRÚ}\ˆ±IDATxíMOS[…Ÿžsúa?-XZ(PD4‚ AWbu`b 77wäHFÆCËÔÂÿà/`vo„ˆAPòq‹P @ ­ûÝè980 îà¤+»§Ýy×^ïZï9SW¹\83g‰3'°Nâçl¹¸_b¯p ïåûÆVÜÖ¡€Ÿ×"¬Ö†X€d]Ðà3“ÉÃÄÌ™xŸ ßMàœ[<çSPkvc—hÈ'…™˜^Åm™hØ7 `Û™¦ èÀåráq›‘œ¾!daeKŸþÆÕ˜:Ì*³_דâèi?I–eP*B7Ÿ¿åô!¹Ýgr6Ër6oKbëþãðôrI”ËTˆüªŒ¨xóö=›ù¢&‰(e+ßóÄkýÇ`ëÁÜb.“¸ÐW×w0¥°jÑzN™¬|©WEãµ¢a¯6[öX†AkÓù*/œ¨‰€ÉY­ ÿV’§–u²jÂ>1W *½·°PGŽzÿ¨/Eg{ ŸÇâaoŠÁVú:è¿™¤1$ôR§W,–ªà¨@ŠË56¾ÀÔÜ-¾,mê¸Î/æè¹– òr5¥T*S(Vf8ö9u’ Õ£w›ùóa=Í<{Ò¡UŒ÷r¯+ÉådDÏF$è°…£é¿`zþ»ÎúöN‘µÜ®0Q3£~_^Ëóâ¯N=ˆvpTà±LžT}ˆîkq†Òm<¼ÎÓ?Zh¿X£ï_þÝ¥[)ƒ `gêÃa_Ô*äÔ2`'=õ´Fÿ2EâÁPú ÷»›l=8‹Wv°%THqÉ¿<"¤ïG¾ÆxH{#ÆÖ«aÔJÕÞ‡—m‹„ çñKsÿàñVŠØ¡°·MâÒ^ TÁ– Ý›r¥ß½ømüÿ_™?ªWÄ°÷#uIEND®B`‚html/sctp_8h_source.html0000644000175000017500000003377714720474626014655 0ustar buildbuild libosmo-netif: include/osmocom/netif/sctp.h Source File
    libosmo-netif 1.5.1.12-e6c0
    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/dir_abe9b486a10ccc5afdf8abc29637e0c1.js0000644000175000017500000000022414720474626017137 0ustar buildbuildvar dir_abe9b486a10ccc5afdf8abc29637e0c1 = [ [ "netif", "dir_15662fdf1b5c37dde6a3ed82e5410e57.html", "dir_15662fdf1b5c37dde6a3ed82e5410e57" ] ];html/structosmux__in__handle.html0000644000175000017500000002141014720474626016621 0ustar buildbuild libosmo-netif: osmux_in_handle Struct Reference
    libosmo-netif 1.5.1.12-e6c0
    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/stream_8h.html0000644000175000017500000020355114720474626013604 0ustar buildbuild libosmo-netif: include/osmocom/netif/stream.h File Reference
    libosmo-netif 1.5.1.12-e6c0
    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_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)
     

    Enumerations

    enum  osmo_stream_srv_link_param { OSMO_STREAM_SRV_LINK_PAR_SCTP_SOCKOPT_AUTH_SUPPORTED , OSMO_STREAM_SRV_LINK_PAR_SCTP_SOCKOPT_ASCONF_SUPPORTED , OSMO_STREAM_SRV_LINK_PAR_SCTP_INIT_NUM_OSTREAMS , OSMO_STREAM_SRV_LINK_PAR_SCTP_INIT_MAX_INSTREAMS }
     
    enum  osmo_stream_cli_param {
      OSMO_STREAM_CLI_PAR_SCTP_SOCKOPT_AUTH_SUPPORTED , OSMO_STREAM_CLI_PAR_SCTP_SOCKOPT_ASCONF_SUPPORTED , OSMO_STREAM_CLI_PAR_SCTP_INIT_NUM_OSTREAMS , OSMO_STREAM_CLI_PAR_SCTP_INIT_MAX_INSTREAMS ,
      OSMO_STREAM_CLI_PAR_SCTP_INIT_MAX_ATTEMPTS , OSMO_STREAM_CLI_PAR_SCTP_INIT_TIMEOUT
    }
     

    Functions

    struct osmo_stream_srv_link * osmo_stream_srv_link_create (void *ctx)
     Create an Osmocom Stream Server Link. More...
     
    void osmo_stream_srv_link_destroy (struct osmo_stream_srv_link *link)
     Destroy the stream server link. More...
     
    void osmo_stream_srv_link_set_name (struct osmo_stream_srv_link *link, const char *name)
     Set a name on the srv_link object (used during logging). More...
     
    const char * osmo_stream_srv_link_get_name (const struct osmo_stream_srv_link *link)
     Retrieve name previously set on the srv_link object (see osmo_stream_srv_link_set_name()). More...
     
    void osmo_stream_srv_link_set_nodelay (struct osmo_stream_srv_link *link, bool nodelay)
     Set the NODELAY socket option to avoid Nagle-like behavior. More...
     
    void osmo_stream_srv_link_set_addr (struct osmo_stream_srv_link *link, const char *addr)
     Set the local address to which we bind. More...
     
    int osmo_stream_srv_link_set_addrs (struct osmo_stream_srv_link *link, const char **addr, size_t addrcnt)
     Set the local address set to which we bind. More...
     
    void osmo_stream_srv_link_set_port (struct osmo_stream_srv_link *link, uint16_t port)
     Set the local port number to which we bind. More...
     
    void osmo_stream_srv_link_set_proto (struct osmo_stream_srv_link *link, uint16_t proto)
     Set the protocol for the stream server link. More...
     
    int osmo_stream_srv_link_set_type (struct osmo_stream_srv_link *link, int type)
     Set the socket type for the stream server link. More...
     
    int osmo_stream_srv_link_set_domain (struct osmo_stream_srv_link *link, int domain)
     Set the socket type for the stream server link. More...
     
    void osmo_stream_srv_link_set_accept_cb (struct osmo_stream_srv_link *link, int(*accept_cb)(struct osmo_stream_srv_link *link, int fd))
     Set the accept() call-back of the stream server link. More...
     
    void osmo_stream_srv_link_set_data (struct osmo_stream_srv_link *link, void *data)
     Set application private data of the stream server link. More...
     
    void * osmo_stream_srv_link_get_data (struct osmo_stream_srv_link *link)
     Retrieve application private data of the stream server link. More...
     
    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...
     
    bool osmo_stream_srv_link_is_opened (const struct osmo_stream_srv_link *link)
     Check whether the stream server link is opened. More...
     
    int osmo_stream_srv_link_open (struct osmo_stream_srv_link *link)
     Open the stream server link. More...
     
    void osmo_stream_srv_link_close (struct osmo_stream_srv_link *link)
     Close the stream server link and unregister from select loop. More...
     
    int osmo_stream_srv_link_set_param (struct osmo_stream_srv_link *link, enum osmo_stream_srv_link_param par, void *val, size_t val_len)
     Set given parameter of stream_srv_link to given value. More...
     
    struct osmo_stream_srv * osmo_stream_srv_create (void *ctx, struct osmo_stream_srv_link *link, int fd, osmo_stream_srv_read_cb_t read_cb, osmo_stream_srv_closed_cb_t closed_cb, void *data)
     Create a legacy osmo_fd mode Stream Server inside the specified link. More...
     
    struct osmo_stream_srv * osmo_stream_srv_create2 (void *ctx, struct osmo_stream_srv_link *link, int fd, void *data)
     Create an osmo_iofd mode Stream Server inside the specified link. More...
     
    void osmo_stream_srv_set_name (struct osmo_stream_srv *conn, const char *name)
     Set a name on the srv object (used during logging). More...
     
    const char * osmo_stream_srv_get_name (const struct osmo_stream_srv *conn)
     Retrieve name previously set on the srv object (see osmo_stream_srv_set_name()). More...
     
    void osmo_stream_srv_set_read_cb (struct osmo_stream_srv *conn, osmo_stream_srv_read_cb2_t read_cb)
     Set the call-back function for incoming data on an osmo_io stream_srv. More...
     
    void osmo_stream_srv_set_closed_cb (struct osmo_stream_srv *conn, osmo_stream_srv_closed_cb_t closed_cb)
     Set the call-back function called when the stream server socket was closed. More...
     
    void * osmo_stream_srv_get_data (struct osmo_stream_srv *conn)
     Retrieve application private data of the stream server. More...
     
    struct osmo_stream_srv_link * osmo_stream_srv_get_master (struct osmo_stream_srv *conn)
     Retrieve the master (Link) from a Stream Server. More...
     
    const char * osmo_stream_srv_get_sockname (const struct osmo_stream_srv *conn)
     Retrieve the stream server socket description. More...
     
    struct osmo_fd * osmo_stream_srv_get_ofd (struct osmo_stream_srv *conn)
     Retrieve Osmocom File Descriptor of a stream server in osmo_fd mode. More...
     
    int osmo_stream_srv_get_fd (const struct osmo_stream_srv *conn)
     Retrieve File Descriptor of the stream server. More...
     
    struct osmo_io_fd * osmo_stream_srv_get_iofd (const struct osmo_stream_srv *srv)
     Retrieve osmo_io descriptor of the stream server socket. More...
     
    void osmo_stream_srv_destroy (struct osmo_stream_srv *conn)
     Destroy given Stream Server. More...
     
    void osmo_stream_srv_set_flush_and_destroy (struct osmo_stream_srv *conn)
     Prepare to send out all pending messages on the connection's Tx queue. More...
     
    void osmo_stream_srv_set_data (struct osmo_stream_srv *conn, void *data)
     Set application private data of the stream server. More...
     
    void osmo_stream_srv_set_segmentation_cb (struct osmo_stream_srv *conn, osmo_stream_srv_segmentation_cb_t segmentation_cb)
     Set the segmentation callback for target osmo_stream_srv structure. More...
     
    void osmo_stream_srv_send (struct osmo_stream_srv *conn, struct msgb *msg)
     Enqueue data to be sent via an Osmocom stream server. More...
     
    int osmo_stream_srv_recv (struct osmo_stream_srv *conn, struct msgb *msg)
     Receive data via an Osmocom stream server in osmo_fd mode. More...
     
    void osmo_stream_srv_clear_tx_queue (struct osmo_stream_srv *conn)
     
    void osmo_stream_cli_set_name (struct osmo_stream_cli *cli, const char *name)
     Set a name on the cli object (used during logging). More...
     
    const char * osmo_stream_cli_get_name (const struct osmo_stream_cli *cli)
     Retrieve name previously set on the cli object (see osmo_stream_cli_set_name()). More...
     
    void osmo_stream_cli_set_nodelay (struct osmo_stream_cli *cli, bool nodelay)
     Set the NODELAY socket option to avoid Nagle-like behavior. More...
     
    void osmo_stream_cli_set_addr (struct osmo_stream_cli *cli, const char *addr)
     Set the remote address to which we connect. More...
     
    int osmo_stream_cli_set_addrs (struct osmo_stream_cli *cli, const char **addr, size_t addrcnt)
     Set the remote address set to which we connect. More...
     
    void osmo_stream_cli_set_port (struct osmo_stream_cli *cli, uint16_t port)
     Set the remote port number to which we connect. More...
     
    int osmo_stream_cli_set_type (struct osmo_stream_cli *cli, int type)
     Set the socket type for the stream server link. More...
     
    int osmo_stream_cli_set_domain (struct osmo_stream_cli *cli, int domain)
     Set the socket type for the stream server link. More...
     
    void osmo_stream_cli_set_proto (struct osmo_stream_cli *cli, uint16_t proto)
     Set the protocol for the stream client socket. More...
     
    void osmo_stream_cli_set_local_addr (struct osmo_stream_cli *cli, const char *addr)
     Set the local address for the socket (to be bound to). More...
     
    int osmo_stream_cli_set_local_addrs (struct osmo_stream_cli *cli, const char **addr, size_t addrcnt)
     Set the local address set to which we bind. More...
     
    void osmo_stream_cli_set_local_port (struct osmo_stream_cli *cli, uint16_t port)
     Set the local port number for the socket (to be bound to). More...
     
    void osmo_stream_cli_set_data (struct osmo_stream_cli *cli, void *data)
     Set application private data of the stream client socket. More...
     
    void osmo_stream_cli_set_reconnect_timeout (struct osmo_stream_cli *cli, int timeout)
     Set the reconnect time of the stream client socket. More...
     
    void * osmo_stream_cli_get_data (struct osmo_stream_cli *cli)
     Retrieve application private data of the stream client socket. More...
     
    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_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/tabs.css0000644000175000017500000002334514720474626012470 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.js0000644000175000017500000000022614720474626016665 0ustar buildbuildvar dir_d44c64559bbebec7f509842c48db8b23 = [ [ "osmocom", "dir_abe9b486a10ccc5afdf8abc29637e0c1.html", "dir_abe9b486a10ccc5afdf8abc29637e0c1" ] ];html/structipa__head.html0000644000175000017500000001261714720474626015051 0ustar buildbuild libosmo-netif: ipa_head Struct Reference
    libosmo-netif 1.5.1.12-e6c0
    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/files_dup.js0000644000175000017500000000033714720474626013331 0ustar buildbuildvar files_dup = [ [ "include", "dir_d44c64559bbebec7f509842c48db8b23.html", "dir_d44c64559bbebec7f509842c48db8b23" ], [ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ] ];html/index.html0000644000175000017500000000740614720474626013022 0ustar buildbuild libosmo-netif: Main Page
    libosmo-netif 1.5.1.12-e6c0
    Osmocom network interface library
    libosmo-netif Documentation
    html/files.html0000644000175000017500000002442514720474626013015 0ustar buildbuild libosmo-netif: File List
    libosmo-netif 1.5.1.12-e6c0
    Osmocom network interface library
    File List
    Here is a list of all documented files with brief descriptions:
    [detail level 1234]
      include
      osmocom
      netif
     amr.h
     datagram.hOsmocom datagram socket helpers
     ipa.h
     ipa_unit.h
     jibuf.hOsmocom Jitter Buffer helpers
     osmux.hOsmocom multiplex protocol helpers
     prim.h
     rs232.h
     rtp.h
     sctp.h
     stream.h
     stream_private.h
      src
     datagram.cOsmocom datagram socket helpers
     jibuf.cOsmocom Jitter Buffer helpers
     osmux.cOsmocom multiplex protocol helpers
     osmux_input.cOsmocom multiplex protocol helpers (input)
     osmux_output.cOsmocom multiplex protocol helpers (output)
     stream_cli.c
     stream_srv.c
    html/osmux_8h.html0000644000175000017500000006344414720474626013471 0ustar buildbuild libosmo-netif: include/osmocom/netif/osmux.h File Reference
    libosmo-netif 1.5.1.12-e6c0
    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.