osmo-hlr (1.1.0) unstable; urgency=medium

  [ Oliver Smith ]
  * docs: running: document --db-upgrade
  * Add IMEI column to subscriber table
  * Optionally store IMEI in subscriber table
  * VTY tests: fill DB before running test
  * VTY: integrate IMEI
  * hlr.c: replace deprecated osmo_gsup_get_err_msg_type()
  * hlr.c: move hlr_ctx to the top
  * tests: use -no-install libtool flag to avoid ./lt-* scripts
  * Cosmetic: gsup_route_find: comment addr, addrlen
  * USSD: save MO USSD's originating MSC's vlr_number
  * USSD: don't use gsm0480_msgb_alloc_name()
  * hlr.c: forward GSUP messages between clients
  * db_hlr.c: db_subscr_create(): add flags argument
  * db_hlr.c: add db_subscr_exists_by_imsi()
  * Create subscribers on demand
  * Document subscribers create on demand feature
  * debian: create -doc subpackage with pdf manuals
  * db_test: set timezone to work around mktime bug
  * db_hlr: zero-initialize "struct tm"
  * rx_check_imei_req(): fix IMEI bounds checking
  * contrib/jenkins.sh: run "make maintainer-clean"
  * VTY: add subscriber update network-access-mode
  * manuals: improve subscribers create on demand
  * gitignore: ignore everything generated in db_test
  * db_auc.c: verify hex key sizes read from DB

  [ Max ]
  * Log ip:port when adding GSUP routes
  * Add link to project wiki to .service file
  * Enable statsd support

  [ Vadim Yanitskiy ]
  * hlr.c: properly terminate the process on SIGTERM
  * hlr.c: fix: also store the session state in read_cb_forward()
  * hlr.c: fix: properly print the original message type in read_cb_forward()
  * hlr.c: check the presence of msgb->l2h in read_cb()
  * hlr.c: fix possible msgb memleaks in read_cb()
  * db_hlr.c: add db_subscr_exists_by_msisdn()
  * src/db.h: use GSM23003_MSISDN_MAX_DIGITS for MSISDN buffer size
  * src/hlr.c: fix deprecation warning: use gsm48_decode_bcd_number2()
  * hlr_ussd.c: fix: properly pass invokeID in handle_ussd_own_msisdn()
  * hlr_ussd.c: rx_proc_ss_req(): fix NULL pointer dereference
  * build: fix mess with 'db_test_SOURCES' and 'db_test_LDADD'
  * tests/db_test: close the database when test is finished
  * src/db.c: integrate SQLite3 with talloc allocator

  [ Neels Hofmeyr ]
  * USSD: fix routing to multiple MSC
  * fix error logging for GSUP route
  * add missing error log: invalid IMSI
  * osmo-hlr: allow configuring db path from cfg file
  * use new OSMO_IMSI_BUF_SIZE

  [ Daniel Willmann ]
  * manuals: Add script to update vty/counter documentation from docker
  * manuals: Update vty documentation

  [ Pau Espin Pedrol ]
  * Remove undefined param passed to logging_vty_add_cmds
  * configure.ac: Require libosmocore 1.2.0

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

osmo-hlr (1.0.0) unstable; urgency=medium

  [ Stefan Sperling ]
  * move creation of insert subscriber data messages to a common function

  [ Harald Welte ]
  * Return proper GSUP error in case of too short IMSI
  * disable blind subscriber insertion into every VLR/SGSN
  * gsup_server: Add "priv" pointer and make it point to 'struct hlr'
  * move osmo_gsup_addr_send() declaration from luop.h to gsup_router.h
  * gsup_router: Use "#pragma once" and add missing #includes
  * Add "show gsup-connections" VTY command
  * import gsup_client.c as new libosmo-gsup-client
  * gsup_client: rename gsup_client_* to osmo_gsup_client_*
  * GSUP: Log GSUP route add/remove
  * hlr: Export + Declare global g_hlr symbol
  * USSD: Add Core USSD handling + VTY routing config to HLR
  * USSD: Add basic dispatch + decode of GSUP-encapsulated SS/USSD
  * hlr_ussd: Introduce LOGPSS() macro
  * USSD: Send ReturnError component if USSD Code unknown / EUSE disconnected
  * USSD: Further unification of log output; Use LOGPSS when possible
  * osmo-hlr.cfg: Don't enable DEBUG logging by default
  * USSD: Add new "DSS" logging category and use it appropriately
  * USSD: fix null-pointer deref in "default-route" vty/config cmd
  * Add osmo-euse-demo as minimalistic test of a External USSD (EUSE) handler
  * USSD: Add support for internal USSD handlers
  * debian: Add sub-package for libosmo-gsup-client
  * pkg-config: Fix libosmo-gsup-client pkg-config file
  * gitignore: Add .tarball-version
  * debian: Make libosmo-gsup-client-dev depend on libosmo-gsup-client0
  * USSD: Fix "ussd default-route"
  * libosmo-gsup-client: License is GPLv2-or-later
  * osmo-hlr.cfg: Ensure well-formed config file example
  * test_nodes.vty: Since libosmocore 1.0.0, we only have one space

  [ Martin Hauke ]
  * sql/Makefile.am: Make docsdir completely configurable
  * debian: Fix typo in package description

  [ Pau Espin Pedrol ]
  * debian: Avoid installing duplicate cfg file in /etc
  * sql/Makefile: Install hlr_data.sql as example together with hlr.sql
  * sql/Makefile: Install sql files under doc/.../sql subdir
  * sql/Makefile: Create empty /var/lib/osmocom directory at install time
  * Install systemd services with autotools
  * Move doc/Makefile.am to doc/examples/Makefile.am
  * Install sample cfg file to /etc/osmocom

  [ Vadim Yanitskiy ]
  * hlr.c: move deinitialization code from SIGINT handler
  * hlr.c: free root talloc context on exit
  * hlr.c: track the use of talloc NULL memory contexts
  * src/db.c: fix: make sure the database is properly closed
  * src/db.c: don't ignore the result of db_bootstrap()
  * hlr_vty_subscr.c: fix subscriber creation command help
  * Update .gitignore: add missing build products
  * tests/Makefile.am: also remove temporary sqlite files
  * hlr_ussd.h: add #pragma once include guard
  * hlr_ussd.h: use proper libc headers
  * Update .gitignore: ignore osmo-euse-demo
  * hlr_ussd.h: drop meaningless forward declaration
  * USSD/hlr_vty.c: print error if EUSE is not found
  * hlr_ussd.c: fix: properly print a EUSE / IUSE name
  * hlr_ussd.c: avoid using CR and NL in IUSE responses

  [ Neels Hofmeyr ]
  * fix build: adjust test_nodes.vty to logging change
  * tweak example config
  * make: always allow running python tests manually

 -- Harald Welte <laforge@gnumonks.org>  Sun, 20 Jan 2019 19:29:58 +0100

osmo-hlr (0.2.1) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * fix luop crash: use buffer for APN that remains valid
  * add gsup_test to catch OS#3231
  * add error handling to osmo_gsup_configure_wildcard_apn()

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Fri, 04 May 2018 18:41:35 +0200

osmo-hlr (0.2.0) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * vty: skip installing cmds now always installed by default
  * hlr_db_tool: fix error log strerror invocation
  * cosmetic: add comment on ignored return value
  * db-tool: add command 'create'
  * db-tool: cosmetic: tweak printf output
  * db-tool: error-exit on too many arguments
  * add --enable-sanitize config option
  * db_test: don't verify SQLite issued error messages, they might change
  * cosmetic: rx_send_auth_info(): decide error cause with switch()
  * return GMM_CAUSE_IMSI_UNKNOWN if there is no auth data
  * db_get_auth_data / db_get_auc: clarify return values
  * osmo-hlr: log details for unknown IMSI / no auth data / db error
  * db_test: also test db_get_auc() return values
  * fix test_subscriber_errors.ctrl after libosmocore change
  * fix debug log: put 'deriving 2G from 3G' in proper place
  * ctrl test: fix: adjust expectations after stricter ctrl parsing
  * fix build: db_test: missing LIBOSMOABIS_CFLAGS and _LIBS
  * configure: add --enable-werror
  * jenkins.sh: use --enable-werror configure flag, not CFLAGS

  [ Harald Welte ]
  * hlr.c: Avoid overflow of lu_operation.subscr.imsi
  * Fix expected test output after new 'logging print file 1' vty command
  * osmo-hlr: Add talloc context introspection via VTY
  * vty: Don't print error if removing auth data while none present
  * Fix responses to PURGE MS

  [ Alexander Couzens ]
  * debian: include systemd service osmo-hlr.service
  * doc: install example .cfg files to $(docdir)/examples/
  * debian: install osmo-hlr.cfg to /etc/osmocom

  [ Max ]
  * Remove unused check
  * Remove unused ipa.py
  * Enable sanitize for CI tests

  [ Pau Espin Pedrol ]
  * luop.c: Transform FIXME from warning to pragma message
  * contrib:jenkins.sh: Enable Werror
  * use osmo_init_logging2
  * Remove unused src/db_test.c

  [ Alexander Huemer ]
  * Add missing build products in .gitignore

  [ Stefan Sperling ]
  * more robust usage of osmo_timer API for osmo-hlr luop timer
  * notify GSUP clients when HLR subscriber information changes
  * rewrite subscriber_update_notify() without calls into luop
  * don't forget to mark luop as a packet switched connection

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Thu, 03 May 2018 16:27:13 +0200

osmo-hlr (0.1.0) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * build with autoconf/automake, add jenkins.sh script
  * fix build on FreeBSD: eliminate implicitly declared functions
  * fix various compiler warnings
  * fix DLGSUP logging cat after change in libosmocore
  * build: recoin db_test as non-installable program
  * build: actually make sqlite mandatory
  * bump required libosmocore version to 0.9.5
  * gsup: send subscriber MSISDN
  * debug log: log computed vector kinds
  * log: move a log from info to debug level
  * hlr.sql: typo in comment
  * auc.c: typo in comment
  * main: add and use root talloc ctx
  * main: add option parsing with db file and default options
  * main: add VTY and '-c config-file' option
  * sql: fix 3g_auc's column K data type
  * cosmetic: sql: indicate VARCHAR size of key columns as 32
  * sql: auc_3g: set sqn NOT NULL DEFAULT 0
  * comment: sql: describe auc_2g and auc_3g columns
  * Add test suite skeleton with empty test (auc_3g_test)
  * tests: auc_3g_test: implement vector generation test
  * auth: verify test sets from 3GPP TS 55.205
  * sql: add unique constraints to IMSI and MSISDN
  * UMTS AKA resync: fix argument ordering
  * auc_3g_test: add AUTS resync test
  * auc_gen_vectors(): ensure sane arguments, test
  * auc_3g_test: allow to inc fake rand bytes upon rand request
  * auc_3g_test: add AUTS test with N vectors, to show bug
  * cosmetic: refactor auc_compute_vectors(), add debug log
  * auc_compute_vectors(): fix AUTS resync for multiple vectors
  * cosmetic: auc_3g_test: improve test debugging tools
  * cosmetic: rename auc_3g_test.c to auc_test.c
  * fix: properly handle error rc by osmo_gsup_conn_ccm_get()
  * auc tests: adjust cosmetically to prepare for SQN changes
  * auc tests: fix after SQN scheme changes from libosmocore
  * fix debug log: adjust to new SQN increment scheme
  * UMTS AKA: implement SQN increment according to SEQ and IND
  * debug log: output ind slot, previous sqn, and sqn db update
  * jenkins: add value_string termination check
  * fix db_subscr_ps error handling
  * add config example (mostly empty)
  * install hlr.sql in prefix/doc/osmo-hlr/
  * use OSMO_GSUP_PORT == 4222 instead of hardcoded 2222
  * add basic CTRL interface tests
  * add CTRL tests for enable-/disable-/status-ps
  * cosmetic: prepend DB_STMT_ to enum stmt_idx entries
  * cosmetic: rename db_subscr_get() to db_subscr_get_by_imsi()
  * cosmetic: refactor db_bind_imsi() as db_bind_text()
  * cosmetic: multi-line DB_STMT_AUC_BY_IMSI
  * cosmetic: log IMSI='<imsi>', log "no such subscriber"
  * cosmetic: log: "SQLite" with capital L
  * cosmetic: db_hlr: SL3_TXT: clarify indenting
  * ctrl_test_runner.py: use proper constant as test db path
  * gitignore: tests/package.m4
  * cosmetic: don't log about missing SQLite log cb
  * add db_bind_int() and db_bind_int64()
  * add db_subscr_create(), db_subscr_delete(), db_subscr_update_msisdn_by_imsi()
  * add initial db_test: creating and deleting subscribers
  * less noise: simplify db_remove_reset()
  * db: use int64_t as subscriber id
  * add db_subscr_get_by_msisdn() and db_subscr_get_by_id()
  * refactor db_subscr_ps() to db_subscr_nam()
  * refactor db_subscr_lu()
  * refactor db_subscr_purge
  * add db_subscr_update_aud_by_id(), complete db_subscr_delete_by_id()
  * refactor db_get_auth_data return val
  * code undup: use db_remove_reset() in db_auc.c
  * fix db_update_sqn(): reset stmt in all error cases
  * code undup: use db_bind_text() in db_get_auth_data()
  * debian: 'make check' needs sqlite3, add to Build-Depends
  * fix db_subscr_get_by_*(): clear output data; test in db_test.c
  * implement subscriber vty interface, tests
  * add test_nodes.vty
  * replace ctrl_test_runner.py with transcript test_subscriber.ctrl
  * add lu_op_free(), use in luop.c
  * luop: fix mem leak upon error in lu_op_alloc_conn()
  * fix mem leak in handle_cmd_ps(): free luop
  * api doc: say that lu_op_tx_del_subscr_data() doesn't free
  * add hlr_subsrc_nam to put GSUP client notification in proper API
  * vty: fix output of empty IMSI
  * db api: fix/add API docs
  * cosmetic: tweak params of hlr_controlif_setup()
  * ctrl: completely replace all CTRL commands
  * test_subscriber.ctrl: test against octal/hex interpretation of id
  * jenkins: use osmo-clean-workspace.sh before and after build
  * tests/Makefile: use test db var instead of repeating the path
  * db_test: fix *FLAGS
  * automatically create db tables on osmo-hlr invocation
  * cosmetic: sql/hlr.sql: move comments
  * cosmetic: rename SL3_TXT macro, use osmo_strlcpy()
  * fix default logging levels to NOTICE, not DEBUG
  * add osmo-hlr-db-tool, program to migrate from osmo-nitb db

  [ Max ]
  * Add gerrit settings
  * Add hardcoded APN
  * Log error cause as a string
  * Move GSUP msg init into separate function
  * Use strings for GSUP message type
  * Move lu_operation into separate file
  * db: move duplicated code into helper functions
  * Fix compiler's warning about printf security
  * Add routines to update nam_ps
  * Add global HLR struct
  * Make subscr parameter to db_subscr_get() optional
  * Add CTRL interface
  * CTRL: add enable/disable packet service cmds
  * Add .deb packaging
  * deb: fix OBS build
  * debian: remove obsolete dependency
  * Attempt to fix .deb package
  * deb: use python in shebang
  * Another attempt at fixing .deb
  * Use release helper from libosmocore
  * Use value string check from osmo-ci

  [ Daniel Willmann ]
  * Add systemd service file
  * hlr_data.sql: Insert ki and opc instead of op to example data
  * tests/auc: Don't require python3

  [ Pau Espin Pedrol ]
  * VTY: Add hlr node and bind ip field
  * debian: remove unneeded dependency libdbd-sqlite3

  [ Harald Welte ]
  * jenkins.sh: Proper error message if local environment isn't set up

  [ Alexander Couzens ]
  * debian/rules: show testsuite.log when tests are failing

 -- Harald Welte <laforge@gnumonks.org>  Sat, 28 Oct 2017 20:37:33 +0200

osmo-hlr (0.0.1) UNRELEASED; urgency=low

     * Initial release (Closes: OS#1948)

 -- Max Suraev <msuraev@sysmocom.de>  Mon, 13 Mar 2017 16:26:41 +0200
