osmo-mgw (1.9.0) unstable; urgency=medium

  [ Harald Welte ]
  * TOS bits != DSCP
  * manual: don't define fig-bsc twice
  * switch from osmo_sock_set_dscp() to OSMO_SOCK_F_DSCP()
  * mgw: Add support for setting socket priority from VTY
  * manual: Include QoS chapter and add osmo-mgw specific example

  [ Keith ]
  * Add vty command 'show mgcp active'
  * Log some useful messages at ERROR/INFO instead of DEBUG

  [ Neels Hofmeyr ]
  * send DLCX only once
  * tweak termination DLCX log msg
  * add osmo_mgcpc_ep_ci_get_remote_rtp_info()
  * check_rtp_destin(): clarify log msg
  * mgcp_client_fsm delete: set mgcp_client as ctx, not NULL
  * mgcp_client_endpoint_fsm: on term, still let conns wait for DLCX OK
  * mgcp_client_fsm: add missing log_subsys
  * mgcp_client: add logging on received MGCP messages

  [ Philipp Maier ]
  * mgcp_network: fix implicit address loopback
  * mgcp_common, mgcp_udp_send: make parameter buf const
  * mgcp_network: refactor MGCP_DUMMY_LOAD
  * mgcp_client: drop nunnecessary else statement
  * mgcp_client: fix error handling in mgcp message generation
  * mgcp_protocol: fix loop that sends dummy RTP packets
  * mgw_main: fix loop that resets all endpoints
  * mgcp_trunk: drop ws line
  * mgcp_ratectr: drop ws line
  * mgcp_ratectr: fix sourcecode formatting
  * mgcp_trunk: add value string for trunk type.
  * mgcp_ratectr: refactor rate counter and set group name
  * mgcp_protocol: forward declare mgcp_endpoint
  * mgcp_endp: make wildcarded detection separate
  * mgcp_protocol: refactor request handler array
  * mgcp_trunk: use unsigned int instead of int as trunk_nr
  * mgcp_protocol: refactor MGCP request handling
  * mgcp_ratectr: add stats items to monitor trunk usage
  * mgcp_msg: add trunk parameter to mgcp_check_param for logging
  * mgcp_protocol: refactor function create_response_with_sdp
  * mgcp_protocol: add support for wildcarded DLCX
  * remove struct member wildcarded_req from struct mgcp_endpoint
  * mgcp_lient: remove unsubstantial FIXME note
  * mgcp_protocol: assert endp when it becomes mandatory
  * mgcp_trunk: check MGW domain name earlier
  * mgcp_ratectr: add stats items to monitor trunk usage
  * mgcp_client: fix typo Initalize -> Initialize
  * mgcp_protocol: get rid of policy_cb and change_cb
  * mgcp_ratectr: do not set talloc destructor on library allocated item
  * mgcp_client: allow to reset endpoints on startup
  * mgcp_client_vty: remove unnecessary checks
  * mgcp_client: do not print (null) when address is ANY
  * mgcp_client: refactor function init_socket
  * libosmo-mgcp-client: extend the mgcp_client for MGW pooling
  * mgcp_client_vty: add missing docstrings
  * mgcp_client_vty: add OSMO_ASSERT on pool parameter
  * mgcp_client_vty: fix docstrings for mgw-pool
  * mgcp_client_vty: cosmetic: doc string should terminated with \n
  * mgcp_client_vty: fixing docstring
  * mgcp_ratectr: remove unusued rate counters
  * mgcp_client: fix typo in doxygen comment
  * mgcp_client: add MGW name as logging context

  [ Pau Espin Pedrol ]
  * Use new stat item/ctr getter APIs
  * constify arg in addr_is_any()
  * Define patch_ssrc as bool type
  * constify some function arg pointers
  * mgcp_network.c: Reorder some functions in file
  * mgcp_send_dummy: Check RTP destination is available before attempt tx
  * mgw: rx CRCX: Avoid sending dummy rtp if remote address not provided
  * Fail rx MDCX sendrecv with invalid remote addr
  * Take into account Marker bit when patching RTP stream
  * Use DLMGCP instead of DLGLOBAL in log lines
  * Fix attribute parsing on gcc 11.1.0

  [ neels ]
  * Revert "mgcp_ratectr: add stats items to monitor trunk usage"

  [ Daniel Willmann ]
  * contrib/jenkins: Use ASAN for osmo-mgw

  [ Oliver Smith ]
  * mgcp_client_vty: add missing NO_STR
  * Revert "Turn some compiler warnings into errors"

  [ Eric ]
  * add vscode stuff to gitignore
  * configure.ac: fix maybe-uninitialized for clang
  * fix missing includes and forward declarations
  * rename do_retransmission
  * mgcp_sdp: fix potential leak
  * stats: make sanitizers happy
  * libosmo-mgcp: cleanup audio codex alloc
  * libosmo-mgcp: atomic rate counter group indexes
  * libosmo-mgcp: do not use the default msgb talloc context
  * globally lock the portrange when trying to grab a port to prep for multithreading
  * embed strings into structs
  * adjust talloc context
  * endp: do not cache cfg pointer
  * add modified .clang-format
  * rename strip_epname and find_specific_endpoint and make them available
  * fix mgcp_conn_free_all
  * fix up some docstrings that lost their dot

  [ Vadim Yanitskiy ]
  * libosmo-mgcp: use OSMO_STRLCPY_ARRAY in mgcp_codec_add()

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 16 Nov 2021 16:59:21 +0100

osmo-mgw (1.8.1) unstable; urgency=medium

  * attempt to fix RPM spec file after recent soversion bump

 -- Harald Welte <laforge@osmocom.org>  Wed, 24 Feb 2021 10:56:17 +0100

osmo-mgw (1.8.0) unstable; urgency=medium

  [ Harald Welte ]
  * Fix number of endpoints of default trunk
  * Add CTRL interface to osmo-mgw
  * Update per-trunk global packet/byte counters in real-time
  * remove accidential TODO-RELEASE entry
  * mgcp_protocol: Avoid code duplication between virtual + other trunks
  * osmo-mgw.spec.in: Use %config(noreplace) to retain current config file
  * mgcp_client_init(): consider "talloc returns NULL" case
  * mgcp_client_pending_add(): Consider "talloc returns NULL" case
  * libosmo-mgcp-client: fix memleak in case if no response is received
  * debian/control + SPEC: Add missing build dependency to libosmo-abis
  * osmo-mgw.spec.in: Fix dependency to libosmoabis
  * osmo-mgw.spec.in: Add missing dependency to libosmotrau
  * Add example osmo-mgw configuration file for Abis/E1
  * use osmo_fd_setup() whenever applicable

  [ Neels Hofmeyr ]
  * fix vty dump_trunk: start from zero, do not omit first CONN
  * allow larger MGCP client wqueue: 10 -> 1024
  * add osmo-mgw --vty-ref-xml: dump VTY ref XML to stdout
  * manuals: generate vty reference xml at build time
  * refactor: use msgb to receive, pass and send RTP packets
  * change timer T2427001 to X2427

  [ Philipp Maier ]
  * doc: do not bind osmo-mgw to random ip-address
  * cosmetic: remove excess newlines
  * mgcp: remove unused callback pointer
  * mgcp: find better locations for LOGPCONN and LOGPENDP
  * vty: fix unreachable code (error msg on trunk alloc fail)
  * mgcp_vty: fix indentation
  * osmo-mgw: rename struct mgcp_trunk_config and symbol tcfg
  * mgcp_vty: fix indentation in VTY config write
  * osmo-mgw: refactor endpoint and trunk handling
  * mgcp_trunk: remove audio_name and audio_payload
  * ratectr: move rate counter definitions into mgcp_ratectr.h
  * cosmetic: fix doxygen
  * cosmetic: fix doxygen
  * cosmetic: fix doxygen for mgcp_cleanup_rtp_bridge_cb()
  * trunk: get rid of virt_trunk pointer
  * cosmetic: remove excess space
  * endp: move endpoint name generation into mgcp_endp.c
  * endp: add name generator function for E1 endpoints
  * mgcp_client: add docstring for mgcp_client_rtpbridge_wildcard()
  * mgcp_trunk: fix docstring for mgcp_trunk_alloc()
  * mgcp_osmux: remove unused define constants
  * mgcp_trunk: move enum mgcp_trunk_type to mgcp_trunk.h
  * mgcp_trunk: use enum type for trunk type variable
  * trunk: parse E1 trunk number
  * endp: add typeset for e1-endpoints
  * mgcp_conn: move struct mgcp_conn mgcp_conn.h
  * mgcp_internal: remove forward declaration struct mgcp_endpoint_type
  * endp: add E1 endpoint interlocking
  * endp: require domain name also for E1 endpoints
  * mgcp_trunk: pick trunk by number and type
  * mgcp_client: add function to generate e1-endpoint names
  * mgcp_endp: use define constant to define max number of E1 subslots
  * mgcp_endp.c: cosmetic: fix sourcecode formatting
  * mgcp_trunk: remove double check
  * mgcp_test: do not access endpoint array elements directly
  * mgcp_vty: fix endpoint number configuration
  * mgcp_test: remove trunk2 from unit-test
  * mgcp_trunk: use talloc_zero_array instead of _talloc_zero_array
  * mgcp_protocol: remove unused variable
  * mgcp_e1: finish E1 support, add E1 support from libosmoabis
  * get rid of mgcp_internal.h
  * mgcp_ratectr: fix comments in header file
  * mgcp_e1: use return value of e1inp_line_update()
  * mgcp_protocol: log when endpoint is unavailable
  * cosmetic: add missing new-line
  * mgcp_trunk: drop "trunk 0" limitation
  * mgcp_e1: make E1 ts initalization more debugable
  * mgcp_e1: remove unused struct member trunk->e1.line
  * mgcp_endp: use NUM_E1_TS from e1_input.h
  * mgcp_trunk: increase default number of virtual endpoints
  * cosmetic: mgcp_client_fsm: change error message.
  * mgcp_vty: remove remains of loopback functionality
  * mgcp_vty: deprecate bind early command
  * mgcp_e1: do not expose function  mgcp_e1_init()
  * mgcp_vty: add user attributes to configuration commands
  * overview: update section limitations.
  * overview: fix graph "OsmoMGW used with OsmoBSC"
  * overview: fix graph "OsmoMGW used with OsmoMSC"
  * overview: add graph to show E1 integration
  * configuration: remove hint towards trunk 0 limit
  * configuration: drop note about lackin E1 support
  * configuration: add note that changes to trunks need a restart
  * mgcp_vty: fix config write for trunk 0
  * mgcp_vty: add missing VTY commands for E1 trunks
  * mgcp_trunk: get rid of magic numbers for E1 slots
  * configuration: add section about E1 trunks
  * usermanual: add chapter about mgcp endpoints
  * mgcp_client: get rid of magic numbers for E1 slots

  [ Eric ]
  * tests: dlopen does not imply availability of dlsym..
  * configure.ac: fix libtool issue with clang and sanitizer

  [ Alexander Chemeris ]
  * vty: Prepend VTY output of counters for better visual separation.
  * counters: Implement more useful counters.
  * mgcp_network: Fix a typo in the comment bahviour -> behaviour
  * rtp_bridge: Demote a chatty ERROR log message to DEBUG level.

  [ Pau Espin Pedrol ]
  * Use OSMO_FD_* instead of deprecated BSC_FD_*
  * Support setting rt-prio and cpu-affinity mask through VTY
  * cosmetic: Rename main talloc ctx
  * mgcp-client: Support IPv6 in osmo_mgcpc_ep_ci_get_crcx_info_to_sockaddr() implementation
  * mgcp-client: Fix trailing whitespace in mgcp_client_fsm.h
  * mgcp_client: Use INET6_ADDRSTRLEN to store addresses in str format
  * mgcp_client: Allow submitting and parsing IPv6 addr in SDP
  * mgcp_client: Allow setting IPv6 addresses
  * mgcp_client: Make MGCP_CLIENT_LOCAL_ADDR_DEFAULT IPv6 compatible
  * mgcp_client: Support validating IPv6 addresses in CRCX and MDCX commands
  * mgcp_client: Deprecate unused IPv4-only API
  * mgcp_client: copy back Connection Information from MDCX ACK
  * mgw: Fix mgcp_rtp_end field description comment
  * mgw: Initial IPv6 support
  * mgw: Introduce VTY cmd 'rtp bind-ip-v6' command
  * mgw: Find and store RTP conn local_addr once during CRCX handling
  * mgw: Announce and rebind new local address if change required during MDCX
  * mgw: osmux: Avoid sending packets on recvonly connection
  * mgw: Release endpoint after last conn times out
  * mgw: osmux: Fix conn watchdog timeout not updated
  * mgw: Don't be case-sensitive when parsing X-Osmo-IGN param
  * cosmetic: Fix typo in comment
  * mgw: Avoid logging notice message each time we receive nt param in LCO
  * mgw: Fix return value documentation for API mgcp_verify_call_id
  * cosmetic: Fix typo in comment
  * contrib/jenkins: Enable parallel make in make distcheck
  * .gitignore: Ignore new autofoo tmp files
  * tests: Replace deprecated API log_set_print_filename

  [ Oliver Smith ]
  * contrib: import RPM spec
  * contrib: integrate RPM spec
  * Makefile.am: EXTRA_DIST: debian, contrib/*.spec.in
  * contrib/jenkins: don't build osmo-gsm-manuals
  * configure.ac: set -std=gnu11

  [ Vadim Yanitskiy ]
  * libosmo-mgcp-client: fix use-after-free in mgcp_client_tx()
  * libosmo-mgcp-client: fix use-after-free in mgcp_msg_gen()
  * libosmo-mgcp: fix unsigned compared against 0 in mgcp_trunk_by_name()
  * libosmo-mgcp: fix unused extra argument to printf() in add_fmtp()
  * libosmo-mgcp: always check result of msgb_printf() in add_fmtp()
  * libosmo-mgcp-client: mgcp_client_tx(): return rc on error
  * debian/control: change maintainer to the Osmocom team / mailing list
  * vty: use install_lib_element() and install_lib_element_ve()
  * main: add --vty-ref-mode, use vty_dump_xml_ref_mode()
  * fixup mgcp_trunk: increase default number of virtual endpoints

  [ Alexander Couzens ]
  * configure.ac: require libosmoabis + libosmotrau >= 1.0.0

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 23 Feb 2021 18:28:45 +0100

osmo-mgw (1.7.0) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * rename codecs_cmp() to codecs_same()
  * mgcp_codec: constify 'param' arg
  * fix crashes: don't assert on incoming RTP packet size
  * mgcp_send(): stop looping on conversion error
  * mgcp_codec: split codec_free() off of codec_init()
  * fix memleak: actually free strings in mgcp_codec_reset_all()
  * mgcp_test: extend / rewrite test_mgcp_codec_pt_translate()
  * test_mgcp_codec_pt_translate(): more tests
  * differentiate AMR octet-aligned=0 vs =1
  * ptmap: implicitly match  '/8000' and '/8000/1'
  * mgcp_codec: codec_set(): log about all possible errors
  * mgcp_codec_add: fix audio_name size check
  * explicitly free codecs in mgcp_rtp_conn_cleanup()
  * tweak mgcp_parse_audio_ptime_rtpmap()
  * SDP: store all ptmap entries
  * mgcp_client_fsm cleanup: Do not assert on DLCX failure
  * clear pending requests on MGCP failure
  * client: endp fsm: add notify struct, prep for cancel-notify
  * client: endp fsm: clear ci[] before dispatching DLCX success
  * client: endp fsm: allow cancelling a notify event
  * client: endp fsm: add osmo_mgcpc_ep_ci_ep()
  * accept MGCP without SDP
  * fix use-after-free: require new fsm deferred dealloc, check for term

  [ Pau Espin Pedrol ]
  * mgcp_test: Correctly release all endpoints allocated
  * mgw: Allocate mgcp_conn instance under tcfg->endpoints

  [ Harald Welte ]
  * manual: Fix copy+paste error
  * mgcp_client: Check for osmo_fsm_register() error return value
  * Move fsm_mgcp_client regstration to __attribute__((contructor))
  * exit(2) on unsupported positional arguments on command line

  [ Oliver Smith ]
  * osmoappdesc.py: switch to python 3

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Fri, 03 Jan 2020 13:35:09 +0100

osmo-mgw (1.6.0) unstable; urgency=medium

  [ Oliver Smith ]
  * Cosmetic: fix spaces/tabs in mgcp_requests[]
  * Inactive connection cleanup (disabled by default)
  * debian: create -doc subpackage with pdf manuals
  * vty: allow 0 as conn-timeout to disable it
  * vty: update desc of conn-timeout
  * manuals: update VTY documentation
  * "make dist" fix for: no rule to make mgcp_common.h
  * contrib/jenkins.sh: run "make maintainer-clean"

  [ Philipp Maier ]
  * Add option to GSM HR frames to RFC5593 representation
  * mgcp_sdp: cosmetic: correct typo in comment
  * mgco_client: cosmetic: remove excess whitespace
  * mgcp_sdp: mgcp_sdp.c does not include own header file
  * mgcp_sdp: untangle parsing of a= parameters
  * mgcp_network: use mgcp_rtp_codec in downlink format callback
  * AMR: Add function to convert between bw-effient and octet aligned mode

  [ Neels Hofmeyr ]
  * log: don't spam with "can not patch PT" messages
  * mgcp client: allow setting conn mode for CRCX and MDCX
  * make codec_table public as osmo_mgcpc_codec_names
  * move MGW endpoint FSM from osmo-bsc to here
  * fix: multiple initial CRCX
  * constify map_codec_to_pt() ptmap arg

  [ Pau Espin Pedrol ]
  * mgcp-client: whitespace cleanup in mgcp_client.c
  * mgcp-client: Sanitize implementation of mgcp_client_rtpbridge_wildcard
  * libosmo-mgcp: Use trunk type during endpoint allocation
  * cosmetic: Fix typos in comment
  * cosmetic: tests: mgcp_client_test: clean trailing whitespace
  * mgcp_msg: Log faulty line on Osmux parsing error
  * cosmetic: handle_modify_con: Fix indentation level
  * Introduce log fmt helpers LOGPENDP and LOGPCONN
  * create_response_with_sdp: Fix inclusion of X-Osmux
  * osmux: Cleanup of CID alloc pool APIs
  * mgcp_osmux.c: osmux_enable_endpoint: Fix incorrect return check
  * osmux: Log osmux socket during osmux_init
  * mgcp-cli: Change osmo_mgcpc_ep_fsm name to avoid collision with old osmo-bsc
  * osmux: Document func and return different rc upon osmux init failure
  * osmux: Fix reception of legacy dummy payloads
  * osmux: Use LOGPCONN in several log calls
  * cosmetic: mgcp_udp_send: Document port param is in network byte order
  * cosmetic: osmux: Document network byte order in port variable
  * vty: Allow enabling Osmux
  * osmux: Allocate CID during CRCX
  * osmux: Introduce mgcp_conn_rtp_is_osmux() helper
  * osmux: Mark conn_rtp->type as osmux during CRCX
  * mgcp-cli: Allow submitting X-Osmux on CRCX request
  * mgcp-cli: Parse X-Osmux on CRCX response
  * osmux: Handle Osmux MGCP extension in MDCX messages
  * mgcp-cli: Allow submitting X-Osmux on MDCX request
  * mgcp-cli: Parse X-Osmux on MDCX response
  * osmux: Drop unneeded OSMUX_STATE_NEGOTIATING
  * mgcp-cli: endpoint_fsm: Add API to retrieve Osmux CID from MGW
  * osmux: Provide correct local port during mgcp resp
  * osmux: Use remote port to send osmux frames
  * osmux: Improve logging around osmux enabling events
  * osmux: Delay osmux enable of conn until remote addr is configured by MDCX
  * osmux: Redo read/write osmux glue code to have data routed correctly
  * mgw, mgcp-li: Handle X-Osmux param name as case insensitive
  * osmux: Use DUMMY ft msg as per Osmux spec
  * osmux: Fix loopback for Osmux connections
  * osmux: Fix CID release for non-enabled connections
  * osmux: Fix hardcoded rtp payload_type 98 in osmux conn
  * mgcp-cli: Validate osmux cid value during mgcp_msg_gen
  * mgw: Support uppercase LCO options
  * mgw: Support lowercase header parameters
  * mgcp-cli: Support lowercase header parameters
  * mgw: Support receiving uppercase connection mode
  * mgw: Support receiving lowercase LCO codec
  * mgw: Make check of duplicated LCO fields case insensitive
  * mgw: Allow receiving lowercase MGCP header keyword
  * mgw: Allow receiving lowercase X-Osmo-Ign Callid field
  * mgw: Allow receiving uppercase noanswer keyword
  * doc: X-Osmo-IGN: small formatting and typo fixes
  * doc: Add Osmux documentation to OsmoMGW User Manual
  * Catch unsigned integer MGCP parsing errors with strtoul
  * Fix return variable of strtoul()
  * Remove undefined param passed to {logging,osmo_stats}_vty_add_cmds
  * configure.ac: Require libosmo-netif 0.6.0

  [ Alexander Couzens ]
  * mgcp_internal: LOGPENDP: ensure *endp is not NULL

  [ Harald Welte ]
  * handle NULL return of rate_ctr_group_alloc()
  * update .gitignore
  * mgcp_sdp: Don't check if an unsigned int is below 0

  [ Vadim Yanitskiy ]
  * configure.ac: drop useless check for -fvisibility=hidden

  [ Daniel Willmann ]
  * manuals: Add script to regenerate vty/counter documentation
  * manuals: Update vty/counter documentation

  [ Hoernchen ]
  * turn -Werror=null-dereference into a warning

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Wed, 07 Aug 2019 16:52:58 +0200

osmo-mgw (1.5.0) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * gitignore: Filter *.pc
  * configure: Find correct libgsm's gsm.h header
  * vty: Fix typo writing bts-jitter-buffer-delay-{min,max}
  * Remove libosmo-legacy-mgcp and osmo-bsc-mgcp
  * debian: Remove dangling symlink to osmo-bsc-mgcp.service
  * Install systemd services with autotools
  * Install sample cfg file to /etc/osmocom
  * mgcp: Fix osmux_cid_bitmap static array size calculation
  * mgcp_osmux: Use define to calculate rtp_ssrc_winlen
  * osmux: Avoid initing output without enabling osmux
  * mgcp: Log endpoint nr consistently as hex
  * osmux_send_dummy: Avoid logging incorrectly and sending if osmux not enabled
  * osmux: Don't process regular osmux frames if disabled by cfg
  * osmux: Move parse_cid of legacy dummy frames to own function
  * osmux: Make func handling dummy frames independent of endp type
  * osmux: allow enabling osmux only on correct activating state
  * osmux: Improve checks around activating and using enabled osmux
  * osmux.h: Document enum osmux_state
  * osmux: Avoid processing further frames if conn not found

  [ Philipp Maier ]
  * mgcp_client_fsm: allow ptmap in mgcp_client_fsm as well
  * mgcp_network: translate payload type numbers in RTP packets
  * mgcp_client: use IETF source port as for MGCP
  * mgcp_client: increment local port number when port is in use
  * mgcp_test: release endpoints after use
  * network: do not patch PT of RTCP packets
  * network: check packets before further processing
  * Cosmetic: remove misplaced line break
  * mgcp_sdp: restructure mgcp_write_response_sdp() (rtpmap)
  * mgcp_sdp: restructure mgcp_write_response_sdp() (audio)
  * mgcp_client: check local port only once
  * mgcp_client_fsm: switch to MGCP_CONN_RECV_SEND in add_audio()
  * mgcp_protocol: increase buffer space for codec name in LCO
  * osmo-mgw: Add vty reference manual

  [ Neels Hofmeyr ]
  * fix handling of "Wrong domain name" error
  * interpret domain '*' as 'allow any domain'
  * cosmetic: log: fix "CallIDs does not match"
  * fix 3G hack: allow any IP for loopback and 0.0.0.0
  * cosmetic: drop code dup in mgcp_client_fsm.c CRCX
  * add X-Osmo-IGN MGCP header to ignore CallID
  * X-Osmo-IGN: rather parse items by token, not char
  * mgcp_test: fix log of conn_id presence
  * mgcp_test: fix get_conn_id_from_response() CI length
  * mgcp_client_test: cosmetically re-arrange reply_to() args
  * mgcp_client_test: use "\r\n\r\n" instead of "\n\n"
  * mgcp_client_test: also verify received conn_id
  * mgcp_client_test: test long conn_id
  * mgcp_client: error on too long conn id
  * mgcp_common: rename to MGCP_CONN_ID_MAXLEN
  * doc: fix mgcp_verify_ci() return val doc
  * mgcp_verify_ci(): return meaningful error codes
  * fix mgcp_verify_ci(): off-by-one in max len check
  * generate shorter 'I:' conn IDs
  * mgcp_conn_get(): compare conn Id ('I:') case insensitively
  * mgcp_conn_get(): match conn Id ('I:') despite leading zeros
  * cosmetic: mgcp_test: fix get_conn_id_from_response()
  * comment: indicate struct type for mgcp_endpoint.conns
  * log: avoid logging early media as error
  * fix osmo-mgw -s; fixes osmo-mgw.service using -s
  * Importing history from osmo-gsm-manuals.git
  * OsmoMGW: update VTY reference
  * OsmoMGW: document the 'X-Osmo-IGN' MGCP extension
  * mgw: update vty reference
  * drop/replace very weird logging in mgcp_client.c
  * check_rtp: on IP:port errors, log the IP and port
  * osmo-mgw: err-log: include expected domain name
  * mgcp_client_vty: fix missing talloc_free
  * mgcp_client: drop a bunch of dead code
  * mgcp_client: logging tweaks
  * mgcp_client: make domain part of endpoint configurable
  * mgcp_client: tweak some log levels INFO -> {DEBUG,ERROR}

  [ Stefan Sperling ]
  * add VTY commands which show specific mgcp endpoints
  * add MGCP CRCX command statistics to osmo-mgw
  * show RTP TX/RX stats in 'mgcp show stats' output
  * use local variable for rate counters in handle_create_con()
  * add more mgcp crxc error counters
  * add MDCX command statistics to osmo-mgw
  * add aggregated rtp connection stats to osmo-mgw
  * add DLCX command statistics to osmo-mgw

  [ Harald Welte ]
  * debian/rules: Don't overwrite .tarball-version
  * check_rtp_origin(): Don't memcmp sockadd_in and in_addr
  * check_rtp_origin(): Avoid using memcmp for comparing integer types
  * vty-ref: Update URI of docbook 5.0 schema

  [ Daniel Willmann ]
  * mgw: Add new VTY reference
  * Add initial OsmoMGW manual

  [ Oliver Smith ]
  * build manuals moved here from osmo-gsm-manuals.git
  * jenkins.sh: remove leftover MGCP env variable
  * Fix DISTCHECK_CONFIGURE_FLAGS override
  * contrib/jenkins.sh: build and publish manuals
  * contrib: fix makedistcheck with disabled systemd

 -- Harald Welte <laforge@gnumonks.org>  Sun, 20 Jan 2019 15:02:18 +0100

osmo-mgw (1.4.0) unstable; urgency=medium

  [ Philipp Maier ]
  * network: independently initalize state->out_stream
  * stats: use libosmocore rate counter for in/out_stream.err_ts_counter
  * mgcp_sdp: correct apidoc of mgcp_parse_sdp_data
  * vty: clean up rtp port-range command
  * sdp: remove unused alt_codec field from struct mgcp_rtp_end
  * sdp: remove circular inclusion
  * protocol: Try whole port range on port allocation
  * client: do not start connections in loopback mode
  * mgcp_network: do not log destination invalid ip/port as error
  * cosmetic: fix log output
  * conn: call talloc_free before setting the pointer to NULL
  * protocol: do not change LCO, when no LCO are present
  * protocol: reject illegal lco options
  * cosmetic: fix typo
  * mgw: clean up codec negotiation (sdp)
  * client: add features to generate and parse codec information
  * mgcp_internal: remove unused struct member
  * stats: replace packet statistic counters with libosmocore rate counters
  * stat+vty: fix printing of rate counter values
  * protocol: prevent unnecessary null pointer deref

  [ Pau Espin Pedrol ]
  * legacy-mgcp: Add jitter buffer on the uplink receiver
  * legacy-mgcp: switch to new osmux output APIs
  * mgcp: mgcp_osmux: use conn_bts when forwarding pkts from bsc_nat
  * mgcp: switch to new osmux output APIs
  * debian: Package installed example doc files
  * gitignore: Add m4 scripts from m4 subdir

  [ Neels Hofmeyr ]
  * api doc: fix parameter name for mgcp_conn_create()
  * mgcp-client: add mgcp_conn_get_ci()
  * mgcp_client_fsm: improve error logging
  * cosmetic: fix doxygen comment markers
  * cosmetic: mgcp_network.c: merge one LOGPC to its preceding LOGP
  * IuUP hack: make RTP patching less general

  [ Harald Welte ]
  * cosmetic: fix typo in log message: 'abrupt' instead of 'aprupt'

  [ Daniel Willmann ]
  * git-version-gen: Don't check for .git directory

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Fri, 27 Jul 2018 19:05:22 +0200

osmo-mgw (1.3.0) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * contrib: Add osmo-mgw systemd service
  * legacy: mgcp_protocol: Don't print osmux stats if it is off
  * mgcp_stat: Don't print osmux stats if it is off

  [ Neels Hofmeyr ]
  * fix segfault: DLCX for unknown endpoint: dont try to log NULL endpoint
  * MGCP endpoints: parse as decimal, not hex
  * add --enable-sanitize config option
  * legacy_mgcp: mgcp_test: sanitize: free msgb_ctx
  * mgcp_test: test_packet_error_detection: sanitize: free all conns
  * mgcp_test: test_no_cycle: sanitize: free endp
  * mgcp_test: sanitize: free msgb_ctx
  * mgcp_client: don't configure "bts base"
  * Revert "mgcp_client: don't configure "bts base"" until osmo-msc is ready
  * mgcp_client: add transaction cleanup
  * mgcp_client_test makefile: add update_exp target
  * cosmetic: mgcp_network: typo in log
  * osmo-mgw: Add talloc context introspection via VTY
  * mgcp_client: show failure by MGCP SDP section parsing test
  * mgcp_client: cosmetic: clean up SDP params parsing
  * mgcp_client: detect SDP section-start parsing errors
  * compiler warning: ignore deprecated in mgcp_client_test.c
  * configure: add --enable-werror
  * jenkins.sh: add --enable-werror to configure flags
  * cosmetic: mgcp, legacy_mgcp: drop unused vty.h definitions
  * use osmo_init_logging2() with proper talloc ctx

  [ Philipp Maier ]
  * osmux: fix nullpointer dereference
  * cosmetic: guard dead osmux vty code with ifdef
  * cosmetic: remove prefix "net" from rtp related vty commands
  * doc: update sample config file
  * cosmetic: use correct VTY port number constant
  * vty: simplify endpoint allocation
  * vty: do not change number_endpoints at runtime
  * MGCP: Connection Identifiers are hex strings
  * libosmo-mgcp: Connection Identifiers are allocated by MGW, not CA
  * client: use osmo_strlcpy instead of strncpy
  * cosmetic: fix sourcecode formatting
  * cosmetic: clearly mark endpoint numbers as hex
  * client: use string as connection identifier
  * conn: remove assertions
  * mgcp_test: fix wrong strcmp() parameters
  * mgcp_test: fix nullpointer dereference
  * mgcp_test: add returncode check
  * mgcp_test: fix possible double free
  * mcgp_client: mgcp_msg_gen(): add checks to verify params
  * network: use originating RTP packet address for loopback
  * client: mgcp_response_parse_params: check rtp port
  * mgcp: allow endpoints beginning from zero
  * client/common: move constant MGCP_ENDPOINT_MAXLEN
  * mgcp: make domain name configurable
  * cosmetic: protocol: remove unnecessary nul termination
  * client: do not insist on \n\n when parsing MGCP messages
  * main: display mgcp ip/port
  * client: make callid in MDCX mandatory
  * client: add missing mandatory SDP fields
  * mgcp: permit wildcarded endpoint assignment (CRCX)
  * mgcp: add prefix to virtual trunk
  * client: eliminate destructive parameter parsing
  * client: eliminate destructive head parsing
  * cosmetic: client: add doxygen comments
  * protocol: fix problem with line break and OSMUX
  * protocol: fix missing carriage return
  * client: fix sdp parameter ordering
  * protocol: check the packetization in local cx options
  * cosmetic: remove spaces from pointer symbol
  * client: Do not accept endpoint ids with wildcards in responses
  * client: do not accept endpoint ids without @ character in responses
  * client: prohibit endpoint ids without @ character
  * protocol: on wildcarded CRCX return endpoint number as hex
  * msg: fix response code on exhausted endp resources
  * cosmetic: move mgcp_release_endp() to mgcp_ep.c
  * client: use heap to store mgcp_response
  * ep: move endpoint struct and define to mgcp_ep.h
  * cosmetic: rename mgcp_release_endp to mgcp_endp_release
  * cosmetic: rename mgcp_ep.c/h to mgcp_endp.c/h
  * protocol: reject DLCX/CRCX/MDCX on unsupported parameters
  * protocol: exit cleanly when local cx options check fails
  * cosmetic: Add missing \n on log line
  * protocol: check requested connection mode
  * protocol: fix tagging of wildcarded requests
  * protocol: prohibit wildcarded requests for MDCX and DLCX
  * mgcp: fix use-after-free and add callback for endpoint cleanup
  * client: add an optional FSM interface
  * mgcp_client_fsm: Add FSM event names
  * cosmetic: mgcp_client_fsm: rename enums
  * cosmetic: rename function .._conn_reset() to .._conn_init()
  * mgcp_conn: do not touch u.rtp in mgcp_conn_alloc()
  * cosmetic: rename .._codec_reset() to .._codec_init()
  * mgcp_conn: add function mgcp_rtp_conn_cleanup()
  * stats: use libosmocore rate counter for in/out_stream.err_ts_counter

  [ Alexander Couzens ]
  * debian/control: correct library dependency of osmo-mgw against libosmo-mgcp1
  * debian: include systemd service osmo-mgw.service
  * Revert "stats: use libosmocore rate counter for in/out_stream.err_ts_counter"

  [ Harald Welte ]
  * cosmetic: fix whitespaces; we use tabs for indentation
  * Fix possible buffer overflow in mgcp_conn_dump()
  * osmo-mgw: Update copyright statement
  * osmo-mgw: Config file is osmo-mgw.cfg, and not mgcp.cfg
  * osmo-mgw: Fix copyright notice
  * strct mgcp_rtp_state: Group + document struct members related to patching
  * mgcp_rtp_state: grup 'stats' members into sub-structure
  * mgcp_rtp_end: Group statistics members into 'stats' sub-struct
  * libosmo-mgcp: Cosmetic spelling fixes in comments
  * mgcp_msg: We must parse endpoint numbers as hex, not decimal!
  * mgcp_internal.h: document more struct members with comments
  * centralize handling of common errors like "endpoint not found"
  * Return proper MGCP Error codes, as per spec
  * osmo-mgw: Use libosmocore socket abstraction
  * osmo-bsc_mgcp: Add LIBOSMONETIF_{CFLAGS,LIBS}
  * libosmo-mgcp-client is GPLv2+, not AGPLv3+
  * Turn libosmo-mgcp into local, non-installed library

  [ Stefan Sperling ]
  * enable osmo_fsm vty commands in libosmo-mgcp-client vty

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Thu, 03 May 2018 17:40:35 +0200

osmo-mgw (1.2.0) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * jenkins: use osmo-clean-workspace.sh before and after build
  * vty: skip installing cmds now always installed by default
  * mgcp-client vty: use name 'mgw' instead of 'mgcpgw'
  * mgcp client: vty: tweak doc strings

  [ Philipp Maier ]
  * sdp: refactoring sdp parser/generator
  * cosmetic: rename bts_codec to codec_str
  * cosmetic: fix coding style for mgcp_parse_sdp_data()
  * cosmetic: fix commenting style
  * cosmetic: correct whitespaces
  * client: fix stderror logging in unit-test
  * client: add unified function to generate MGCP messages
  * client: add ip address parsing to the client
  * protocol: allow wildcarded DLCX
  * mgcp: remove port/timeslot calculator functions from  mgcp.h
  * network: add separate log category
  * cosmetic: make dummy packet handling more explicit
  * network: autdetect rtp bind ip-address
  * network: fix rtp packet length
  * network: remove unused return code

  [ Pau Espin Pedrol ]
  * mgcp_client_vty.c: Fix VTY compatibility with 'mgcpgw bts-base'

 -- Harald Welte <laforge@gnumonks.org>  Fri, 10 Nov 2017 11:10:23 +0900

osmo-mgw (1.1.0) unstable; urgency=medium

  * New upstream release

 -- Harald Welte <lafore@gnumonks.org>  Sat, 28 Oct 2017 12:48:41 +0200

osmo-mgw (1.0.2) unstable; urgency=low

  * First release after major rename.

 -- Max Suraev <msuraev@sysmocom.de>  Thu, 14 Sep 2017 18:41:05 +0200


osmo-mgw (0.1.0) unstable; urgency=low

  * Initial release.

 -- Alexander Couzens <lynxis@fe80.eu>  Tue, 08 Aug 2017 01:12:53 +0000
