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
