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
