osmo-mgw (1.10.0) unstable; urgency=medium

  [ Eric ]
  * adjust mgcp response context
  * rework message handling
  * add a lock-free bounded spsc interthread queue
  * clang-format: remove foreach macros
  * fix mgcp_conn_free_all ubsan complaints

  [ Philipp Maier ]
  * configuration: point out difference between trunk-nr and e1 line nr
  * mgcp_client: add new codec IUFP as VND.3GPP.IUFP
  * mgcp_codec: do not differentiate between oa and bwe when comparing codec
  * mgcp_network: do not try to convert RTCP packets
  * mgcp_network: fix typo RTPC -> RTCP

  [ Oliver Smith ]
  * treewide: remove FSF address

  [ Pau Espin Pedrol ]
  * mgcp_network.c: Set proper CRC Header for ACK Initialization
  * cosmetic: Rename variable payload=>payload_type
  * mgcp_network.c: Fix byte alignment of CRC Header for ACK Initialization
  * Define mgcp_rtp_end.output_enabled as bool
  * cosmetic: mgcp_codec.c: Fix typo in comment
  * Drop unneeded ax_check_compile_flag.m4
  * Make function amr_is_octet_aligned publicly available
  * Initial IuUP support using proper FSMs
  * IuUP: Support RFCI ID != RFCI Index
  * iuup: Fix caps in logging message
  * iuup: Check for IuUP Initialization retrans

  [ Alexander Couzens ]
  * doc/overview: fix wrong project page link

  [ Vadim Yanitskiy ]
  * tests: use 'check_PROGRAMS' instead of 'noinst_PROGRAMS'
  * libosmo-mgcp: e1: fix memleaks in e1_recv_cb()

  [ Harald Welte ]
  * update git URLs (git -> https; gitea)

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 28 Jun 2022 18:50:25 +0200

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
