aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2018-08-13 18:32:36 +0200
committerHarald Welte <laforge@gnumonks.org>2018-08-15 08:54:50 +0200
commit3aa901da56c6346a329791666004482281024233 (patch)
tree3be7fdded915b3b236fee920f0fc590d5a4e5ea3
initial checkin of osmo-remsim0.0
This adds some initial code, particularly the ASN.1 definition of the RSPRO protocol, related makefile to build it using ffasn1c, and our usual autoconf infrastructure to build it. Change-Id: Ibaa993b59e9a65a0242b0f42b27d9cd29f8e1878
-rw-r--r--.gitignore29
-rw-r--r--Makefile.am15
-rw-r--r--README.md4
-rw-r--r--asn1/RSPRO.asn275
-rw-r--r--configure.ac86
-rwxr-xr-xgit-version-gen151
-rw-r--r--include/Makefile.am1
-rw-r--r--include/osmocom/Makefile.am1
-rw-r--r--include/osmocom/rspro/ATR.h38
-rw-r--r--include/osmocom/rspro/BankId.h38
-rw-r--r--include/osmocom/rspro/BankSlot.h43
-rw-r--r--include/osmocom/rspro/BankSlotStatusInd.h45
-rw-r--r--include/osmocom/rspro/ClientId.h38
-rw-r--r--include/osmocom/rspro/ClientSlot.h43
-rw-r--r--include/osmocom/rspro/ClientSlotStatusInd.h45
-rw-r--r--include/osmocom/rspro/ComponentIdentity.h50
-rw-r--r--include/osmocom/rspro/ComponentName.h38
-rw-r--r--include/osmocom/rspro/ComponentType.h45
-rw-r--r--include/osmocom/rspro/ConfigClientReq.h43
-rw-r--r--include/osmocom/rspro/ConfigClientRes.h41
-rw-r--r--include/osmocom/rspro/ConnectBankReq.h45
-rw-r--r--include/osmocom/rspro/ConnectBankRes.h43
-rw-r--r--include/osmocom/rspro/ConnectClientReq.h41
-rw-r--r--include/osmocom/rspro/ConnectClientRes.h43
-rw-r--r--include/osmocom/rspro/CreateMappingReq.h43
-rw-r--r--include/osmocom/rspro/CreateMappingRes.h41
-rw-r--r--include/osmocom/rspro/IpAddress.h49
-rw-r--r--include/osmocom/rspro/IpPort.h39
-rw-r--r--include/osmocom/rspro/Ipv4Address.h38
-rw-r--r--include/osmocom/rspro/Ipv6Address.h38
-rw-r--r--include/osmocom/rspro/Makefile.am38
-rw-r--r--include/osmocom/rspro/OperationTag.h38
-rw-r--r--include/osmocom/rspro/PortNumber.h38
-rw-r--r--include/osmocom/rspro/RemoveMappingReq.h43
-rw-r--r--include/osmocom/rspro/RemoveMappingRes.h41
-rw-r--r--include/osmocom/rspro/ResultCode.h52
-rw-r--r--include/osmocom/rspro/RsproPDU.h41
-rw-r--r--include/osmocom/rspro/RsproPDUchoice.h97
-rw-r--r--include/osmocom/rspro/SetAtrReq.h43
-rw-r--r--include/osmocom/rspro/SetAtrRes.h41
-rw-r--r--include/osmocom/rspro/SlotNumber.h38
-rw-r--r--include/osmocom/rspro/SlotPhysStatus.h44
-rw-r--r--include/osmocom/rspro/TpduCardToModem.h47
-rw-r--r--include/osmocom/rspro/TpduFlags.h44
-rw-r--r--include/osmocom/rspro/TpduModemToCard.h47
-rwxr-xr-xmove-asn1-header-files.sh44
-rw-r--r--src/Makefile.am10
-rw-r--r--src/driver_core.c84
-rw-r--r--src/driver_pcsc.c123
-rw-r--r--src/internal.h60
-rw-r--r--src/main.c42
-rw-r--r--src/rspro/ATR.c129
-rw-r--r--src/rspro/BankId.c128
-rw-r--r--src/rspro/BankSlot.c69
-rw-r--r--src/rspro/BankSlotStatusInd.c79
-rw-r--r--src/rspro/ClientId.c128
-rw-r--r--src/rspro/ClientSlot.c69
-rw-r--r--src/rspro/ClientSlotStatusInd.c79
-rw-r--r--src/rspro/ComponentIdentity.c139
-rw-r--r--src/rspro/ComponentName.c143
-rw-r--r--src/rspro/ComponentType.c130
-rw-r--r--src/rspro/ConfigClientReq.c69
-rw-r--r--src/rspro/ConfigClientRes.c59
-rw-r--r--src/rspro/ConnectBankReq.c79
-rw-r--r--src/rspro/ConnectBankRes.c69
-rw-r--r--src/rspro/ConnectClientReq.c59
-rw-r--r--src/rspro/ConnectClientRes.c69
-rw-r--r--src/rspro/CreateMappingReq.c69
-rw-r--r--src/rspro/CreateMappingRes.c59
-rw-r--r--src/rspro/IpAddress.c65
-rw-r--r--src/rspro/IpPort.c70
-rw-r--r--src/rspro/Ipv4Address.c129
-rw-r--r--src/rspro/Ipv6Address.c129
-rw-r--r--src/rspro/Makefile.am89
-rw-r--r--src/rspro/OperationTag.c128
-rw-r--r--src/rspro/PortNumber.c128
-rw-r--r--src/rspro/RemoveMappingReq.c69
-rw-r--r--src/rspro/RemoveMappingRes.c59
-rw-r--r--src/rspro/ResultCode.c140
-rw-r--r--src/rspro/RsproPDU.c122
-rw-r--r--src/rspro/RsproPDUchoice.c205
-rw-r--r--src/rspro/SetAtrReq.c69
-rw-r--r--src/rspro/SetAtrRes.c59
-rw-r--r--src/rspro/SlotNumber.c128
-rw-r--r--src/rspro/SlotPhysStatus.c89
-rw-r--r--src/rspro/TpduCardToModem.c89
-rw-r--r--src/rspro/TpduFlags.c89
-rw-r--r--src/rspro/TpduModemToCard.c89
-rw-r--r--src/rspro_util.c156
89 files changed, 6270 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..281367f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,29 @@
+*.o
+*.lo
+*.la
+*.a
+*.so
+*~
+.*.swp
+.deps
+.version
+.tarball-version
+autom4te.cache
+aclocal.m4
+config.guess
+config.log
+config.status
+config.sub
+configure
+compile
+depcomp
+install-sh
+libtool
+ltmain.sh
+missing
+Makefile.in
+Makefile
+Makefile.am.sample
+tags
+m4
+gen_rspro.stamp
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..9832b58
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,15 @@
+AUTOMAKE_OPTIONS = foreign dist-bzip2
+
+SUBDIRS = src include
+
+EXTRA_DIST = asn1 .version README.md
+
+pkgcofigdir = $(libdir)/pkgconfig
+
+@RELMAKE@
+
+BUILT_SOURCES = $(top_srcdir)/.version
+$(top_srcdir)/.version:
+ echo $(VERSION) > $@-t && mv $@-t $@
+dist-hook:
+ echo $(VERSION) > $(distdir)/.tarball-version
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..b1ed7b6
--- /dev/null
+++ b/README.md
@@ -0,0 +1,4 @@
+osmo-remsim - Osmocom remote SIM software suite
+===============================================
+
+TBD
diff --git a/asn1/RSPRO.asn b/asn1/RSPRO.asn
new file mode 100644
index 0000000..8e4f266
--- /dev/null
+++ b/asn1/RSPRO.asn
@@ -0,0 +1,275 @@
+----------------------------------------------------------------------
+-- RSPRO - Remote SIM Protocol, part of Osmocom Remote SIM Suite
+-- (C) 2018 by Harald Welte <laforge@gnumonks.org>
+----------------------------------------------------------------------
+
+RSPRO {} DEFINITIONS
+
+IMPLICIT TAGS
+
+::=
+
+BEGIN
+
+EXPORTS
+ RsproPDU
+;
+
+----------------------------------------------------------------------
+-- Elementary Data Types
+----------------------------------------------------------------------
+
+-- Some random ID the requestor can chose and which the client echos back in a response.
+-- This allows multiple outstanding commands in flight and matching of responses to requests.
+OperationTag ::= INTEGER(0..2147483647)
+
+-- Unique identifier of a given SIM bank
+BankId ::= INTEGER(0..1023)
+
+-- Unique identifier of a given client (modem)
+ClientId ::= INTEGER(0..1023)
+
+ComponentType ::= ENUMERATED {
+ -- client: Modems / Phones
+ remsimClient (0),
+ -- server: Coordination
+ remsimServer (1),
+ -- bank daemon: SIM cards
+ remsimBankd (2)
+}
+ComponentName ::= IA5String (SIZE (1..32))
+ComponentIdentity ::= SEQUENCE {
+ type ComponentType,
+ name ComponentName,
+ software [0] ComponentName,
+ swVersion [1] ComponentName,
+ hwManufacturer [2] ComponentName OPTIONAL,
+ hwModel [3] ComponentName OPTIONAL,
+ hwSerialNr [4] ComponentName OPTIONAL,
+ hwVersion [5] ComponentName OPTIONAL,
+ fwVersion [6] ComponentName OPTIONAL,
+ ...
+}
+
+-- IP address / port details
+Ipv4Address ::= OCTET STRING (SIZE (4))
+Ipv6Address ::= OCTET STRING (SIZE (16))
+IpAddress ::= CHOICE {
+ ipv4 [0] Ipv4Address,
+ ipv6 [1] Ipv6Address
+}
+PortNumber ::= INTEGER (0..65535)
+IpPort ::= SEQUENCE {
+ ip IpAddress,
+ port PortNumber
+}
+
+-- Result of a given operation
+ResultCode ::= ENUMERATED {
+ ok (0),
+ -- client / bank / slot ID not accepted
+ illegalClientId (1),
+ illegalBankId (2),
+ illegalSlotId (3),
+
+ -- no card is present in given slot
+ cardNotPresent (100),
+ -- card is present but unresponsive in given slot
+ cardUnresponsive (101),
+ -- unrecoverable transmission errors detected
+ cardTransmissionError (102),
+ ...
+}
+
+-- Slot number within a SIM bank or a client.
+SlotNumber ::= INTEGER(0..1023)
+
+-- Slot identity on client (modem) side
+ClientSlot ::= SEQUENCE {
+ clientId ClientId,
+ slotNr SlotNumber,
+ ...
+}
+
+-- Slot identity on SIM bank side
+BankSlot ::= SEQUENCE {
+ bankId BankId,
+ slotNr SlotNumber,
+ ...
+}
+
+ATR ::= OCTET STRING (SIZE (1..55))
+
+-- flags related to a TPDU in either of the two directions
+TpduFlags ::= SEQUENCE {
+ -- indicates a TPDU header is present in this message
+ tpduHeaderPresent BOOLEAN,
+ -- indicates last part of transmission in this direction
+ finalPart BOOLEAN,
+ -- indicates a PB is present and we should continue with TX
+ procByteContinueTx BOOLEAN,
+ -- indicates a PB is present and we should continue with RX
+ procByteContinueRx BOOLEAN,
+ ...
+}
+
+--- physical state of a given slot
+SlotPhysStatus ::= SEQUENCE {
+ -- is RST activated by the modem?
+ resetActive [0] BOOLEAN,
+ -- is VCC applied by the modem?
+ vccPresent [1] BOOLEAN OPTIONAL,
+ -- is CLK applied by the modem?
+ clkActive [2] BOOLEAN OPTIONAL, -- not all hardware supports this
+ -- is card presence signalled to the modem?
+ cardPresent [3] BOOLEAN OPTIONAL,
+ ...
+}
+
+----------------------------------------------------------------------
+-- Messages
+----------------------------------------------------------------------
+
+
+-- SIM Bank connects to central server
+ConnectBankReq ::= SEQUENCE {
+ -- identity of the bank that is connecting to the server
+ identity ComponentIdentity,
+ -- bank number, pre-configured on bank side
+ bankId BankId,
+ numberOfSlots SlotNumber,
+ ...
+}
+ConnectBankRes ::= SEQUENCE {
+ -- identity of the server to which the bank is connecting
+ identity ComponentIdentity,
+ result ResultCode,
+ ...
+}
+
+ConnectClientReq ::= SEQUENCE {
+ -- identity of the bank that is connecting to the server
+ identity ComponentIdentity,
+ ...
+}
+ConnectClientRes ::= SEQUENCE {
+ -- identity of the bnak to which the client is connecting
+ identity ComponentIdentity,
+ result ResultCode,
+ ...
+}
+
+-- create a mapping between a given Bank:Slot <-> Client:Slot
+CreateMappingReq ::= SEQUENCE {
+ client ClientSlot,
+ bank BankSlot,
+ ...
+}
+CreateMappingRes ::= SEQUENCE {
+ result ResultCode,
+ ...
+}
+
+-- remove a mapping between a given Bank:Slot <-> Client:Slot
+RemoveMappingReq ::= SEQUENCE {
+ client ClientSlot,
+ bank BankSlot,
+ ...
+}
+RemoveMappingRes ::= SEQUENCE {
+ result ResultCode,
+ ...
+}
+
+ConfigClientReq ::= SEQUENCE {
+ -- server-allocated assignment of a client ID
+ clientId ClientId,
+ -- bank to which the client shall connect
+ bankd IpPort,
+ ...
+}
+ConfigClientRes ::= SEQUENCE {
+ result ResultCode,
+ ...
+}
+
+-- configure the ATR which the card emulator (client) shall send to the modem
+SetAtrReq ::= SEQUENCE {
+ slot ClientSlot,
+ atr ATR,
+ ...
+}
+SetAtrRes ::= SEQUENCE {
+ result ResultCode,
+ ...
+}
+
+-- TPDU in Modem -> Card direction
+TpduModemToCard ::= SEQUENCE {
+ -- we include fully-qualified bank and client slots for easier debugging
+ fromClientSlot ClientSlot,
+ toBankSlot BankSlot,
+ flags TpduFlags,
+ data OCTET STRING,
+ ...
+}
+
+-- TPDU in Card -> Modem direction
+TpduCardToModem ::= SEQUENCE {
+ -- we include fully-qualified bank and client slots for easier debugging
+ fromBankSlot BankSlot,
+ toClientSlot ClientSlot,
+ flags TpduFlags,
+ data OCTET STRING,
+ ...
+}
+
+-- indciation about the current status of a client (modem side)
+ClientSlotStatusInd ::= SEQUENCE {
+ fromClientSlot ClientSlot,
+ toBankSlot BankSlot,
+ slotPhysStatus SlotPhysStatus,
+ ...
+}
+
+-- indciation about the current status of a bank (modem side)
+BankSlotStatusInd ::= SEQUENCE {
+ fromBankSlot BankSlot,
+ toClientSlot ClientSlot,
+ slotPhysStatus SlotPhysStatus,
+ ...
+}
+
+----------------------------------------------------------------------
+-- PDU
+----------------------------------------------------------------------
+
+RsproPDUchoice ::= CHOICE {
+ -- configuration + management
+ connectBankReq [0] ConnectBankReq,
+ connectBankRes [1] ConnectBankRes,
+ connectClientReq [2] ConnectClientReq,
+ connectClientRes [3] ConnectClientRes,
+ createMappingReq [4] CreateMappingReq,
+ createMappingRes [5] CreateMappingRes,
+ removeMappingReq [6] RemoveMappingReq,
+ removeMappingRes [7] RemoveMappingRes,
+ configClientReq [8] ConfigClientReq,
+ configClientRes [9] ConfigClientRes,
+ -- APDUs etc.
+ setAtrReq [10] SetAtrReq,
+ setAtrRes [11] SetAtrRes,
+ tpduModemToCard [12] TpduModemToCard,
+ tpduCardToModem [13] TpduCardToModem,
+ clientSlotStatusInd [14] ClientSlotStatusInd,
+ bankSlotStatusInd [15] BankSlotStatusInd,
+ ...
+}
+
+RsproPDU ::= SEQUENCE {
+ version [0] INTEGER(0..32) DEFAULT 1,
+ tag [1] OperationTag,
+ msg [2] RsproPDUchoice
+}
+
+END
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..c3ec5ad
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,86 @@
+AC_INIT([osmo-remsim],
+ m4_esyscmd([./git-version-gen .tarball-version]),
+ [simtrace@lists.osmocom.org])
+
+dnl *This* is the root dir, even if an install-sh exists in ../ or ../../
+AC_CONFIG_AUX_DIR([.])
+
+LT_INIT
+
+AM_INIT_AUTOMAKE([foreign dist-bzip2 no-dist-gzip 1.9 tar-ustar])
+dnl tar-ustar: some asn1 filenames surpass the 99 char limit of tar, so we need
+dnl to make tar allow longer filenames.
+
+
+dnl kernel style compile messages
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+dnl include release helper
+RELMAKE='-include osmo-release.mk'
+AC_SUBST([RELMAKE])
+
+dnl checks for programs
+AC_PROG_MAKE_SET
+AC_PROG_MKDIR_P
+AC_PROG_CC
+AC_PROG_INSTALL
+
+dnl check for pkg-config (explained in detail in libosmocore/configure.ac)
+AC_PATH_PROG(PKG_CONFIG_INSTALLED, pkg-config, no)
+if test "x$PKG_CONFIG_INSTALLED" = "xno"; then
+ AC_MSG_WARN([You need to install pkg-config])
+fi
+PKG_PROG_PKG_CONFIG([0.20])
+
+PKG_CHECK_MODULES(OSMOCORE, libosmocore >= 0.11.0)
+PKG_CHECK_MODULES(ASN1C, libasn1c >= 0.9.30)
+
+AC_CONFIG_MACRO_DIR([m4])
+
+dnl checks for header files
+AC_HEADER_STDC
+
+AC_ARG_ENABLE(sanitize,
+ [AS_HELP_STRING(
+ [--enable-sanitize],
+ [Compile with address sanitizer enabled],
+ )],
+ [sanitize=$enableval], [sanitize="no"])
+if test x"$sanitize" = x"yes"
+then
+ CFLAGS="$CFLAGS -fsanitize=address -fsanitize=undefined"
+ CPPFLAGS="$CPPFLAGS -fsanitize=address -fsanitize=undefined"
+fi
+
+AC_ARG_ENABLE(werror,
+ AS_HELP_STRING(
+ [--enable-werror],
+ [Turn all compiler warnings into errors, with exceptions:
+ a) deprecation (allow upstream to mark deprecation without breaking builds);
+ b) "#warning" pragmas (allow to remind ourselves of errors without breaking builds)
+ ]
+ )],
+ [werror=$enableval], [werror="no"])
+if test x"$werror" = x"yes"
+then
+ WERROR_FLAGS="-Werror"
+ WERROR_FLAGS+=" -Wno-error=deprecated -Wno-error=deprecated-declarations"
+ WERROR_FLAGS+=" -Wno-error=cpp" # "#warning"
+ CFLAGS="$CFLAGS $WERROR_FLAGS"
+ CPPFLAGS="$CPPFLAGS $WERROR_FLAGS"
+fi
+
+CFLAGS="$CFLAGS -Wall"
+CPPFLAGS="$CPPFLAGS -Wall"
+
+AC_MSG_RESULT([CFLAGS="$CFLAGS"])
+AC_MSG_RESULT([CPPFLAGS="$CPPFLAGS"])
+
+AC_OUTPUT(
+ Makefile
+ src/Makefile
+ src/rspro/Makefile
+ include/Makefile
+ include/osmocom/Makefile
+ include/osmocom/rspro/Makefile
+ )
diff --git a/git-version-gen b/git-version-gen
new file mode 100755
index 0000000..42cf3d2
--- /dev/null
+++ b/git-version-gen
@@ -0,0 +1,151 @@
+#!/bin/sh
+# Print a version string.
+scriptversion=2010-01-28.01
+
+# Copyright (C) 2007-2010 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# This script is derived from GIT-VERSION-GEN from GIT: http://git.or.cz/.
+# It may be run two ways:
+# - from a git repository in which the "git describe" command below
+# produces useful output (thus requiring at least one signed tag)
+# - from a non-git-repo directory containing a .tarball-version file, which
+# presumes this script is invoked like "./git-version-gen .tarball-version".
+
+# In order to use intra-version strings in your project, you will need two
+# separate generated version string files:
+#
+# .tarball-version - present only in a distribution tarball, and not in
+# a checked-out repository. Created with contents that were learned at
+# the last time autoconf was run, and used by git-version-gen. Must not
+# be present in either $(srcdir) or $(builddir) for git-version-gen to
+# give accurate answers during normal development with a checked out tree,
+# but must be present in a tarball when there is no version control system.
+# Therefore, it cannot be used in any dependencies. GNUmakefile has
+# hooks to force a reconfigure at distribution time to get the value
+# correct, without penalizing normal development with extra reconfigures.
+#
+# .version - present in a checked-out repository and in a distribution
+# tarball. Usable in dependencies, particularly for files that don't
+# want to depend on config.h but do want to track version changes.
+# Delete this file prior to any autoconf run where you want to rebuild
+# files to pick up a version string change; and leave it stale to
+# minimize rebuild time after unrelated changes to configure sources.
+#
+# It is probably wise to add these two files to .gitignore, so that you
+# don't accidentally commit either generated file.
+#
+# Use the following line in your configure.ac, so that $(VERSION) will
+# automatically be up-to-date each time configure is run (and note that
+# since configure.ac no longer includes a version string, Makefile rules
+# should not depend on configure.ac for version updates).
+#
+# AC_INIT([GNU project],
+# m4_esyscmd([build-aux/git-version-gen .tarball-version]),
+# [bug-project@example])
+#
+# Then use the following lines in your Makefile.am, so that .version
+# will be present for dependencies, and so that .tarball-version will
+# exist in distribution tarballs.
+#
+# BUILT_SOURCES = $(top_srcdir)/.version
+# $(top_srcdir)/.version:
+# echo $(VERSION) > $@-t && mv $@-t $@
+# dist-hook:
+# echo $(VERSION) > $(distdir)/.tarball-version
+
+case $# in
+ 1) ;;
+ *) echo 1>&2 "Usage: $0 \$srcdir/.tarball-version"; exit 1;;
+esac
+
+tarball_version_file=$1
+nl='
+'
+
+# First see if there is a tarball-only version file.
+# then try "git describe", then default.
+if test -f $tarball_version_file
+then
+ v=`cat $tarball_version_file` || exit 1
+ case $v in
+ *$nl*) v= ;; # reject multi-line output
+ [0-9]*) ;;
+ *) v= ;;
+ esac
+ test -z "$v" \
+ && echo "$0: WARNING: $tarball_version_file seems to be damaged" 1>&2
+fi
+
+if test -n "$v"
+then
+ : # use $v
+elif
+ v=`git describe --abbrev=4 --match='v*' HEAD 2>/dev/null \
+ || git describe --abbrev=4 HEAD 2>/dev/null` \
+ && case $v in
+ [0-9]*) ;;
+ v[0-9]*) ;;
+ *) (exit 1) ;;
+ esac
+then
+ # Is this a new git that lists number of commits since the last
+ # tag or the previous older version that did not?
+ # Newer: v6.10-77-g0f8faeb
+ # Older: v6.10-g0f8faeb
+ case $v in
+ *-*-*) : git describe is okay three part flavor ;;
+ *-*)
+ : git describe is older two part flavor
+ # Recreate the number of commits and rewrite such that the
+ # result is the same as if we were using the newer version
+ # of git describe.
+ vtag=`echo "$v" | sed 's/-.*//'`
+ numcommits=`git rev-list "$vtag"..HEAD | wc -l`
+ v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`;
+ ;;
+ esac
+
+ # Change the first '-' to a '.', so version-comparing tools work properly.
+ # Remove the "g" in git describe's output string, to save a byte.
+ v=`echo "$v" | sed 's/-/./;s/\(.*\)-g/\1-/'`;
+else
+ v=UNKNOWN
+fi
+
+v=`echo "$v" |sed 's/^v//'`
+
+# Don't declare a version "dirty" merely because a time stamp has changed.
+git status > /dev/null 2>&1
+
+dirty=`sh -c 'git diff-index --name-only HEAD' 2>/dev/null` || dirty=
+case "$dirty" in
+ '') ;;
+ *) # Append the suffix only if there isn't one already.
+ case $v in
+ *-dirty) ;;
+ *) v="$v-dirty" ;;
+ esac ;;
+esac
+
+# Omit the trailing newline, so that m4_esyscmd can use the result directly.
+echo "$v" | tr -d '\012'
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/include/Makefile.am b/include/Makefile.am
new file mode 100644
index 0000000..3578a80
--- /dev/null
+++ b/include/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = osmocom
diff --git a/include/osmocom/Makefile.am b/include/osmocom/Makefile.am
new file mode 100644
index 0000000..dda6b88
--- /dev/null
+++ b/include/osmocom/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = rspro
diff --git a/include/osmocom/rspro/ATR.h b/include/osmocom/rspro/ATR.h
new file mode 100644
index 0000000..e737109
--- /dev/null
+++ b/include/osmocom/rspro/ATR.h
@@ -0,0 +1,38 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _ATR_H_
+#define _ATR_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ATR */
+typedef OCTET_STRING_t ATR_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_ATR;
+asn_struct_free_f ATR_free;
+asn_struct_print_f ATR_print;
+asn_constr_check_f ATR_constraint;
+ber_type_decoder_f ATR_decode_ber;
+der_type_encoder_f ATR_encode_der;
+xer_type_decoder_f ATR_decode_xer;
+xer_type_encoder_f ATR_encode_xer;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ATR_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/BankId.h b/include/osmocom/rspro/BankId.h
new file mode 100644
index 0000000..e24f7c5
--- /dev/null
+++ b/include/osmocom/rspro/BankId.h
@@ -0,0 +1,38 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _BankId_H_
+#define _BankId_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* BankId */
+typedef long BankId_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_BankId;
+asn_struct_free_f BankId_free;
+asn_struct_print_f BankId_print;
+asn_constr_check_f BankId_constraint;
+ber_type_decoder_f BankId_decode_ber;
+der_type_encoder_f BankId_encode_der;
+xer_type_decoder_f BankId_decode_xer;
+xer_type_encoder_f BankId_encode_xer;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _BankId_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/BankSlot.h b/include/osmocom/rspro/BankSlot.h
new file mode 100644
index 0000000..44cf95d
--- /dev/null
+++ b/include/osmocom/rspro/BankSlot.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _BankSlot_H_
+#define _BankSlot_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/BankId.h>
+#include <osmocom/rspro/SlotNumber.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* BankSlot */
+typedef struct BankSlot {
+ BankId_t bankId;
+ SlotNumber_t slotNr;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} BankSlot_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_BankSlot;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _BankSlot_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/BankSlotStatusInd.h b/include/osmocom/rspro/BankSlotStatusInd.h
new file mode 100644
index 0000000..08b6fbb
--- /dev/null
+++ b/include/osmocom/rspro/BankSlotStatusInd.h
@@ -0,0 +1,45 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _BankSlotStatusInd_H_
+#define _BankSlotStatusInd_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/BankSlot.h>
+#include <osmocom/rspro/ClientSlot.h>
+#include <osmocom/rspro/SlotPhysStatus.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* BankSlotStatusInd */
+typedef struct BankSlotStatusInd {
+ BankSlot_t fromBankSlot;
+ ClientSlot_t toClientSlot;
+ SlotPhysStatus_t slotPhysStatus;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} BankSlotStatusInd_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_BankSlotStatusInd;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _BankSlotStatusInd_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/ClientId.h b/include/osmocom/rspro/ClientId.h
new file mode 100644
index 0000000..9c7201f
--- /dev/null
+++ b/include/osmocom/rspro/ClientId.h
@@ -0,0 +1,38 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _ClientId_H_
+#define _ClientId_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ClientId */
+typedef long ClientId_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_ClientId;
+asn_struct_free_f ClientId_free;
+asn_struct_print_f ClientId_print;
+asn_constr_check_f ClientId_constraint;
+ber_type_decoder_f ClientId_decode_ber;
+der_type_encoder_f ClientId_encode_der;
+xer_type_decoder_f ClientId_decode_xer;
+xer_type_encoder_f ClientId_encode_xer;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ClientId_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/ClientSlot.h b/include/osmocom/rspro/ClientSlot.h
new file mode 100644
index 0000000..ee36650
--- /dev/null
+++ b/include/osmocom/rspro/ClientSlot.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _ClientSlot_H_
+#define _ClientSlot_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/ClientId.h>
+#include <osmocom/rspro/SlotNumber.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ClientSlot */
+typedef struct ClientSlot {
+ ClientId_t clientId;
+ SlotNumber_t slotNr;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} ClientSlot_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_ClientSlot;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ClientSlot_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/ClientSlotStatusInd.h b/include/osmocom/rspro/ClientSlotStatusInd.h
new file mode 100644
index 0000000..075a41a
--- /dev/null
+++ b/include/osmocom/rspro/ClientSlotStatusInd.h
@@ -0,0 +1,45 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _ClientSlotStatusInd_H_
+#define _ClientSlotStatusInd_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/ClientSlot.h>
+#include <osmocom/rspro/BankSlot.h>
+#include <osmocom/rspro/SlotPhysStatus.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ClientSlotStatusInd */
+typedef struct ClientSlotStatusInd {
+ ClientSlot_t fromClientSlot;
+ BankSlot_t toBankSlot;
+ SlotPhysStatus_t slotPhysStatus;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} ClientSlotStatusInd_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_ClientSlotStatusInd;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ClientSlotStatusInd_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/ComponentIdentity.h b/include/osmocom/rspro/ComponentIdentity.h
new file mode 100644
index 0000000..166e670
--- /dev/null
+++ b/include/osmocom/rspro/ComponentIdentity.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _ComponentIdentity_H_
+#define _ComponentIdentity_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/ComponentType.h>
+#include <osmocom/rspro/ComponentName.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ComponentIdentity */
+typedef struct ComponentIdentity {
+ ComponentType_t type;
+ ComponentName_t name;
+ ComponentName_t software;
+ ComponentName_t swVersion;
+ ComponentName_t *hwManufacturer /* OPTIONAL */;
+ ComponentName_t *hwModel /* OPTIONAL */;
+ ComponentName_t *hwSerialNr /* OPTIONAL */;
+ ComponentName_t *hwVersion /* OPTIONAL */;
+ ComponentName_t *fwVersion /* OPTIONAL */;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} ComponentIdentity_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_ComponentIdentity;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ComponentIdentity_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/ComponentName.h b/include/osmocom/rspro/ComponentName.h
new file mode 100644
index 0000000..d57557a
--- /dev/null
+++ b/include/osmocom/rspro/ComponentName.h
@@ -0,0 +1,38 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _ComponentName_H_
+#define _ComponentName_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <IA5String.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ComponentName */
+typedef IA5String_t ComponentName_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_ComponentName;
+asn_struct_free_f ComponentName_free;
+asn_struct_print_f ComponentName_print;
+asn_constr_check_f ComponentName_constraint;
+ber_type_decoder_f ComponentName_decode_ber;
+der_type_encoder_f ComponentName_encode_der;
+xer_type_decoder_f ComponentName_decode_xer;
+xer_type_encoder_f ComponentName_encode_xer;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ComponentName_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/ComponentType.h b/include/osmocom/rspro/ComponentType.h
new file mode 100644
index 0000000..2eb2fc6
--- /dev/null
+++ b/include/osmocom/rspro/ComponentType.h
@@ -0,0 +1,45 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _ComponentType_H_
+#define _ComponentType_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum ComponentType {
+ ComponentType_remsimClient = 0,
+ ComponentType_remsimServer = 1,
+ ComponentType_remsimBankd = 2
+} e_ComponentType;
+
+/* ComponentType */
+typedef long ComponentType_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_ComponentType;
+asn_struct_free_f ComponentType_free;
+asn_struct_print_f ComponentType_print;
+asn_constr_check_f ComponentType_constraint;
+ber_type_decoder_f ComponentType_decode_ber;
+der_type_encoder_f ComponentType_encode_der;
+xer_type_decoder_f ComponentType_decode_xer;
+xer_type_encoder_f ComponentType_encode_xer;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ComponentType_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/ConfigClientReq.h b/include/osmocom/rspro/ConfigClientReq.h
new file mode 100644
index 0000000..670fb68
--- /dev/null
+++ b/include/osmocom/rspro/ConfigClientReq.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _ConfigClientReq_H_
+#define _ConfigClientReq_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/ClientId.h>
+#include <osmocom/rspro/IpPort.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ConfigClientReq */
+typedef struct ConfigClientReq {
+ ClientId_t clientId;
+ IpPort_t bankd;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} ConfigClientReq_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_ConfigClientReq;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ConfigClientReq_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/ConfigClientRes.h b/include/osmocom/rspro/ConfigClientRes.h
new file mode 100644
index 0000000..96c4441
--- /dev/null
+++ b/include/osmocom/rspro/ConfigClientRes.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _ConfigClientRes_H_
+#define _ConfigClientRes_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/ResultCode.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ConfigClientRes */
+typedef struct ConfigClientRes {
+ ResultCode_t result;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} ConfigClientRes_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_ConfigClientRes;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ConfigClientRes_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/ConnectBankReq.h b/include/osmocom/rspro/ConnectBankReq.h
new file mode 100644
index 0000000..468f8ba
--- /dev/null
+++ b/include/osmocom/rspro/ConnectBankReq.h
@@ -0,0 +1,45 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _ConnectBankReq_H_
+#define _ConnectBankReq_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/ComponentIdentity.h>
+#include <osmocom/rspro/BankId.h>
+#include <osmocom/rspro/SlotNumber.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ConnectBankReq */
+typedef struct ConnectBankReq {
+ ComponentIdentity_t identity;
+ BankId_t bankId;
+ SlotNumber_t numberOfSlots;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} ConnectBankReq_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_ConnectBankReq;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ConnectBankReq_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/ConnectBankRes.h b/include/osmocom/rspro/ConnectBankRes.h
new file mode 100644
index 0000000..20be498
--- /dev/null
+++ b/include/osmocom/rspro/ConnectBankRes.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _ConnectBankRes_H_
+#define _ConnectBankRes_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/ComponentIdentity.h>
+#include <osmocom/rspro/ResultCode.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ConnectBankRes */
+typedef struct ConnectBankRes {
+ ComponentIdentity_t identity;
+ ResultCode_t result;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} ConnectBankRes_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_ConnectBankRes;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ConnectBankRes_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/ConnectClientReq.h b/include/osmocom/rspro/ConnectClientReq.h
new file mode 100644
index 0000000..16eebec
--- /dev/null
+++ b/include/osmocom/rspro/ConnectClientReq.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _ConnectClientReq_H_
+#define _ConnectClientReq_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/ComponentIdentity.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ConnectClientReq */
+typedef struct ConnectClientReq {
+ ComponentIdentity_t identity;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} ConnectClientReq_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_ConnectClientReq;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ConnectClientReq_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/ConnectClientRes.h b/include/osmocom/rspro/ConnectClientRes.h
new file mode 100644
index 0000000..84fbe65
--- /dev/null
+++ b/include/osmocom/rspro/ConnectClientRes.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _ConnectClientRes_H_
+#define _ConnectClientRes_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/ComponentIdentity.h>
+#include <osmocom/rspro/ResultCode.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ConnectClientRes */
+typedef struct ConnectClientRes {
+ ComponentIdentity_t identity;
+ ResultCode_t result;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} ConnectClientRes_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_ConnectClientRes;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ConnectClientRes_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/CreateMappingReq.h b/include/osmocom/rspro/CreateMappingReq.h
new file mode 100644
index 0000000..a6e2560
--- /dev/null
+++ b/include/osmocom/rspro/CreateMappingReq.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _CreateMappingReq_H_
+#define _CreateMappingReq_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/ClientSlot.h>
+#include <osmocom/rspro/BankSlot.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* CreateMappingReq */
+typedef struct CreateMappingReq {
+ ClientSlot_t client;
+ BankSlot_t bank;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} CreateMappingReq_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_CreateMappingReq;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _CreateMappingReq_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/CreateMappingRes.h b/include/osmocom/rspro/CreateMappingRes.h
new file mode 100644
index 0000000..b95c20d
--- /dev/null
+++ b/include/osmocom/rspro/CreateMappingRes.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _CreateMappingRes_H_
+#define _CreateMappingRes_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/ResultCode.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* CreateMappingRes */
+typedef struct CreateMappingRes {
+ ResultCode_t result;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} CreateMappingRes_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_CreateMappingRes;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _CreateMappingRes_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/IpAddress.h b/include/osmocom/rspro/IpAddress.h
new file mode 100644
index 0000000..7e029e2
--- /dev/null
+++ b/include/osmocom/rspro/IpAddress.h
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _IpAddress_H_
+#define _IpAddress_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/Ipv4Address.h>
+#include <osmocom/rspro/Ipv6Address.h>
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum IpAddress_PR {
+ IpAddress_PR_NOTHING, /* No components present */
+ IpAddress_PR_ipv4,
+ IpAddress_PR_ipv6
+} IpAddress_PR;
+
+/* IpAddress */
+typedef struct IpAddress {
+ IpAddress_PR present;
+ union IpAddress_u {
+ Ipv4Address_t ipv4;
+ Ipv6Address_t ipv6;
+ } choice;
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} IpAddress_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_IpAddress;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _IpAddress_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/IpPort.h b/include/osmocom/rspro/IpPort.h
new file mode 100644
index 0000000..2ad3b27
--- /dev/null
+++ b/include/osmocom/rspro/IpPort.h
@@ -0,0 +1,39 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _IpPort_H_
+#define _IpPort_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/IpAddress.h>
+#include <osmocom/rspro/PortNumber.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* IpPort */
+typedef struct IpPort {
+ IpAddress_t ip;
+ PortNumber_t port;
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} IpPort_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_IpPort;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _IpPort_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/Ipv4Address.h b/include/osmocom/rspro/Ipv4Address.h
new file mode 100644
index 0000000..054bb2e
--- /dev/null
+++ b/include/osmocom/rspro/Ipv4Address.h
@@ -0,0 +1,38 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _Ipv4Address_H_
+#define _Ipv4Address_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Ipv4Address */
+typedef OCTET_STRING_t Ipv4Address_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_Ipv4Address;
+asn_struct_free_f Ipv4Address_free;
+asn_struct_print_f Ipv4Address_print;
+asn_constr_check_f Ipv4Address_constraint;
+ber_type_decoder_f Ipv4Address_decode_ber;
+der_type_encoder_f Ipv4Address_encode_der;
+xer_type_decoder_f Ipv4Address_decode_xer;
+xer_type_encoder_f Ipv4Address_encode_xer;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _Ipv4Address_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/Ipv6Address.h b/include/osmocom/rspro/Ipv6Address.h
new file mode 100644
index 0000000..9a2eca3
--- /dev/null
+++ b/include/osmocom/rspro/Ipv6Address.h
@@ -0,0 +1,38 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _Ipv6Address_H_
+#define _Ipv6Address_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Ipv6Address */
+typedef OCTET_STRING_t Ipv6Address_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_Ipv6Address;
+asn_struct_free_f Ipv6Address_free;
+asn_struct_print_f Ipv6Address_print;
+asn_constr_check_f Ipv6Address_constraint;
+ber_type_decoder_f Ipv6Address_decode_ber;
+der_type_encoder_f Ipv6Address_encode_der;
+xer_type_decoder_f Ipv6Address_decode_xer;
+xer_type_encoder_f Ipv6Address_encode_xer;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _Ipv6Address_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/Makefile.am b/include/osmocom/rspro/Makefile.am
new file mode 100644
index 0000000..0bb7b82
--- /dev/null
+++ b/include/osmocom/rspro/Makefile.am
@@ -0,0 +1,38 @@
+noinst_HEADERS = \
+ ATR.h \
+ BankId.h \
+ BankSlot.h \
+ BankSlotStatusInd.h \
+ ClientId.h \
+ ClientSlot.h \
+ ClientSlotStatusInd.h \
+ ComponentIdentity.h \
+ ComponentName.h \
+ ComponentType.h \
+ ConfigClientReq.h \
+ ConfigClientRes.h \
+ ConnectBankReq.h \
+ ConnectBankRes.h \
+ ConnectClientReq.h \
+ ConnectClientRes.h \
+ CreateMappingReq.h \
+ CreateMappingRes.h \
+ IpAddress.h \
+ IpPort.h \
+ Ipv4Address.h \
+ Ipv6Address.h \
+ OperationTag.h \
+ PortNumber.h \
+ RemoveMappingReq.h \
+ RemoveMappingRes.h \
+ ResultCode.h \
+ RsproPDU.h \
+ RsproPDUchoice.h \
+ SetAtrReq.h \
+ SetAtrRes.h \
+ SlotNumber.h \
+ SlotPhysStatus.h \
+ TpduCardToModem.h \
+ TpduFlags.h \
+ TpduModemToCard.h \
+ $(NULL)
diff --git a/include/osmocom/rspro/OperationTag.h b/include/osmocom/rspro/OperationTag.h
new file mode 100644
index 0000000..293ee03
--- /dev/null
+++ b/include/osmocom/rspro/OperationTag.h
@@ -0,0 +1,38 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _OperationTag_H_
+#define _OperationTag_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* OperationTag */
+typedef long OperationTag_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_OperationTag;
+asn_struct_free_f OperationTag_free;
+asn_struct_print_f OperationTag_print;
+asn_constr_check_f OperationTag_constraint;
+ber_type_decoder_f OperationTag_decode_ber;
+der_type_encoder_f OperationTag_encode_der;
+xer_type_decoder_f OperationTag_decode_xer;
+xer_type_encoder_f OperationTag_encode_xer;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _OperationTag_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/PortNumber.h b/include/osmocom/rspro/PortNumber.h
new file mode 100644
index 0000000..2a06e64
--- /dev/null
+++ b/include/osmocom/rspro/PortNumber.h
@@ -0,0 +1,38 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _PortNumber_H_
+#define _PortNumber_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* PortNumber */
+typedef long PortNumber_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_PortNumber;
+asn_struct_free_f PortNumber_free;
+asn_struct_print_f PortNumber_print;
+asn_constr_check_f PortNumber_constraint;
+ber_type_decoder_f PortNumber_decode_ber;
+der_type_encoder_f PortNumber_encode_der;
+xer_type_decoder_f PortNumber_decode_xer;
+xer_type_encoder_f PortNumber_encode_xer;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _PortNumber_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/RemoveMappingReq.h b/include/osmocom/rspro/RemoveMappingReq.h
new file mode 100644
index 0000000..ea82c8d
--- /dev/null
+++ b/include/osmocom/rspro/RemoveMappingReq.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _RemoveMappingReq_H_
+#define _RemoveMappingReq_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/ClientSlot.h>
+#include <osmocom/rspro/BankSlot.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RemoveMappingReq */
+typedef struct RemoveMappingReq {
+ ClientSlot_t client;
+ BankSlot_t bank;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} RemoveMappingReq_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RemoveMappingReq;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RemoveMappingReq_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/RemoveMappingRes.h b/include/osmocom/rspro/RemoveMappingRes.h
new file mode 100644
index 0000000..f731815
--- /dev/null
+++ b/include/osmocom/rspro/RemoveMappingRes.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _RemoveMappingRes_H_
+#define _RemoveMappingRes_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/ResultCode.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RemoveMappingRes */
+typedef struct RemoveMappingRes {
+ ResultCode_t result;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} RemoveMappingRes_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RemoveMappingRes;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RemoveMappingRes_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/ResultCode.h b/include/osmocom/rspro/ResultCode.h
new file mode 100644
index 0000000..a45aa77
--- /dev/null
+++ b/include/osmocom/rspro/ResultCode.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _ResultCode_H_
+#define _ResultCode_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeEnumerated.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum ResultCode {
+ ResultCode_ok = 0,
+ ResultCode_illegalClientId = 1,
+ ResultCode_illegalBankId = 2,
+ ResultCode_illegalSlotId = 3,
+ ResultCode_cardNotPresent = 100,
+ ResultCode_cardUnresponsive = 101,
+ ResultCode_cardTransmissionError = 102
+ /*
+ * Enumeration is extensible
+ */
+} e_ResultCode;
+
+/* ResultCode */
+typedef long ResultCode_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_ResultCode;
+asn_struct_free_f ResultCode_free;
+asn_struct_print_f ResultCode_print;
+asn_constr_check_f ResultCode_constraint;
+ber_type_decoder_f ResultCode_decode_ber;
+der_type_encoder_f ResultCode_encode_der;
+xer_type_decoder_f ResultCode_decode_xer;
+xer_type_encoder_f ResultCode_encode_xer;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ResultCode_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/RsproPDU.h b/include/osmocom/rspro/RsproPDU.h
new file mode 100644
index 0000000..171750a
--- /dev/null
+++ b/include/osmocom/rspro/RsproPDU.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _RsproPDU_H_
+#define _RsproPDU_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+#include <osmocom/rspro/OperationTag.h>
+#include <osmocom/rspro/RsproPDUchoice.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RsproPDU */
+typedef struct RsproPDU {
+ long *version /* DEFAULT 1 */;
+ OperationTag_t tag;
+ RsproPDUchoice_t msg;
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} RsproPDU_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RsproPDU;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RsproPDU_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/RsproPDUchoice.h b/include/osmocom/rspro/RsproPDUchoice.h
new file mode 100644
index 0000000..07d387e
--- /dev/null
+++ b/include/osmocom/rspro/RsproPDUchoice.h
@@ -0,0 +1,97 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _RsproPDUchoice_H_
+#define _RsproPDUchoice_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/ConnectBankReq.h>
+#include <osmocom/rspro/ConnectBankRes.h>
+#include <osmocom/rspro/ConnectClientReq.h>
+#include <osmocom/rspro/ConnectClientRes.h>
+#include <osmocom/rspro/CreateMappingReq.h>
+#include <osmocom/rspro/CreateMappingRes.h>
+#include <osmocom/rspro/RemoveMappingReq.h>
+#include <osmocom/rspro/RemoveMappingRes.h>
+#include <osmocom/rspro/ConfigClientReq.h>
+#include <osmocom/rspro/ConfigClientRes.h>
+#include <osmocom/rspro/SetAtrReq.h>
+#include <osmocom/rspro/SetAtrRes.h>
+#include <osmocom/rspro/TpduModemToCard.h>
+#include <osmocom/rspro/TpduCardToModem.h>
+#include <osmocom/rspro/ClientSlotStatusInd.h>
+#include <osmocom/rspro/BankSlotStatusInd.h>
+#include <constr_CHOICE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum RsproPDUchoice_PR {
+ RsproPDUchoice_PR_NOTHING, /* No components present */
+ RsproPDUchoice_PR_connectBankReq,
+ RsproPDUchoice_PR_connectBankRes,
+ RsproPDUchoice_PR_connectClientReq,
+ RsproPDUchoice_PR_connectClientRes,
+ RsproPDUchoice_PR_createMappingReq,
+ RsproPDUchoice_PR_createMappingRes,
+ RsproPDUchoice_PR_removeMappingReq,
+ RsproPDUchoice_PR_removeMappingRes,
+ RsproPDUchoice_PR_configClientReq,
+ RsproPDUchoice_PR_configClientRes,
+ RsproPDUchoice_PR_setAtrReq,
+ RsproPDUchoice_PR_setAtrRes,
+ RsproPDUchoice_PR_tpduModemToCard,
+ RsproPDUchoice_PR_tpduCardToModem,
+ RsproPDUchoice_PR_clientSlotStatusInd,
+ RsproPDUchoice_PR_bankSlotStatusInd,
+ /* Extensions may appear below */
+
+} RsproPDUchoice_PR;
+
+/* RsproPDUchoice */
+typedef struct RsproPDUchoice {
+ RsproPDUchoice_PR present;
+ union RsproPDUchoice_u {
+ ConnectBankReq_t connectBankReq;
+ ConnectBankRes_t connectBankRes;
+ ConnectClientReq_t connectClientReq;
+ ConnectClientRes_t connectClientRes;
+ CreateMappingReq_t createMappingReq;
+ CreateMappingRes_t createMappingRes;
+ RemoveMappingReq_t removeMappingReq;
+ RemoveMappingRes_t removeMappingRes;
+ ConfigClientReq_t configClientReq;
+ ConfigClientRes_t configClientRes;
+ SetAtrReq_t setAtrReq;
+ SetAtrRes_t setAtrRes;
+ TpduModemToCard_t tpduModemToCard;
+ TpduCardToModem_t tpduCardToModem;
+ ClientSlotStatusInd_t clientSlotStatusInd;
+ BankSlotStatusInd_t bankSlotStatusInd;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+ } choice;
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} RsproPDUchoice_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RsproPDUchoice;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RsproPDUchoice_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/SetAtrReq.h b/include/osmocom/rspro/SetAtrReq.h
new file mode 100644
index 0000000..eae6831
--- /dev/null
+++ b/include/osmocom/rspro/SetAtrReq.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _SetAtrReq_H_
+#define _SetAtrReq_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/ClientSlot.h>
+#include <osmocom/rspro/ATR.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* SetAtrReq */
+typedef struct SetAtrReq {
+ ClientSlot_t slot;
+ ATR_t atr;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} SetAtrReq_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_SetAtrReq;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SetAtrReq_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/SetAtrRes.h b/include/osmocom/rspro/SetAtrRes.h
new file mode 100644
index 0000000..817dd01
--- /dev/null
+++ b/include/osmocom/rspro/SetAtrRes.h
@@ -0,0 +1,41 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _SetAtrRes_H_
+#define _SetAtrRes_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/ResultCode.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* SetAtrRes */
+typedef struct SetAtrRes {
+ ResultCode_t result;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} SetAtrRes_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_SetAtrRes;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SetAtrRes_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/SlotNumber.h b/include/osmocom/rspro/SlotNumber.h
new file mode 100644
index 0000000..15d7fcd
--- /dev/null
+++ b/include/osmocom/rspro/SlotNumber.h
@@ -0,0 +1,38 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _SlotNumber_H_
+#define _SlotNumber_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* SlotNumber */
+typedef long SlotNumber_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_SlotNumber;
+asn_struct_free_f SlotNumber_free;
+asn_struct_print_f SlotNumber_print;
+asn_constr_check_f SlotNumber_constraint;
+ber_type_decoder_f SlotNumber_decode_ber;
+der_type_encoder_f SlotNumber_encode_der;
+xer_type_decoder_f SlotNumber_decode_xer;
+xer_type_encoder_f SlotNumber_encode_xer;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SlotNumber_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/SlotPhysStatus.h b/include/osmocom/rspro/SlotPhysStatus.h
new file mode 100644
index 0000000..b77585a
--- /dev/null
+++ b/include/osmocom/rspro/SlotPhysStatus.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _SlotPhysStatus_H_
+#define _SlotPhysStatus_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BOOLEAN.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* SlotPhysStatus */
+typedef struct SlotPhysStatus {
+ BOOLEAN_t resetActive;
+ BOOLEAN_t *vccPresent /* OPTIONAL */;
+ BOOLEAN_t *clkActive /* OPTIONAL */;
+ BOOLEAN_t *cardPresent /* OPTIONAL */;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} SlotPhysStatus_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_SlotPhysStatus;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SlotPhysStatus_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/TpduCardToModem.h b/include/osmocom/rspro/TpduCardToModem.h
new file mode 100644
index 0000000..5e94125
--- /dev/null
+++ b/include/osmocom/rspro/TpduCardToModem.h
@@ -0,0 +1,47 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _TpduCardToModem_H_
+#define _TpduCardToModem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/BankSlot.h>
+#include <osmocom/rspro/ClientSlot.h>
+#include <osmocom/rspro/TpduFlags.h>
+#include <OCTET_STRING.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* TpduCardToModem */
+typedef struct TpduCardToModem {
+ BankSlot_t fromBankSlot;
+ ClientSlot_t toClientSlot;
+ TpduFlags_t flags;
+ OCTET_STRING_t data;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} TpduCardToModem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_TpduCardToModem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _TpduCardToModem_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/TpduFlags.h b/include/osmocom/rspro/TpduFlags.h
new file mode 100644
index 0000000..c8bfc5a
--- /dev/null
+++ b/include/osmocom/rspro/TpduFlags.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _TpduFlags_H_
+#define _TpduFlags_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <BOOLEAN.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* TpduFlags */
+typedef struct TpduFlags {
+ BOOLEAN_t tpduHeaderPresent;
+ BOOLEAN_t finalPart;
+ BOOLEAN_t procByteContinueTx;
+ BOOLEAN_t procByteContinueRx;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} TpduFlags_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_TpduFlags;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _TpduFlags_H_ */
+#include <asn_internal.h>
diff --git a/include/osmocom/rspro/TpduModemToCard.h b/include/osmocom/rspro/TpduModemToCard.h
new file mode 100644
index 0000000..7ec3989
--- /dev/null
+++ b/include/osmocom/rspro/TpduModemToCard.h
@@ -0,0 +1,47 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#ifndef _TpduModemToCard_H_
+#define _TpduModemToCard_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <osmocom/rspro/ClientSlot.h>
+#include <osmocom/rspro/BankSlot.h>
+#include <osmocom/rspro/TpduFlags.h>
+#include <OCTET_STRING.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* TpduModemToCard */
+typedef struct TpduModemToCard {
+ ClientSlot_t fromClientSlot;
+ BankSlot_t toBankSlot;
+ TpduFlags_t flags;
+ OCTET_STRING_t data;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} TpduModemToCard_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_TpduModemToCard;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _TpduModemToCard_H_ */
+#include <asn_internal.h>
diff --git a/move-asn1-header-files.sh b/move-asn1-header-files.sh
new file mode 100755
index 0000000..b968323
--- /dev/null
+++ b/move-asn1-header-files.sh
@@ -0,0 +1,44 @@
+#!/bin/sh
+# Usage:
+# ../../move-asn1-headers.sh subdir_name File1.h File2.h ...
+# All .h and .c files in the current directory are edited to use #include <...>
+# style for the .h files given on the cmdline. The given .h files are also
+# moved to ../include/<subdir_name>/ so that #include <...> will work.
+
+set -e
+
+base_dir="$(dirname "$0")"
+
+include_subdir="$1"
+shift
+
+include_dir="$base_dir/include/$include_subdir"
+mkdir -p "$include_dir"
+echo "$PWD/*.h --> $include_dir"
+
+collect_sed_commands() {
+ while [ -n "$1" ]; do
+ fname="$1"
+ shift
+
+ echo "s,^#include \"$fname\"$,#include <$include_subdir/$fname>,"
+ done
+}
+
+move_headers() {
+ echo mv $@ "$include_dir/"
+ mv $@ "$include_dir/"
+}
+
+# Replace all `#include "foo.h"' with `#include <dir/foo.h>' locally
+# - Collect sed commands to replace all header includes, for efficiency
+cmds="$(mktemp)"
+echo "collecting sed commands..."
+collect_sed_commands $@ > "$cmds"
+# - Run commands on all h and c files
+echo "sed -i -f \"$cmds\" *.[hc]"
+sed -i -f "$cmds" *.[hc]
+rm "$cmds"
+
+# Now move sed'ed *.h files to the proper ../include/dir
+move_headers $@
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644
index 0000000..05ac9ae
--- /dev/null
+++ b/src/Makefile.am
@@ -0,0 +1,10 @@
+SUBDIRS = rspro
+
+AM_CFLAGS = -Wall -I$(top_srcdir)/include -I$(top_builddir)/include \
+ $(OSMOCORE_CFLAGS) $(ASN1C_CFLAGS)
+
+RSPRO_LIBVERSION=0:0:0
+lib_LTLIBRARIES = libosmo-rspro.la
+libosmo_rspro_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(RSPRO_LIBVERSION)
+libosmo_rspro_la_LIBADD = $(OSMOCORE_LIBS) $(ASN1C_LIBS) rspro/libosmo-asn1-rspro.la
+libosmo_rspro_la_SOURCES = rspro_util.c
diff --git a/src/driver_core.c b/src/driver_core.c
new file mode 100644
index 0000000..dbdf23f
--- /dev/null
+++ b/src/driver_core.c
@@ -0,0 +1,84 @@
+/*! \file reader_pcsc.c
+ * Card reader driver core */
+/*
+ * (C) 2018 by Harald Welte <laforge@gnumonks.org>
+ *
+ * All Rights Reserved
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <stdio.h>
+#include <talloc.h>
+#include <osmocom/core/linuxlist.h>
+
+#include "internal.h"
+
+static LLIST_HEAD(g_card_reader_drivers);
+static LLIST_HEAD(g_card_readers);
+
+struct card_reader *card_reader_alloc(void *ctx, const char *name,
+ const struct card_reader_driver *drv, void *drv_handle)
+{
+ struct card_reader *cr = talloc_zero(ctx, struct card_reader);
+ if (!cr)
+ return NULL;
+
+ cr->name = talloc_strdup(ctx, name);
+ cr->drv = drv;
+ cr->drv_handle = drv_handle;
+ INIT_LLIST_HEAD(&cr->slots);
+
+ llist_add(&cr->list, &g_card_readers);
+
+ printf("allocated reader '%s'\n", cr->name);
+
+ return cr;
+}
+
+/* allocate a new slot in the given reader */
+struct card_reader_slot *card_reader_slot_alloc(struct card_reader *cr, unsigned int slot_num)
+{
+ struct card_reader_slot *cs = talloc_zero(cr, struct card_reader_slot);
+ if (!cs)
+ return NULL;
+
+ cs->reader = cr;
+ llist_add(&cr->list, &cr->slots);
+ cs->num = slot_num;
+
+ return cs;
+}
+
+
+/* register a driver with the core, should typcially be called at start-up */
+void card_reader_driver_register(struct card_reader_driver *drv)
+{
+ llist_add_tail(&drv->list, &g_card_reader_drivers);
+}
+
+/* probe all readers on all drivers */
+void card_readers_probe(void *ctx)
+{
+ struct card_reader_driver *drv;
+
+ llist_for_each_entry(drv, &g_card_reader_drivers, list) {
+ printf("probing driver '%s' for drivers\n", drv->name);
+ drv->ops->probe(ctx);
+ }
+}
diff --git a/src/driver_pcsc.c b/src/driver_pcsc.c
new file mode 100644
index 0000000..d028e55
--- /dev/null
+++ b/src/driver_pcsc.c
@@ -0,0 +1,123 @@
+/*! \file reader_pcsc.c
+ * PC/SC Card reader backend for libosmosim. */
+/*
+ * (C) 2012 by Harald Welte <laforge@gnumonks.org>
+ *
+ * All Rights Reserved
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+
+#include <string.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <errno.h>
+
+#include <talloc.h>
+#include <osmocom/core/linuxlist.h>
+#include <osmocom/sim/sim.h>
+
+#include <wintypes.h>
+#include <winscard.h>
+
+#include "internal.h"
+
+#define PCSC_ERROR(rv, text) \
+if (rv != SCARD_S_SUCCESS) { \
+ fprintf(stderr, text ": %s (0x%lX)\n", pcsc_stringify_error(rv), rv); \
+ goto end; \
+} else { \
+ printf(text ": OK\n\n"); \
+}
+
+static void pcsc_readers_probe(void *ctx)
+{
+ LONG rc;
+ LPSTR mszReaders = NULL;
+ DWORD dwReaders;
+ SCARDCONTEXT hContext;
+ unsigned int num_readers;
+ char *ptr;
+
+ rc = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &hContext);
+ PCSC_ERROR(rc, "SCardEstablishContext");
+
+ dwReaders = SCARD_AUTOALLOCATE;
+ rc = SCardListReaders(hContext, NULL, (LPSTR)&mszReaders, &dwReaders);
+ PCSC_ERROR(rc, "SCardListReaders");
+
+ num_readers = 0;
+ ptr = mszReaders;
+ while (*ptr != '\0') {
+ struct card_reader *cr;
+ /* while CCID has the nice feature to distinguish between readers and slots, PC/SC
+ * doesn't have this distinction, so we end up having one "reader" per slot */
+ cr = card_reader_alloc(ctx, ptr, NULL, NULL);
+ card_reader_slot_alloc(cr, 0);
+ ptr += strlen(ptr)+1;
+ num_readers++;
+ }
+
+ printf("num_readers=%d\n", num_readers);
+
+end:
+ if (mszReaders)
+ SCardFreeMemory(hContext, mszReaders);
+}
+
+static int pcsc_reader_open_slot(struct card_reader_slot *slot)
+{
+ struct osim_card_hdl *card;
+ LONG rc;
+
+ if (proto != OSIM_PROTO_T0)
+ return NULL;
+
+ rc = SCardConnect(st->hContext, st->name, SCARD_SHARE_SHARED,
+ SCARD_PROTOCOL_T0, &st->hCard, &st->dwActiveProtocol);
+ PCSC_ERROR(rc, "SCardConnect");
+
+ st->pioSendPci = SCARD_PCI_T0;
+
+ card = talloc_zero(rh, struct osim_card_hdl);
+ INIT_LLIST_HEAD(&card->channels);
+ card->reader = rh;
+ rh->card = card;
+
+end:
+ return NULL;
+}
+
+
+static const struct card_reader_driver_ops pcsc_driver_ops = {
+ .probe = pcsc_readers_probe,
+ .open_slot = pcsc_reader_open_slot,
+ .close_slot = NULL,
+ .transceive_apdu = NULL,
+};
+
+static struct card_reader_driver pcsc_driver = {
+ .name = "PCSC",
+ .ops = &pcsc_driver_ops,
+};
+
+__attribute__ ((constructor)) void pcsc_reader_init(void)
+{
+ card_reader_driver_register(&pcsc_driver);
+}
diff --git a/src/internal.h b/src/internal.h
new file mode 100644
index 0000000..cc93319
--- /dev/null
+++ b/src/internal.h
@@ -0,0 +1,60 @@
+#pragma once
+
+#include <osmocom/core/linuxlist.h>
+
+struct card_reader_slot;
+
+struct card_reader_driver_ops {
+ /* probe system for card readers */
+ void (*probe)(void *ctx);
+ /* open a given slot, attempt to reset/start the card */
+ int (*open_slot)(struct card_reader_slot *slot);
+ /* close a given slot, power down the card */
+ void (*close_slot)(struct card_reader_slot *slot);
+ /* transceive an APDU */
+ int (*transceive_apdu)(struct card_reader_slot *slot);
+};
+
+struct card_reader_driver {
+ /* global list of drivers */
+ struct llist_head list;
+ /* name of the driver */
+ char *name;
+ const struct card_reader_driver_ops *ops;
+};
+
+struct card_reader {
+ /* global list of card readers */
+ struct llist_head list;
+ /* name of this reader */
+ char *name;
+ /* driver providing access to this reader */
+ const struct card_reader_driver *drv;
+ void *drv_handle;
+ /* list of card slots for this reader */
+ struct llist_head slots;
+};
+
+enum card_slot_state {
+ CARD_SLOT_OFF,
+ CARD_SLOT_OPEN,
+};
+
+struct card_reader_slot {
+ /* links to card_reader.slots */
+ struct llist_head list;
+ /* back-pointer to reader serving this slot */
+ struct card_reader *reader;
+ /* slot number */
+ unsigned int num;
+ /* state in which the slot is */
+ enum card_slot_state state;
+};
+
+
+struct card_reader *card_reader_alloc(void *ctx, const char *name,
+ const struct card_reader_driver *drv, void *drv_handle);
+struct card_reader_slot *card_reader_slot_alloc(struct card_reader *cr, unsigned int slot_num);
+
+void card_reader_driver_register(struct card_reader_driver *drv);
+void card_readers_probe(void *ctx);
diff --git a/src/main.c b/src/main.c
new file mode 100644
index 0000000..977785c
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,42 @@
+/*! \file main.c */
+/*
+ * (C) 2018 by Harald Welte <laforge@gnumonks.org>
+ *
+ * All Rights Reserved
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <string.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <errno.h>
+
+#include <talloc.h>
+#include <osmocom/core/linuxlist.h>
+#include <osmocom/sim/sim.h>
+
+#include <wintypes.h>
+#include <winscard.h>
+
+#include "internal.h"
+
+int main(int argc, char **argv)
+{
+ card_readers_probe(NULL);
+}
diff --git a/src/rspro/ATR.c b/src/rspro/ATR.c
new file mode 100644
index 0000000..55b2916
--- /dev/null
+++ b/src/rspro/ATR.c
@@ -0,0 +1,129 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/ATR.h>
+
+int
+ATR_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+ asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+ const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+ size_t size;
+
+ if(!sptr) {
+ _ASN_CTFAIL(app_key, td, sptr,
+ "%s: value not given (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+
+ size = st->size;
+
+ if((size >= 1l && size <= 55l)) {
+ /* Constraint check succeeded */
+ return 0;
+ } else {
+ _ASN_CTFAIL(app_key, td, sptr,
+ "%s: constraint failed (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static void
+ATR_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
+ td->free_struct = asn_DEF_OCTET_STRING.free_struct;
+ td->print_struct = asn_DEF_OCTET_STRING.print_struct;
+ td->check_constraints = asn_DEF_OCTET_STRING.check_constraints;
+ td->ber_decoder = asn_DEF_OCTET_STRING.ber_decoder;
+ td->der_encoder = asn_DEF_OCTET_STRING.der_encoder;
+ td->xer_decoder = asn_DEF_OCTET_STRING.xer_decoder;
+ td->xer_encoder = asn_DEF_OCTET_STRING.xer_encoder;
+ td->uper_decoder = asn_DEF_OCTET_STRING.uper_decoder;
+ td->uper_encoder = asn_DEF_OCTET_STRING.uper_encoder;
+ td->aper_decoder = asn_DEF_OCTET_STRING.aper_decoder;
+ td->aper_encoder = asn_DEF_OCTET_STRING.aper_encoder;
+ if(!td->per_constraints)
+ td->per_constraints = asn_DEF_OCTET_STRING.per_constraints;
+ td->elements = asn_DEF_OCTET_STRING.elements;
+ td->elements_count = asn_DEF_OCTET_STRING.elements_count;
+ td->specifics = asn_DEF_OCTET_STRING.specifics;
+}
+
+void
+ATR_free(asn_TYPE_descriptor_t *td,
+ void *struct_ptr, int contents_only) {
+ ATR_1_inherit_TYPE_descriptor(td);
+ td->free_struct(td, struct_ptr, contents_only);
+}
+
+int
+ATR_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
+ int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+ ATR_1_inherit_TYPE_descriptor(td);
+ return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+asn_dec_rval_t
+ATR_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const void *bufptr, size_t size, int tag_mode) {
+ ATR_1_inherit_TYPE_descriptor(td);
+ return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
+}
+
+asn_enc_rval_t
+ATR_encode_der(asn_TYPE_descriptor_t *td,
+ void *structure, int tag_mode, ber_tlv_tag_t tag,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ ATR_1_inherit_TYPE_descriptor(td);
+ return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+asn_dec_rval_t
+ATR_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const char *opt_mname, const void *bufptr, size_t size) {
+ ATR_1_inherit_TYPE_descriptor(td);
+ return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
+asn_enc_rval_t
+ATR_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
+ int ilevel, enum xer_encoder_flags_e flags,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ ATR_1_inherit_TYPE_descriptor(td);
+ return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
+}
+
+static const ber_tlv_tag_t asn_DEF_ATR_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ATR = {
+ "ATR",
+ "ATR",
+ ATR_free,
+ ATR_print,
+ ATR_constraint,
+ ATR_decode_ber,
+ ATR_encode_der,
+ ATR_decode_xer,
+ ATR_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_ATR_tags_1,
+ sizeof(asn_DEF_ATR_tags_1)
+ /sizeof(asn_DEF_ATR_tags_1[0]), /* 1 */
+ asn_DEF_ATR_tags_1, /* Same as above */
+ sizeof(asn_DEF_ATR_tags_1)
+ /sizeof(asn_DEF_ATR_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ 0, 0, /* No members */
+ 0 /* No specifics */
+};
+
diff --git a/src/rspro/BankId.c b/src/rspro/BankId.c
new file mode 100644
index 0000000..7e97ea6
--- /dev/null
+++ b/src/rspro/BankId.c
@@ -0,0 +1,128 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/BankId.h>
+
+int
+BankId_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+ asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+ long value;
+
+ if(!sptr) {
+ _ASN_CTFAIL(app_key, td, sptr,
+ "%s: value not given (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+
+ value = *(const long *)sptr;
+
+ if((value >= 0l && value <= 1023l)) {
+ /* Constraint check succeeded */
+ return 0;
+ } else {
+ _ASN_CTFAIL(app_key, td, sptr,
+ "%s: constraint failed (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static void
+BankId_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
+ td->free_struct = asn_DEF_NativeInteger.free_struct;
+ td->print_struct = asn_DEF_NativeInteger.print_struct;
+ td->check_constraints = asn_DEF_NativeInteger.check_constraints;
+ td->ber_decoder = asn_DEF_NativeInteger.ber_decoder;
+ td->der_encoder = asn_DEF_NativeInteger.der_encoder;
+ td->xer_decoder = asn_DEF_NativeInteger.xer_decoder;
+ td->xer_encoder = asn_DEF_NativeInteger.xer_encoder;
+ td->uper_decoder = asn_DEF_NativeInteger.uper_decoder;
+ td->uper_encoder = asn_DEF_NativeInteger.uper_encoder;
+ td->aper_decoder = asn_DEF_NativeInteger.aper_decoder;
+ td->aper_encoder = asn_DEF_NativeInteger.aper_encoder;
+ if(!td->per_constraints)
+ td->per_constraints = asn_DEF_NativeInteger.per_constraints;
+ td->elements = asn_DEF_NativeInteger.elements;
+ td->elements_count = asn_DEF_NativeInteger.elements_count;
+ td->specifics = asn_DEF_NativeInteger.specifics;
+}
+
+void
+BankId_free(asn_TYPE_descriptor_t *td,
+ void *struct_ptr, int contents_only) {
+ BankId_1_inherit_TYPE_descriptor(td);
+ td->free_struct(td, struct_ptr, contents_only);
+}
+
+int
+BankId_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
+ int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+ BankId_1_inherit_TYPE_descriptor(td);
+ return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+asn_dec_rval_t
+BankId_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const void *bufptr, size_t size, int tag_mode) {
+ BankId_1_inherit_TYPE_descriptor(td);
+ return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
+}
+
+asn_enc_rval_t
+BankId_encode_der(asn_TYPE_descriptor_t *td,
+ void *structure, int tag_mode, ber_tlv_tag_t tag,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ BankId_1_inherit_TYPE_descriptor(td);
+ return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+asn_dec_rval_t
+BankId_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const char *opt_mname, const void *bufptr, size_t size) {
+ BankId_1_inherit_TYPE_descriptor(td);
+ return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
+asn_enc_rval_t
+BankId_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
+ int ilevel, enum xer_encoder_flags_e flags,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ BankId_1_inherit_TYPE_descriptor(td);
+ return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
+}
+
+static const ber_tlv_tag_t asn_DEF_BankId_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_BankId = {
+ "BankId",
+ "BankId",
+ BankId_free,
+ BankId_print,
+ BankId_constraint,
+ BankId_decode_ber,
+ BankId_encode_der,
+ BankId_decode_xer,
+ BankId_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_BankId_tags_1,
+ sizeof(asn_DEF_BankId_tags_1)
+ /sizeof(asn_DEF_BankId_tags_1[0]), /* 1 */
+ asn_DEF_BankId_tags_1, /* Same as above */
+ sizeof(asn_DEF_BankId_tags_1)
+ /sizeof(asn_DEF_BankId_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ 0, 0, /* No members */
+ 0 /* No specifics */
+};
+
diff --git a/src/rspro/BankSlot.c b/src/rspro/BankSlot.c
new file mode 100644
index 0000000..64bc013
--- /dev/null
+++ b/src/rspro/BankSlot.c
@@ -0,0 +1,69 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/BankSlot.h>
+
+static asn_TYPE_member_t asn_MBR_BankSlot_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct BankSlot, bankId),
+ (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+ 0,
+ &asn_DEF_BankId,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "bankId"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct BankSlot, slotNr),
+ (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+ 0,
+ &asn_DEF_SlotNumber,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "slotNr"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_BankSlot_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_BankSlot_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* bankId */
+ { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 0 } /* slotNr */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_BankSlot_specs_1 = {
+ sizeof(struct BankSlot),
+ offsetof(struct BankSlot, _asn_ctx),
+ asn_MAP_BankSlot_tag2el_1,
+ 2, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ 1, /* Start extensions */
+ 3 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_BankSlot = {
+ "BankSlot",
+ "BankSlot",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_BankSlot_tags_1,
+ sizeof(asn_DEF_BankSlot_tags_1)
+ /sizeof(asn_DEF_BankSlot_tags_1[0]), /* 1 */
+ asn_DEF_BankSlot_tags_1, /* Same as above */
+ sizeof(asn_DEF_BankSlot_tags_1)
+ /sizeof(asn_DEF_BankSlot_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_BankSlot_1,
+ 2, /* Elements count */
+ &asn_SPC_BankSlot_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/BankSlotStatusInd.c b/src/rspro/BankSlotStatusInd.c
new file mode 100644
index 0000000..81a0723
--- /dev/null
+++ b/src/rspro/BankSlotStatusInd.c
@@ -0,0 +1,79 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/BankSlotStatusInd.h>
+
+static asn_TYPE_member_t asn_MBR_BankSlotStatusInd_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct BankSlotStatusInd, fromBankSlot),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_BankSlot,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "fromBankSlot"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct BankSlotStatusInd, toClientSlot),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_ClientSlot,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "toClientSlot"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct BankSlotStatusInd, slotPhysStatus),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_SlotPhysStatus,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "slotPhysStatus"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_BankSlotStatusInd_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_BankSlotStatusInd_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* fromBankSlot */
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 1 }, /* toClientSlot */
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 0 } /* slotPhysStatus */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_BankSlotStatusInd_specs_1 = {
+ sizeof(struct BankSlotStatusInd),
+ offsetof(struct BankSlotStatusInd, _asn_ctx),
+ asn_MAP_BankSlotStatusInd_tag2el_1,
+ 3, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ 2, /* Start extensions */
+ 4 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_BankSlotStatusInd = {
+ "BankSlotStatusInd",
+ "BankSlotStatusInd",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_BankSlotStatusInd_tags_1,
+ sizeof(asn_DEF_BankSlotStatusInd_tags_1)
+ /sizeof(asn_DEF_BankSlotStatusInd_tags_1[0]), /* 1 */
+ asn_DEF_BankSlotStatusInd_tags_1, /* Same as above */
+ sizeof(asn_DEF_BankSlotStatusInd_tags_1)
+ /sizeof(asn_DEF_BankSlotStatusInd_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_BankSlotStatusInd_1,
+ 3, /* Elements count */
+ &asn_SPC_BankSlotStatusInd_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/ClientId.c b/src/rspro/ClientId.c
new file mode 100644
index 0000000..f84c2ec
--- /dev/null
+++ b/src/rspro/ClientId.c
@@ -0,0 +1,128 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/ClientId.h>
+
+int
+ClientId_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+ asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+ long value;
+
+ if(!sptr) {
+ _ASN_CTFAIL(app_key, td, sptr,
+ "%s: value not given (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+
+ value = *(const long *)sptr;
+
+ if((value >= 0l && value <= 1023l)) {
+ /* Constraint check succeeded */
+ return 0;
+ } else {
+ _ASN_CTFAIL(app_key, td, sptr,
+ "%s: constraint failed (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static void
+ClientId_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
+ td->free_struct = asn_DEF_NativeInteger.free_struct;
+ td->print_struct = asn_DEF_NativeInteger.print_struct;
+ td->check_constraints = asn_DEF_NativeInteger.check_constraints;
+ td->ber_decoder = asn_DEF_NativeInteger.ber_decoder;
+ td->der_encoder = asn_DEF_NativeInteger.der_encoder;
+ td->xer_decoder = asn_DEF_NativeInteger.xer_decoder;
+ td->xer_encoder = asn_DEF_NativeInteger.xer_encoder;
+ td->uper_decoder = asn_DEF_NativeInteger.uper_decoder;
+ td->uper_encoder = asn_DEF_NativeInteger.uper_encoder;
+ td->aper_decoder = asn_DEF_NativeInteger.aper_decoder;
+ td->aper_encoder = asn_DEF_NativeInteger.aper_encoder;
+ if(!td->per_constraints)
+ td->per_constraints = asn_DEF_NativeInteger.per_constraints;
+ td->elements = asn_DEF_NativeInteger.elements;
+ td->elements_count = asn_DEF_NativeInteger.elements_count;
+ td->specifics = asn_DEF_NativeInteger.specifics;
+}
+
+void
+ClientId_free(asn_TYPE_descriptor_t *td,
+ void *struct_ptr, int contents_only) {
+ ClientId_1_inherit_TYPE_descriptor(td);
+ td->free_struct(td, struct_ptr, contents_only);
+}
+
+int
+ClientId_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
+ int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+ ClientId_1_inherit_TYPE_descriptor(td);
+ return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+asn_dec_rval_t
+ClientId_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const void *bufptr, size_t size, int tag_mode) {
+ ClientId_1_inherit_TYPE_descriptor(td);
+ return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
+}
+
+asn_enc_rval_t
+ClientId_encode_der(asn_TYPE_descriptor_t *td,
+ void *structure, int tag_mode, ber_tlv_tag_t tag,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ ClientId_1_inherit_TYPE_descriptor(td);
+ return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+asn_dec_rval_t
+ClientId_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const char *opt_mname, const void *bufptr, size_t size) {
+ ClientId_1_inherit_TYPE_descriptor(td);
+ return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
+asn_enc_rval_t
+ClientId_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
+ int ilevel, enum xer_encoder_flags_e flags,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ ClientId_1_inherit_TYPE_descriptor(td);
+ return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
+}
+
+static const ber_tlv_tag_t asn_DEF_ClientId_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ClientId = {
+ "ClientId",
+ "ClientId",
+ ClientId_free,
+ ClientId_print,
+ ClientId_constraint,
+ ClientId_decode_ber,
+ ClientId_encode_der,
+ ClientId_decode_xer,
+ ClientId_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_ClientId_tags_1,
+ sizeof(asn_DEF_ClientId_tags_1)
+ /sizeof(asn_DEF_ClientId_tags_1[0]), /* 1 */
+ asn_DEF_ClientId_tags_1, /* Same as above */
+ sizeof(asn_DEF_ClientId_tags_1)
+ /sizeof(asn_DEF_ClientId_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ 0, 0, /* No members */
+ 0 /* No specifics */
+};
+
diff --git a/src/rspro/ClientSlot.c b/src/rspro/ClientSlot.c
new file mode 100644
index 0000000..6747d89
--- /dev/null
+++ b/src/rspro/ClientSlot.c
@@ -0,0 +1,69 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/ClientSlot.h>
+
+static asn_TYPE_member_t asn_MBR_ClientSlot_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct ClientSlot, clientId),
+ (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+ 0,
+ &asn_DEF_ClientId,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "clientId"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct ClientSlot, slotNr),
+ (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+ 0,
+ &asn_DEF_SlotNumber,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "slotNr"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_ClientSlot_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_ClientSlot_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* clientId */
+ { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 0 } /* slotNr */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_ClientSlot_specs_1 = {
+ sizeof(struct ClientSlot),
+ offsetof(struct ClientSlot, _asn_ctx),
+ asn_MAP_ClientSlot_tag2el_1,
+ 2, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ 1, /* Start extensions */
+ 3 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_ClientSlot = {
+ "ClientSlot",
+ "ClientSlot",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_ClientSlot_tags_1,
+ sizeof(asn_DEF_ClientSlot_tags_1)
+ /sizeof(asn_DEF_ClientSlot_tags_1[0]), /* 1 */
+ asn_DEF_ClientSlot_tags_1, /* Same as above */
+ sizeof(asn_DEF_ClientSlot_tags_1)
+ /sizeof(asn_DEF_ClientSlot_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_ClientSlot_1,
+ 2, /* Elements count */
+ &asn_SPC_ClientSlot_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/ClientSlotStatusInd.c b/src/rspro/ClientSlotStatusInd.c
new file mode 100644
index 0000000..03110bc
--- /dev/null
+++ b/src/rspro/ClientSlotStatusInd.c
@@ -0,0 +1,79 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/ClientSlotStatusInd.h>
+
+static asn_TYPE_member_t asn_MBR_ClientSlotStatusInd_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct ClientSlotStatusInd, fromClientSlot),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_ClientSlot,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "fromClientSlot"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct ClientSlotStatusInd, toBankSlot),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_BankSlot,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "toBankSlot"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct ClientSlotStatusInd, slotPhysStatus),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_SlotPhysStatus,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "slotPhysStatus"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_ClientSlotStatusInd_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_ClientSlotStatusInd_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* fromClientSlot */
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 1 }, /* toBankSlot */
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 0 } /* slotPhysStatus */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_ClientSlotStatusInd_specs_1 = {
+ sizeof(struct ClientSlotStatusInd),
+ offsetof(struct ClientSlotStatusInd, _asn_ctx),
+ asn_MAP_ClientSlotStatusInd_tag2el_1,
+ 3, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ 2, /* Start extensions */
+ 4 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_ClientSlotStatusInd = {
+ "ClientSlotStatusInd",
+ "ClientSlotStatusInd",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_ClientSlotStatusInd_tags_1,
+ sizeof(asn_DEF_ClientSlotStatusInd_tags_1)
+ /sizeof(asn_DEF_ClientSlotStatusInd_tags_1[0]), /* 1 */
+ asn_DEF_ClientSlotStatusInd_tags_1, /* Same as above */
+ sizeof(asn_DEF_ClientSlotStatusInd_tags_1)
+ /sizeof(asn_DEF_ClientSlotStatusInd_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_ClientSlotStatusInd_1,
+ 3, /* Elements count */
+ &asn_SPC_ClientSlotStatusInd_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/ComponentIdentity.c b/src/rspro/ComponentIdentity.c
new file mode 100644
index 0000000..0703952
--- /dev/null
+++ b/src/rspro/ComponentIdentity.c
@@ -0,0 +1,139 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/ComponentIdentity.h>
+
+static asn_TYPE_member_t asn_MBR_ComponentIdentity_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct ComponentIdentity, type),
+ (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+ 0,
+ &asn_DEF_ComponentType,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "type"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct ComponentIdentity, name),
+ (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),
+ 0,
+ &asn_DEF_ComponentName,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "name"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct ComponentIdentity, software),
+ (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_ComponentName,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "software"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct ComponentIdentity, swVersion),
+ (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_ComponentName,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "swVersion"
+ },
+ { ATF_POINTER, 5, offsetof(struct ComponentIdentity, hwManufacturer),
+ (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_ComponentName,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "hwManufacturer"
+ },
+ { ATF_POINTER, 4, offsetof(struct ComponentIdentity, hwModel),
+ (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_ComponentName,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "hwModel"
+ },
+ { ATF_POINTER, 3, offsetof(struct ComponentIdentity, hwSerialNr),
+ (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_ComponentName,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "hwSerialNr"
+ },
+ { ATF_POINTER, 2, offsetof(struct ComponentIdentity, hwVersion),
+ (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_ComponentName,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "hwVersion"
+ },
+ { ATF_POINTER, 1, offsetof(struct ComponentIdentity, fwVersion),
+ (ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_ComponentName,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "fwVersion"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_ComponentIdentity_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_ComponentIdentity_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 }, /* type */
+ { (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)), 1, 0, 0 }, /* name */
+ { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* software */
+ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 3, 0, 0 }, /* swVersion */
+ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 4, 0, 0 }, /* hwManufacturer */
+ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 5, 0, 0 }, /* hwModel */
+ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 6, 0, 0 }, /* hwSerialNr */
+ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 7, 0, 0 }, /* hwVersion */
+ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 8, 0, 0 } /* fwVersion */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_ComponentIdentity_specs_1 = {
+ sizeof(struct ComponentIdentity),
+ offsetof(struct ComponentIdentity, _asn_ctx),
+ asn_MAP_ComponentIdentity_tag2el_1,
+ 9, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ 8, /* Start extensions */
+ 10 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_ComponentIdentity = {
+ "ComponentIdentity",
+ "ComponentIdentity",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_ComponentIdentity_tags_1,
+ sizeof(asn_DEF_ComponentIdentity_tags_1)
+ /sizeof(asn_DEF_ComponentIdentity_tags_1[0]), /* 1 */
+ asn_DEF_ComponentIdentity_tags_1, /* Same as above */
+ sizeof(asn_DEF_ComponentIdentity_tags_1)
+ /sizeof(asn_DEF_ComponentIdentity_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_ComponentIdentity_1,
+ 9, /* Elements count */
+ &asn_SPC_ComponentIdentity_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/ComponentName.c b/src/rspro/ComponentName.c
new file mode 100644
index 0000000..4dbed5f
--- /dev/null
+++ b/src/rspro/ComponentName.c
@@ -0,0 +1,143 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/ComponentName.h>
+
+static int check_permitted_alphabet_1(const void *sptr) {
+ /* The underlying type is IA5String */
+ const IA5String_t *st = (const IA5String_t *)sptr;
+ const uint8_t *ch = st->buf;
+ const uint8_t *end = ch + st->size;
+
+ for(; ch < end; ch++) {
+ uint8_t cv = *ch;
+ if(!(cv <= 127l)) return -1;
+ }
+ return 0;
+}
+
+int
+ComponentName_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+ asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+ const IA5String_t *st = (const IA5String_t *)sptr;
+ size_t size;
+
+ if(!sptr) {
+ _ASN_CTFAIL(app_key, td, sptr,
+ "%s: value not given (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+
+ size = st->size;
+
+ if((size >= 1l && size <= 32l)
+ && !check_permitted_alphabet_1(st)) {
+ /* Constraint check succeeded */
+ return 0;
+ } else {
+ _ASN_CTFAIL(app_key, td, sptr,
+ "%s: constraint failed (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+}
+
+/*
+ * This type is implemented using IA5String,
+ * so here we adjust the DEF accordingly.
+ */
+static void
+ComponentName_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
+ td->free_struct = asn_DEF_IA5String.free_struct;
+ td->print_struct = asn_DEF_IA5String.print_struct;
+ td->check_constraints = asn_DEF_IA5String.check_constraints;
+ td->ber_decoder = asn_DEF_IA5String.ber_decoder;
+ td->der_encoder = asn_DEF_IA5String.der_encoder;
+ td->xer_decoder = asn_DEF_IA5String.xer_decoder;
+ td->xer_encoder = asn_DEF_IA5String.xer_encoder;
+ td->uper_decoder = asn_DEF_IA5String.uper_decoder;
+ td->uper_encoder = asn_DEF_IA5String.uper_encoder;
+ td->aper_decoder = asn_DEF_IA5String.aper_decoder;
+ td->aper_encoder = asn_DEF_IA5String.aper_encoder;
+ if(!td->per_constraints)
+ td->per_constraints = asn_DEF_IA5String.per_constraints;
+ td->elements = asn_DEF_IA5String.elements;
+ td->elements_count = asn_DEF_IA5String.elements_count;
+ td->specifics = asn_DEF_IA5String.specifics;
+}
+
+void
+ComponentName_free(asn_TYPE_descriptor_t *td,
+ void *struct_ptr, int contents_only) {
+ ComponentName_1_inherit_TYPE_descriptor(td);
+ td->free_struct(td, struct_ptr, contents_only);
+}
+
+int
+ComponentName_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
+ int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+ ComponentName_1_inherit_TYPE_descriptor(td);
+ return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+asn_dec_rval_t
+ComponentName_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const void *bufptr, size_t size, int tag_mode) {
+ ComponentName_1_inherit_TYPE_descriptor(td);
+ return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
+}
+
+asn_enc_rval_t
+ComponentName_encode_der(asn_TYPE_descriptor_t *td,
+ void *structure, int tag_mode, ber_tlv_tag_t tag,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ ComponentName_1_inherit_TYPE_descriptor(td);
+ return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+asn_dec_rval_t
+ComponentName_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const char *opt_mname, const void *bufptr, size_t size) {
+ ComponentName_1_inherit_TYPE_descriptor(td);
+ return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
+asn_enc_rval_t
+ComponentName_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
+ int ilevel, enum xer_encoder_flags_e flags,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ ComponentName_1_inherit_TYPE_descriptor(td);
+ return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
+}
+
+static const ber_tlv_tag_t asn_DEF_ComponentName_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ComponentName = {
+ "ComponentName",
+ "ComponentName",
+ ComponentName_free,
+ ComponentName_print,
+ ComponentName_constraint,
+ ComponentName_decode_ber,
+ ComponentName_encode_der,
+ ComponentName_decode_xer,
+ ComponentName_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_ComponentName_tags_1,
+ sizeof(asn_DEF_ComponentName_tags_1)
+ /sizeof(asn_DEF_ComponentName_tags_1[0]), /* 1 */
+ asn_DEF_ComponentName_tags_1, /* Same as above */
+ sizeof(asn_DEF_ComponentName_tags_1)
+ /sizeof(asn_DEF_ComponentName_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ 0, 0, /* No members */
+ 0 /* No specifics */
+};
+
diff --git a/src/rspro/ComponentType.c b/src/rspro/ComponentType.c
new file mode 100644
index 0000000..855625d
--- /dev/null
+++ b/src/rspro/ComponentType.c
@@ -0,0 +1,130 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/ComponentType.h>
+
+int
+ComponentType_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+ asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+ /* Replace with underlying type checker */
+ td->check_constraints = asn_DEF_NativeEnumerated.check_constraints;
+ return td->check_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static void
+ComponentType_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
+ td->free_struct = asn_DEF_NativeEnumerated.free_struct;
+ td->print_struct = asn_DEF_NativeEnumerated.print_struct;
+ td->check_constraints = asn_DEF_NativeEnumerated.check_constraints;
+ td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder;
+ td->der_encoder = asn_DEF_NativeEnumerated.der_encoder;
+ td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder;
+ td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder;
+ td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder;
+ td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder;
+ td->aper_decoder = asn_DEF_NativeEnumerated.aper_decoder;
+ td->aper_encoder = asn_DEF_NativeEnumerated.aper_encoder;
+ if(!td->per_constraints)
+ td->per_constraints = asn_DEF_NativeEnumerated.per_constraints;
+ td->elements = asn_DEF_NativeEnumerated.elements;
+ td->elements_count = asn_DEF_NativeEnumerated.elements_count;
+ /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */
+}
+
+void
+ComponentType_free(asn_TYPE_descriptor_t *td,
+ void *struct_ptr, int contents_only) {
+ ComponentType_1_inherit_TYPE_descriptor(td);
+ td->free_struct(td, struct_ptr, contents_only);
+}
+
+int
+ComponentType_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
+ int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+ ComponentType_1_inherit_TYPE_descriptor(td);
+ return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+asn_dec_rval_t
+ComponentType_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const void *bufptr, size_t size, int tag_mode) {
+ ComponentType_1_inherit_TYPE_descriptor(td);
+ return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
+}
+
+asn_enc_rval_t
+ComponentType_encode_der(asn_TYPE_descriptor_t *td,
+ void *structure, int tag_mode, ber_tlv_tag_t tag,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ ComponentType_1_inherit_TYPE_descriptor(td);
+ return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+asn_dec_rval_t
+ComponentType_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const char *opt_mname, const void *bufptr, size_t size) {
+ ComponentType_1_inherit_TYPE_descriptor(td);
+ return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
+asn_enc_rval_t
+ComponentType_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
+ int ilevel, enum xer_encoder_flags_e flags,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ ComponentType_1_inherit_TYPE_descriptor(td);
+ return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
+}
+
+static const asn_INTEGER_enum_map_t asn_MAP_ComponentType_value2enum_1[] = {
+ { 0, 12, "remsimClient" },
+ { 1, 12, "remsimServer" },
+ { 2, 11, "remsimBankd" }
+};
+static const unsigned int asn_MAP_ComponentType_enum2value_1[] = {
+ 2, /* remsimBankd(2) */
+ 0, /* remsimClient(0) */
+ 1 /* remsimServer(1) */
+};
+static const asn_INTEGER_specifics_t asn_SPC_ComponentType_specs_1 = {
+ asn_MAP_ComponentType_value2enum_1, /* "tag" => N; sorted by tag */
+ asn_MAP_ComponentType_enum2value_1, /* N => "tag"; sorted by N */
+ 3, /* Number of elements in the maps */
+ 0, /* Enumeration is not extensible */
+ 1, /* Strict enumeration */
+ 0, /* Native long size */
+ 0
+};
+static const ber_tlv_tag_t asn_DEF_ComponentType_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ComponentType = {
+ "ComponentType",
+ "ComponentType",
+ ComponentType_free,
+ ComponentType_print,
+ ComponentType_constraint,
+ ComponentType_decode_ber,
+ ComponentType_encode_der,
+ ComponentType_decode_xer,
+ ComponentType_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_ComponentType_tags_1,
+ sizeof(asn_DEF_ComponentType_tags_1)
+ /sizeof(asn_DEF_ComponentType_tags_1[0]), /* 1 */
+ asn_DEF_ComponentType_tags_1, /* Same as above */
+ sizeof(asn_DEF_ComponentType_tags_1)
+ /sizeof(asn_DEF_ComponentType_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ 0, 0, /* Defined elsewhere */
+ &asn_SPC_ComponentType_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/ConfigClientReq.c b/src/rspro/ConfigClientReq.c
new file mode 100644
index 0000000..1221b4a
--- /dev/null
+++ b/src/rspro/ConfigClientReq.c
@@ -0,0 +1,69 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/ConfigClientReq.h>
+
+static asn_TYPE_member_t asn_MBR_ConfigClientReq_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct ConfigClientReq, clientId),
+ (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+ 0,
+ &asn_DEF_ClientId,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "clientId"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct ConfigClientReq, bankd),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_IpPort,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "bankd"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_ConfigClientReq_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_ConfigClientReq_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* clientId */
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 } /* bankd */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_ConfigClientReq_specs_1 = {
+ sizeof(struct ConfigClientReq),
+ offsetof(struct ConfigClientReq, _asn_ctx),
+ asn_MAP_ConfigClientReq_tag2el_1,
+ 2, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ 1, /* Start extensions */
+ 3 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_ConfigClientReq = {
+ "ConfigClientReq",
+ "ConfigClientReq",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_ConfigClientReq_tags_1,
+ sizeof(asn_DEF_ConfigClientReq_tags_1)
+ /sizeof(asn_DEF_ConfigClientReq_tags_1[0]), /* 1 */
+ asn_DEF_ConfigClientReq_tags_1, /* Same as above */
+ sizeof(asn_DEF_ConfigClientReq_tags_1)
+ /sizeof(asn_DEF_ConfigClientReq_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_ConfigClientReq_1,
+ 2, /* Elements count */
+ &asn_SPC_ConfigClientReq_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/ConfigClientRes.c b/src/rspro/ConfigClientRes.c
new file mode 100644
index 0000000..e30fda1
--- /dev/null
+++ b/src/rspro/ConfigClientRes.c
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/ConfigClientRes.h>
+
+static asn_TYPE_member_t asn_MBR_ConfigClientRes_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct ConfigClientRes, result),
+ (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+ 0,
+ &asn_DEF_ResultCode,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "result"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_ConfigClientRes_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_ConfigClientRes_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* result */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_ConfigClientRes_specs_1 = {
+ sizeof(struct ConfigClientRes),
+ offsetof(struct ConfigClientRes, _asn_ctx),
+ asn_MAP_ConfigClientRes_tag2el_1,
+ 1, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ 0, /* Start extensions */
+ 2 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_ConfigClientRes = {
+ "ConfigClientRes",
+ "ConfigClientRes",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_ConfigClientRes_tags_1,
+ sizeof(asn_DEF_ConfigClientRes_tags_1)
+ /sizeof(asn_DEF_ConfigClientRes_tags_1[0]), /* 1 */
+ asn_DEF_ConfigClientRes_tags_1, /* Same as above */
+ sizeof(asn_DEF_ConfigClientRes_tags_1)
+ /sizeof(asn_DEF_ConfigClientRes_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_ConfigClientRes_1,
+ 1, /* Elements count */
+ &asn_SPC_ConfigClientRes_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/ConnectBankReq.c b/src/rspro/ConnectBankReq.c
new file mode 100644
index 0000000..0d33aa8
--- /dev/null
+++ b/src/rspro/ConnectBankReq.c
@@ -0,0 +1,79 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/ConnectBankReq.h>
+
+static asn_TYPE_member_t asn_MBR_ConnectBankReq_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct ConnectBankReq, identity),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_ComponentIdentity,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "identity"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct ConnectBankReq, bankId),
+ (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+ 0,
+ &asn_DEF_BankId,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "bankId"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct ConnectBankReq, numberOfSlots),
+ (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+ 0,
+ &asn_DEF_SlotNumber,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "numberOfSlots"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_ConnectBankReq_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_ConnectBankReq_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 1 }, /* bankId */
+ { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 0 }, /* numberOfSlots */
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* identity */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_ConnectBankReq_specs_1 = {
+ sizeof(struct ConnectBankReq),
+ offsetof(struct ConnectBankReq, _asn_ctx),
+ asn_MAP_ConnectBankReq_tag2el_1,
+ 3, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ 2, /* Start extensions */
+ 4 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_ConnectBankReq = {
+ "ConnectBankReq",
+ "ConnectBankReq",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_ConnectBankReq_tags_1,
+ sizeof(asn_DEF_ConnectBankReq_tags_1)
+ /sizeof(asn_DEF_ConnectBankReq_tags_1[0]), /* 1 */
+ asn_DEF_ConnectBankReq_tags_1, /* Same as above */
+ sizeof(asn_DEF_ConnectBankReq_tags_1)
+ /sizeof(asn_DEF_ConnectBankReq_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_ConnectBankReq_1,
+ 3, /* Elements count */
+ &asn_SPC_ConnectBankReq_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/ConnectBankRes.c b/src/rspro/ConnectBankRes.c
new file mode 100644
index 0000000..091aedd
--- /dev/null
+++ b/src/rspro/ConnectBankRes.c
@@ -0,0 +1,69 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/ConnectBankRes.h>
+
+static asn_TYPE_member_t asn_MBR_ConnectBankRes_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct ConnectBankRes, identity),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_ComponentIdentity,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "identity"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct ConnectBankRes, result),
+ (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+ 0,
+ &asn_DEF_ResultCode,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "result"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_ConnectBankRes_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_ConnectBankRes_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* result */
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* identity */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_ConnectBankRes_specs_1 = {
+ sizeof(struct ConnectBankRes),
+ offsetof(struct ConnectBankRes, _asn_ctx),
+ asn_MAP_ConnectBankRes_tag2el_1,
+ 2, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ 1, /* Start extensions */
+ 3 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_ConnectBankRes = {
+ "ConnectBankRes",
+ "ConnectBankRes",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_ConnectBankRes_tags_1,
+ sizeof(asn_DEF_ConnectBankRes_tags_1)
+ /sizeof(asn_DEF_ConnectBankRes_tags_1[0]), /* 1 */
+ asn_DEF_ConnectBankRes_tags_1, /* Same as above */
+ sizeof(asn_DEF_ConnectBankRes_tags_1)
+ /sizeof(asn_DEF_ConnectBankRes_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_ConnectBankRes_1,
+ 2, /* Elements count */
+ &asn_SPC_ConnectBankRes_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/ConnectClientReq.c b/src/rspro/ConnectClientReq.c
new file mode 100644
index 0000000..84decb3
--- /dev/null
+++ b/src/rspro/ConnectClientReq.c
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/ConnectClientReq.h>
+
+static asn_TYPE_member_t asn_MBR_ConnectClientReq_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct ConnectClientReq, identity),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_ComponentIdentity,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "identity"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_ConnectClientReq_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_ConnectClientReq_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* identity */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_ConnectClientReq_specs_1 = {
+ sizeof(struct ConnectClientReq),
+ offsetof(struct ConnectClientReq, _asn_ctx),
+ asn_MAP_ConnectClientReq_tag2el_1,
+ 1, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ 0, /* Start extensions */
+ 2 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_ConnectClientReq = {
+ "ConnectClientReq",
+ "ConnectClientReq",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_ConnectClientReq_tags_1,
+ sizeof(asn_DEF_ConnectClientReq_tags_1)
+ /sizeof(asn_DEF_ConnectClientReq_tags_1[0]), /* 1 */
+ asn_DEF_ConnectClientReq_tags_1, /* Same as above */
+ sizeof(asn_DEF_ConnectClientReq_tags_1)
+ /sizeof(asn_DEF_ConnectClientReq_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_ConnectClientReq_1,
+ 1, /* Elements count */
+ &asn_SPC_ConnectClientReq_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/ConnectClientRes.c b/src/rspro/ConnectClientRes.c
new file mode 100644
index 0000000..676e22e
--- /dev/null
+++ b/src/rspro/ConnectClientRes.c
@@ -0,0 +1,69 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/ConnectClientRes.h>
+
+static asn_TYPE_member_t asn_MBR_ConnectClientRes_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct ConnectClientRes, identity),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_ComponentIdentity,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "identity"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct ConnectClientRes, result),
+ (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+ 0,
+ &asn_DEF_ResultCode,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "result"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_ConnectClientRes_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_ConnectClientRes_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 }, /* result */
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* identity */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_ConnectClientRes_specs_1 = {
+ sizeof(struct ConnectClientRes),
+ offsetof(struct ConnectClientRes, _asn_ctx),
+ asn_MAP_ConnectClientRes_tag2el_1,
+ 2, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ 1, /* Start extensions */
+ 3 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_ConnectClientRes = {
+ "ConnectClientRes",
+ "ConnectClientRes",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_ConnectClientRes_tags_1,
+ sizeof(asn_DEF_ConnectClientRes_tags_1)
+ /sizeof(asn_DEF_ConnectClientRes_tags_1[0]), /* 1 */
+ asn_DEF_ConnectClientRes_tags_1, /* Same as above */
+ sizeof(asn_DEF_ConnectClientRes_tags_1)
+ /sizeof(asn_DEF_ConnectClientRes_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_ConnectClientRes_1,
+ 2, /* Elements count */
+ &asn_SPC_ConnectClientRes_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/CreateMappingReq.c b/src/rspro/CreateMappingReq.c
new file mode 100644
index 0000000..23b2d4f
--- /dev/null
+++ b/src/rspro/CreateMappingReq.c
@@ -0,0 +1,69 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/CreateMappingReq.h>
+
+static asn_TYPE_member_t asn_MBR_CreateMappingReq_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct CreateMappingReq, client),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_ClientSlot,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "client"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct CreateMappingReq, bank),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_BankSlot,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "bank"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_CreateMappingReq_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_CreateMappingReq_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* client */
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* bank */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_CreateMappingReq_specs_1 = {
+ sizeof(struct CreateMappingReq),
+ offsetof(struct CreateMappingReq, _asn_ctx),
+ asn_MAP_CreateMappingReq_tag2el_1,
+ 2, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ 1, /* Start extensions */
+ 3 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_CreateMappingReq = {
+ "CreateMappingReq",
+ "CreateMappingReq",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_CreateMappingReq_tags_1,
+ sizeof(asn_DEF_CreateMappingReq_tags_1)
+ /sizeof(asn_DEF_CreateMappingReq_tags_1[0]), /* 1 */
+ asn_DEF_CreateMappingReq_tags_1, /* Same as above */
+ sizeof(asn_DEF_CreateMappingReq_tags_1)
+ /sizeof(asn_DEF_CreateMappingReq_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_CreateMappingReq_1,
+ 2, /* Elements count */
+ &asn_SPC_CreateMappingReq_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/CreateMappingRes.c b/src/rspro/CreateMappingRes.c
new file mode 100644
index 0000000..d0c6048
--- /dev/null
+++ b/src/rspro/CreateMappingRes.c
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/CreateMappingRes.h>
+
+static asn_TYPE_member_t asn_MBR_CreateMappingRes_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct CreateMappingRes, result),
+ (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+ 0,
+ &asn_DEF_ResultCode,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "result"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_CreateMappingRes_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_CreateMappingRes_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* result */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_CreateMappingRes_specs_1 = {
+ sizeof(struct CreateMappingRes),
+ offsetof(struct CreateMappingRes, _asn_ctx),
+ asn_MAP_CreateMappingRes_tag2el_1,
+ 1, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ 0, /* Start extensions */
+ 2 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_CreateMappingRes = {
+ "CreateMappingRes",
+ "CreateMappingRes",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_CreateMappingRes_tags_1,
+ sizeof(asn_DEF_CreateMappingRes_tags_1)
+ /sizeof(asn_DEF_CreateMappingRes_tags_1[0]), /* 1 */
+ asn_DEF_CreateMappingRes_tags_1, /* Same as above */
+ sizeof(asn_DEF_CreateMappingRes_tags_1)
+ /sizeof(asn_DEF_CreateMappingRes_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_CreateMappingRes_1,
+ 1, /* Elements count */
+ &asn_SPC_CreateMappingRes_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/IpAddress.c b/src/rspro/IpAddress.c
new file mode 100644
index 0000000..4dfb46d
--- /dev/null
+++ b/src/rspro/IpAddress.c
@@ -0,0 +1,65 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/IpAddress.h>
+
+static asn_TYPE_member_t asn_MBR_IpAddress_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct IpAddress, choice.ipv4),
+ (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_Ipv4Address,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "ipv4"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct IpAddress, choice.ipv6),
+ (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_Ipv6Address,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "ipv6"
+ },
+};
+static const asn_TYPE_tag2member_t asn_MAP_IpAddress_tag2el_1[] = {
+ { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ipv4 */
+ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ipv6 */
+};
+static asn_CHOICE_specifics_t asn_SPC_IpAddress_specs_1 = {
+ sizeof(struct IpAddress),
+ offsetof(struct IpAddress, _asn_ctx),
+ offsetof(struct IpAddress, present),
+ sizeof(((struct IpAddress *)0)->present),
+ asn_MAP_IpAddress_tag2el_1,
+ 2, /* Count of tags in the map */
+ 0,
+ -1 /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_IpAddress = {
+ "IpAddress",
+ "IpAddress",
+ CHOICE_free,
+ CHOICE_print,
+ CHOICE_constraint,
+ CHOICE_decode_ber,
+ CHOICE_encode_der,
+ CHOICE_decode_xer,
+ CHOICE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ CHOICE_outmost_tag,
+ 0, /* No effective tags (pointer) */
+ 0, /* No effective tags (count) */
+ 0, /* No tags (pointer) */
+ 0, /* No tags (count) */
+ 0, /* No PER visible constraints */
+ asn_MBR_IpAddress_1,
+ 2, /* Elements count */
+ &asn_SPC_IpAddress_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/IpPort.c b/src/rspro/IpPort.c
new file mode 100644
index 0000000..003bbdb
--- /dev/null
+++ b/src/rspro/IpPort.c
@@ -0,0 +1,70 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/IpPort.h>
+
+static asn_TYPE_member_t asn_MBR_IpPort_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct IpPort, ip),
+ -1 /* Ambiguous tag (CHOICE?) */,
+ 0,
+ &asn_DEF_IpAddress,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "ip"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct IpPort, port),
+ (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+ 0,
+ &asn_DEF_PortNumber,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "port"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_IpPort_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_IpPort_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* port */
+ { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ipv4 */
+ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 } /* ipv6 */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_IpPort_specs_1 = {
+ sizeof(struct IpPort),
+ offsetof(struct IpPort, _asn_ctx),
+ asn_MAP_IpPort_tag2el_1,
+ 3, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ -1, /* Start extensions */
+ -1 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_IpPort = {
+ "IpPort",
+ "IpPort",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_IpPort_tags_1,
+ sizeof(asn_DEF_IpPort_tags_1)
+ /sizeof(asn_DEF_IpPort_tags_1[0]), /* 1 */
+ asn_DEF_IpPort_tags_1, /* Same as above */
+ sizeof(asn_DEF_IpPort_tags_1)
+ /sizeof(asn_DEF_IpPort_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_IpPort_1,
+ 2, /* Elements count */
+ &asn_SPC_IpPort_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/Ipv4Address.c b/src/rspro/Ipv4Address.c
new file mode 100644
index 0000000..03ec023
--- /dev/null
+++ b/src/rspro/Ipv4Address.c
@@ -0,0 +1,129 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/Ipv4Address.h>
+
+int
+Ipv4Address_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+ asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+ const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+ size_t size;
+
+ if(!sptr) {
+ _ASN_CTFAIL(app_key, td, sptr,
+ "%s: value not given (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+
+ size = st->size;
+
+ if((size == 4l)) {
+ /* Constraint check succeeded */
+ return 0;
+ } else {
+ _ASN_CTFAIL(app_key, td, sptr,
+ "%s: constraint failed (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static void
+Ipv4Address_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
+ td->free_struct = asn_DEF_OCTET_STRING.free_struct;
+ td->print_struct = asn_DEF_OCTET_STRING.print_struct;
+ td->check_constraints = asn_DEF_OCTET_STRING.check_constraints;
+ td->ber_decoder = asn_DEF_OCTET_STRING.ber_decoder;
+ td->der_encoder = asn_DEF_OCTET_STRING.der_encoder;
+ td->xer_decoder = asn_DEF_OCTET_STRING.xer_decoder;
+ td->xer_encoder = asn_DEF_OCTET_STRING.xer_encoder;
+ td->uper_decoder = asn_DEF_OCTET_STRING.uper_decoder;
+ td->uper_encoder = asn_DEF_OCTET_STRING.uper_encoder;
+ td->aper_decoder = asn_DEF_OCTET_STRING.aper_decoder;
+ td->aper_encoder = asn_DEF_OCTET_STRING.aper_encoder;
+ if(!td->per_constraints)
+ td->per_constraints = asn_DEF_OCTET_STRING.per_constraints;
+ td->elements = asn_DEF_OCTET_STRING.elements;
+ td->elements_count = asn_DEF_OCTET_STRING.elements_count;
+ td->specifics = asn_DEF_OCTET_STRING.specifics;
+}
+
+void
+Ipv4Address_free(asn_TYPE_descriptor_t *td,
+ void *struct_ptr, int contents_only) {
+ Ipv4Address_1_inherit_TYPE_descriptor(td);
+ td->free_struct(td, struct_ptr, contents_only);
+}
+
+int
+Ipv4Address_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
+ int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+ Ipv4Address_1_inherit_TYPE_descriptor(td);
+ return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+asn_dec_rval_t
+Ipv4Address_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const void *bufptr, size_t size, int tag_mode) {
+ Ipv4Address_1_inherit_TYPE_descriptor(td);
+ return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
+}
+
+asn_enc_rval_t
+Ipv4Address_encode_der(asn_TYPE_descriptor_t *td,
+ void *structure, int tag_mode, ber_tlv_tag_t tag,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ Ipv4Address_1_inherit_TYPE_descriptor(td);
+ return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+asn_dec_rval_t
+Ipv4Address_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const char *opt_mname, const void *bufptr, size_t size) {
+ Ipv4Address_1_inherit_TYPE_descriptor(td);
+ return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
+asn_enc_rval_t
+Ipv4Address_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
+ int ilevel, enum xer_encoder_flags_e flags,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ Ipv4Address_1_inherit_TYPE_descriptor(td);
+ return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
+}
+
+static const ber_tlv_tag_t asn_DEF_Ipv4Address_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Ipv4Address = {
+ "Ipv4Address",
+ "Ipv4Address",
+ Ipv4Address_free,
+ Ipv4Address_print,
+ Ipv4Address_constraint,
+ Ipv4Address_decode_ber,
+ Ipv4Address_encode_der,
+ Ipv4Address_decode_xer,
+ Ipv4Address_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_Ipv4Address_tags_1,
+ sizeof(asn_DEF_Ipv4Address_tags_1)
+ /sizeof(asn_DEF_Ipv4Address_tags_1[0]), /* 1 */
+ asn_DEF_Ipv4Address_tags_1, /* Same as above */
+ sizeof(asn_DEF_Ipv4Address_tags_1)
+ /sizeof(asn_DEF_Ipv4Address_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ 0, 0, /* No members */
+ 0 /* No specifics */
+};
+
diff --git a/src/rspro/Ipv6Address.c b/src/rspro/Ipv6Address.c
new file mode 100644
index 0000000..2f1333c
--- /dev/null
+++ b/src/rspro/Ipv6Address.c
@@ -0,0 +1,129 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/Ipv6Address.h>
+
+int
+Ipv6Address_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+ asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+ const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+ size_t size;
+
+ if(!sptr) {
+ _ASN_CTFAIL(app_key, td, sptr,
+ "%s: value not given (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+
+ size = st->size;
+
+ if((size == 16l)) {
+ /* Constraint check succeeded */
+ return 0;
+ } else {
+ _ASN_CTFAIL(app_key, td, sptr,
+ "%s: constraint failed (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+static void
+Ipv6Address_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
+ td->free_struct = asn_DEF_OCTET_STRING.free_struct;
+ td->print_struct = asn_DEF_OCTET_STRING.print_struct;
+ td->check_constraints = asn_DEF_OCTET_STRING.check_constraints;
+ td->ber_decoder = asn_DEF_OCTET_STRING.ber_decoder;
+ td->der_encoder = asn_DEF_OCTET_STRING.der_encoder;
+ td->xer_decoder = asn_DEF_OCTET_STRING.xer_decoder;
+ td->xer_encoder = asn_DEF_OCTET_STRING.xer_encoder;
+ td->uper_decoder = asn_DEF_OCTET_STRING.uper_decoder;
+ td->uper_encoder = asn_DEF_OCTET_STRING.uper_encoder;
+ td->aper_decoder = asn_DEF_OCTET_STRING.aper_decoder;
+ td->aper_encoder = asn_DEF_OCTET_STRING.aper_encoder;
+ if(!td->per_constraints)
+ td->per_constraints = asn_DEF_OCTET_STRING.per_constraints;
+ td->elements = asn_DEF_OCTET_STRING.elements;
+ td->elements_count = asn_DEF_OCTET_STRING.elements_count;
+ td->specifics = asn_DEF_OCTET_STRING.specifics;
+}
+
+void
+Ipv6Address_free(asn_TYPE_descriptor_t *td,
+ void *struct_ptr, int contents_only) {
+ Ipv6Address_1_inherit_TYPE_descriptor(td);
+ td->free_struct(td, struct_ptr, contents_only);
+}
+
+int
+Ipv6Address_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
+ int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+ Ipv6Address_1_inherit_TYPE_descriptor(td);
+ return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+asn_dec_rval_t
+Ipv6Address_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const void *bufptr, size_t size, int tag_mode) {
+ Ipv6Address_1_inherit_TYPE_descriptor(td);
+ return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
+}
+
+asn_enc_rval_t
+Ipv6Address_encode_der(asn_TYPE_descriptor_t *td,
+ void *structure, int tag_mode, ber_tlv_tag_t tag,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ Ipv6Address_1_inherit_TYPE_descriptor(td);
+ return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+asn_dec_rval_t
+Ipv6Address_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const char *opt_mname, const void *bufptr, size_t size) {
+ Ipv6Address_1_inherit_TYPE_descriptor(td);
+ return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
+asn_enc_rval_t
+Ipv6Address_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
+ int ilevel, enum xer_encoder_flags_e flags,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ Ipv6Address_1_inherit_TYPE_descriptor(td);
+ return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
+}
+
+static const ber_tlv_tag_t asn_DEF_Ipv6Address_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Ipv6Address = {
+ "Ipv6Address",
+ "Ipv6Address",
+ Ipv6Address_free,
+ Ipv6Address_print,
+ Ipv6Address_constraint,
+ Ipv6Address_decode_ber,
+ Ipv6Address_encode_der,
+ Ipv6Address_decode_xer,
+ Ipv6Address_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_Ipv6Address_tags_1,
+ sizeof(asn_DEF_Ipv6Address_tags_1)
+ /sizeof(asn_DEF_Ipv6Address_tags_1[0]), /* 1 */
+ asn_DEF_Ipv6Address_tags_1, /* Same as above */
+ sizeof(asn_DEF_Ipv6Address_tags_1)
+ /sizeof(asn_DEF_Ipv6Address_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ 0, 0, /* No members */
+ 0 /* No specifics */
+};
+
diff --git a/src/rspro/Makefile.am b/src/rspro/Makefile.am
new file mode 100644
index 0000000..dc3a822
--- /dev/null
+++ b/src/rspro/Makefile.am
@@ -0,0 +1,89 @@
+ASN_MODULE_SOURCES = \
+ ATR.c \
+ BankId.c \
+ BankSlot.c \
+ BankSlotStatusInd.c \
+ ClientId.c \
+ ClientSlot.c \
+ ClientSlotStatusInd.c \
+ ComponentIdentity.c \
+ ComponentName.c \
+ ComponentType.c \
+ ConfigClientReq.c \
+ ConfigClientRes.c \
+ ConnectBankReq.c \
+ ConnectBankRes.c \
+ ConnectClientReq.c \
+ ConnectClientRes.c \
+ CreateMappingReq.c \
+ CreateMappingRes.c \
+ IpAddress.c \
+ IpPort.c \
+ Ipv4Address.c \
+ Ipv6Address.c \
+ OperationTag.c \
+ PortNumber.c \
+ RemoveMappingReq.c \
+ RemoveMappingRes.c \
+ ResultCode.c \
+ RsproPDU.c \
+ RsproPDUchoice.c \
+ SetAtrReq.c \
+ SetAtrRes.c \
+ SlotNumber.c \
+ SlotPhysStatus.c \
+ TpduCardToModem.c \
+ TpduFlags.c \
+ TpduModemToCard.c \
+ $(NULL)
+
+ASN_MODULE_INC = \
+ ATR.h \
+ BankId.h \
+ BankSlot.h \
+ BankSlotStatusInd.h \
+ ClientId.h \
+ ClientSlot.h \
+ ClientSlotStatusInd.h \
+ ComponentIdentity.h \
+ ComponentName.h \
+ ComponentType.h \
+ ConfigClientReq.h \
+ ConfigClientRes.h \
+ ConnectBankReq.h \
+ ConnectBankRes.h \
+ ConnectClientReq.h \
+ ConnectClientRes.h \
+ CreateMappingReq.h \
+ CreateMappingRes.h \
+ IpAddress.h \
+ IpPort.h \
+ Ipv4Address.h \
+ Ipv6Address.h \
+ OperationTag.h \
+ PortNumber.h \
+ RemoveMappingReq.h \
+ RemoveMappingRes.h \
+ ResultCode.h \
+ RsproPDU.h \
+ RsproPDUchoice.h \
+ SetAtrReq.h \
+ SetAtrRes.h \
+ SlotNumber.h \
+ SlotPhysStatus.h \
+ TpduCardToModem.h \
+ TpduFlags.h \
+ TpduModemToCard.h \
+ $(NULL)
+
+AM_CFLAGS = -I$(top_srcdir)/include $(ASN1C_CFLAGS) $(OSMOCORE_CFLAGS)
+
+noinst_LTLIBRARIES=libosmo-asn1-rspro.la
+libosmo_asn1_rspro_la_SOURCES=$(ASN_MODULE_SOURCES)
+libosmo_asn1_rspro_la_LIBADD=$(ASN1C_LDADD)
+
+regen: regenerate-from-asn1-source
+
+regenerate-from-asn1-source:
+ asn1c -R $(top_srcdir)/asn1/RSPRO.asn
+ $(top_srcdir)/move-asn1-header-files.sh osmocom/rspro $(ASN_MODULE_INC)
diff --git a/src/rspro/OperationTag.c b/src/rspro/OperationTag.c
new file mode 100644
index 0000000..4286b22
--- /dev/null
+++ b/src/rspro/OperationTag.c
@@ -0,0 +1,128 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/OperationTag.h>
+
+int
+OperationTag_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+ asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+ long value;
+
+ if(!sptr) {
+ _ASN_CTFAIL(app_key, td, sptr,
+ "%s: value not given (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+
+ value = *(const long *)sptr;
+
+ if((value >= 0l && value <= 2147483647l)) {
+ /* Constraint check succeeded */
+ return 0;
+ } else {
+ _ASN_CTFAIL(app_key, td, sptr,
+ "%s: constraint failed (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static void
+OperationTag_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
+ td->free_struct = asn_DEF_NativeInteger.free_struct;
+ td->print_struct = asn_DEF_NativeInteger.print_struct;
+ td->check_constraints = asn_DEF_NativeInteger.check_constraints;
+ td->ber_decoder = asn_DEF_NativeInteger.ber_decoder;
+ td->der_encoder = asn_DEF_NativeInteger.der_encoder;
+ td->xer_decoder = asn_DEF_NativeInteger.xer_decoder;
+ td->xer_encoder = asn_DEF_NativeInteger.xer_encoder;
+ td->uper_decoder = asn_DEF_NativeInteger.uper_decoder;
+ td->uper_encoder = asn_DEF_NativeInteger.uper_encoder;
+ td->aper_decoder = asn_DEF_NativeInteger.aper_decoder;
+ td->aper_encoder = asn_DEF_NativeInteger.aper_encoder;
+ if(!td->per_constraints)
+ td->per_constraints = asn_DEF_NativeInteger.per_constraints;
+ td->elements = asn_DEF_NativeInteger.elements;
+ td->elements_count = asn_DEF_NativeInteger.elements_count;
+ td->specifics = asn_DEF_NativeInteger.specifics;
+}
+
+void
+OperationTag_free(asn_TYPE_descriptor_t *td,
+ void *struct_ptr, int contents_only) {
+ OperationTag_1_inherit_TYPE_descriptor(td);
+ td->free_struct(td, struct_ptr, contents_only);
+}
+
+int
+OperationTag_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
+ int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+ OperationTag_1_inherit_TYPE_descriptor(td);
+ return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+asn_dec_rval_t
+OperationTag_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const void *bufptr, size_t size, int tag_mode) {
+ OperationTag_1_inherit_TYPE_descriptor(td);
+ return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
+}
+
+asn_enc_rval_t
+OperationTag_encode_der(asn_TYPE_descriptor_t *td,
+ void *structure, int tag_mode, ber_tlv_tag_t tag,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ OperationTag_1_inherit_TYPE_descriptor(td);
+ return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+asn_dec_rval_t
+OperationTag_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const char *opt_mname, const void *bufptr, size_t size) {
+ OperationTag_1_inherit_TYPE_descriptor(td);
+ return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
+asn_enc_rval_t
+OperationTag_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
+ int ilevel, enum xer_encoder_flags_e flags,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ OperationTag_1_inherit_TYPE_descriptor(td);
+ return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
+}
+
+static const ber_tlv_tag_t asn_DEF_OperationTag_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_OperationTag = {
+ "OperationTag",
+ "OperationTag",
+ OperationTag_free,
+ OperationTag_print,
+ OperationTag_constraint,
+ OperationTag_decode_ber,
+ OperationTag_encode_der,
+ OperationTag_decode_xer,
+ OperationTag_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_OperationTag_tags_1,
+ sizeof(asn_DEF_OperationTag_tags_1)
+ /sizeof(asn_DEF_OperationTag_tags_1[0]), /* 1 */
+ asn_DEF_OperationTag_tags_1, /* Same as above */
+ sizeof(asn_DEF_OperationTag_tags_1)
+ /sizeof(asn_DEF_OperationTag_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ 0, 0, /* No members */
+ 0 /* No specifics */
+};
+
diff --git a/src/rspro/PortNumber.c b/src/rspro/PortNumber.c
new file mode 100644
index 0000000..7197d00
--- /dev/null
+++ b/src/rspro/PortNumber.c
@@ -0,0 +1,128 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/PortNumber.h>
+
+int
+PortNumber_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+ asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+ long value;
+
+ if(!sptr) {
+ _ASN_CTFAIL(app_key, td, sptr,
+ "%s: value not given (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+
+ value = *(const long *)sptr;
+
+ if((value >= 0l && value <= 65535l)) {
+ /* Constraint check succeeded */
+ return 0;
+ } else {
+ _ASN_CTFAIL(app_key, td, sptr,
+ "%s: constraint failed (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static void
+PortNumber_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
+ td->free_struct = asn_DEF_NativeInteger.free_struct;
+ td->print_struct = asn_DEF_NativeInteger.print_struct;
+ td->check_constraints = asn_DEF_NativeInteger.check_constraints;
+ td->ber_decoder = asn_DEF_NativeInteger.ber_decoder;
+ td->der_encoder = asn_DEF_NativeInteger.der_encoder;
+ td->xer_decoder = asn_DEF_NativeInteger.xer_decoder;
+ td->xer_encoder = asn_DEF_NativeInteger.xer_encoder;
+ td->uper_decoder = asn_DEF_NativeInteger.uper_decoder;
+ td->uper_encoder = asn_DEF_NativeInteger.uper_encoder;
+ td->aper_decoder = asn_DEF_NativeInteger.aper_decoder;
+ td->aper_encoder = asn_DEF_NativeInteger.aper_encoder;
+ if(!td->per_constraints)
+ td->per_constraints = asn_DEF_NativeInteger.per_constraints;
+ td->elements = asn_DEF_NativeInteger.elements;
+ td->elements_count = asn_DEF_NativeInteger.elements_count;
+ td->specifics = asn_DEF_NativeInteger.specifics;
+}
+
+void
+PortNumber_free(asn_TYPE_descriptor_t *td,
+ void *struct_ptr, int contents_only) {
+ PortNumber_1_inherit_TYPE_descriptor(td);
+ td->free_struct(td, struct_ptr, contents_only);
+}
+
+int
+PortNumber_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
+ int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+ PortNumber_1_inherit_TYPE_descriptor(td);
+ return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+asn_dec_rval_t
+PortNumber_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const void *bufptr, size_t size, int tag_mode) {
+ PortNumber_1_inherit_TYPE_descriptor(td);
+ return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
+}
+
+asn_enc_rval_t
+PortNumber_encode_der(asn_TYPE_descriptor_t *td,
+ void *structure, int tag_mode, ber_tlv_tag_t tag,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ PortNumber_1_inherit_TYPE_descriptor(td);
+ return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+asn_dec_rval_t
+PortNumber_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const char *opt_mname, const void *bufptr, size_t size) {
+ PortNumber_1_inherit_TYPE_descriptor(td);
+ return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
+asn_enc_rval_t
+PortNumber_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
+ int ilevel, enum xer_encoder_flags_e flags,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ PortNumber_1_inherit_TYPE_descriptor(td);
+ return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
+}
+
+static const ber_tlv_tag_t asn_DEF_PortNumber_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_PortNumber = {
+ "PortNumber",
+ "PortNumber",
+ PortNumber_free,
+ PortNumber_print,
+ PortNumber_constraint,
+ PortNumber_decode_ber,
+ PortNumber_encode_der,
+ PortNumber_decode_xer,
+ PortNumber_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_PortNumber_tags_1,
+ sizeof(asn_DEF_PortNumber_tags_1)
+ /sizeof(asn_DEF_PortNumber_tags_1[0]), /* 1 */
+ asn_DEF_PortNumber_tags_1, /* Same as above */
+ sizeof(asn_DEF_PortNumber_tags_1)
+ /sizeof(asn_DEF_PortNumber_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ 0, 0, /* No members */
+ 0 /* No specifics */
+};
+
diff --git a/src/rspro/RemoveMappingReq.c b/src/rspro/RemoveMappingReq.c
new file mode 100644
index 0000000..dc4329e
--- /dev/null
+++ b/src/rspro/RemoveMappingReq.c
@@ -0,0 +1,69 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/RemoveMappingReq.h>
+
+static asn_TYPE_member_t asn_MBR_RemoveMappingReq_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct RemoveMappingReq, client),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_ClientSlot,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "client"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct RemoveMappingReq, bank),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_BankSlot,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "bank"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_RemoveMappingReq_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RemoveMappingReq_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* client */
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* bank */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RemoveMappingReq_specs_1 = {
+ sizeof(struct RemoveMappingReq),
+ offsetof(struct RemoveMappingReq, _asn_ctx),
+ asn_MAP_RemoveMappingReq_tag2el_1,
+ 2, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ 1, /* Start extensions */
+ 3 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RemoveMappingReq = {
+ "RemoveMappingReq",
+ "RemoveMappingReq",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_RemoveMappingReq_tags_1,
+ sizeof(asn_DEF_RemoveMappingReq_tags_1)
+ /sizeof(asn_DEF_RemoveMappingReq_tags_1[0]), /* 1 */
+ asn_DEF_RemoveMappingReq_tags_1, /* Same as above */
+ sizeof(asn_DEF_RemoveMappingReq_tags_1)
+ /sizeof(asn_DEF_RemoveMappingReq_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_RemoveMappingReq_1,
+ 2, /* Elements count */
+ &asn_SPC_RemoveMappingReq_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/RemoveMappingRes.c b/src/rspro/RemoveMappingRes.c
new file mode 100644
index 0000000..0b304f2
--- /dev/null
+++ b/src/rspro/RemoveMappingRes.c
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/RemoveMappingRes.h>
+
+static asn_TYPE_member_t asn_MBR_RemoveMappingRes_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct RemoveMappingRes, result),
+ (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+ 0,
+ &asn_DEF_ResultCode,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "result"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_RemoveMappingRes_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RemoveMappingRes_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* result */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RemoveMappingRes_specs_1 = {
+ sizeof(struct RemoveMappingRes),
+ offsetof(struct RemoveMappingRes, _asn_ctx),
+ asn_MAP_RemoveMappingRes_tag2el_1,
+ 1, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ 0, /* Start extensions */
+ 2 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RemoveMappingRes = {
+ "RemoveMappingRes",
+ "RemoveMappingRes",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_RemoveMappingRes_tags_1,
+ sizeof(asn_DEF_RemoveMappingRes_tags_1)
+ /sizeof(asn_DEF_RemoveMappingRes_tags_1[0]), /* 1 */
+ asn_DEF_RemoveMappingRes_tags_1, /* Same as above */
+ sizeof(asn_DEF_RemoveMappingRes_tags_1)
+ /sizeof(asn_DEF_RemoveMappingRes_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_RemoveMappingRes_1,
+ 1, /* Elements count */
+ &asn_SPC_RemoveMappingRes_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/ResultCode.c b/src/rspro/ResultCode.c
new file mode 100644
index 0000000..871a1fc
--- /dev/null
+++ b/src/rspro/ResultCode.c
@@ -0,0 +1,140 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/ResultCode.h>
+
+int
+ResultCode_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+ asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+ /* Replace with underlying type checker */
+ td->check_constraints = asn_DEF_NativeEnumerated.check_constraints;
+ return td->check_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static void
+ResultCode_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
+ td->free_struct = asn_DEF_NativeEnumerated.free_struct;
+ td->print_struct = asn_DEF_NativeEnumerated.print_struct;
+ td->check_constraints = asn_DEF_NativeEnumerated.check_constraints;
+ td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder;
+ td->der_encoder = asn_DEF_NativeEnumerated.der_encoder;
+ td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder;
+ td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder;
+ td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder;
+ td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder;
+ td->aper_decoder = asn_DEF_NativeEnumerated.aper_decoder;
+ td->aper_encoder = asn_DEF_NativeEnumerated.aper_encoder;
+ if(!td->per_constraints)
+ td->per_constraints = asn_DEF_NativeEnumerated.per_constraints;
+ td->elements = asn_DEF_NativeEnumerated.elements;
+ td->elements_count = asn_DEF_NativeEnumerated.elements_count;
+ /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */
+}
+
+void
+ResultCode_free(asn_TYPE_descriptor_t *td,
+ void *struct_ptr, int contents_only) {
+ ResultCode_1_inherit_TYPE_descriptor(td);
+ td->free_struct(td, struct_ptr, contents_only);
+}
+
+int
+ResultCode_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
+ int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+ ResultCode_1_inherit_TYPE_descriptor(td);
+ return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+asn_dec_rval_t
+ResultCode_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const void *bufptr, size_t size, int tag_mode) {
+ ResultCode_1_inherit_TYPE_descriptor(td);
+ return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
+}
+
+asn_enc_rval_t
+ResultCode_encode_der(asn_TYPE_descriptor_t *td,
+ void *structure, int tag_mode, ber_tlv_tag_t tag,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ ResultCode_1_inherit_TYPE_descriptor(td);
+ return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+asn_dec_rval_t
+ResultCode_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const char *opt_mname, const void *bufptr, size_t size) {
+ ResultCode_1_inherit_TYPE_descriptor(td);
+ return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
+asn_enc_rval_t
+ResultCode_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
+ int ilevel, enum xer_encoder_flags_e flags,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ ResultCode_1_inherit_TYPE_descriptor(td);
+ return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
+}
+
+static const asn_INTEGER_enum_map_t asn_MAP_ResultCode_value2enum_1[] = {
+ { 0, 2, "ok" },
+ { 1, 15, "illegalClientId" },
+ { 2, 13, "illegalBankId" },
+ { 3, 13, "illegalSlotId" },
+ { 100, 14, "cardNotPresent" },
+ { 101, 16, "cardUnresponsive" },
+ { 102, 21, "cardTransmissionError" }
+ /* This list is extensible */
+};
+static const unsigned int asn_MAP_ResultCode_enum2value_1[] = {
+ 4, /* cardNotPresent(100) */
+ 6, /* cardTransmissionError(102) */
+ 5, /* cardUnresponsive(101) */
+ 2, /* illegalBankId(2) */
+ 1, /* illegalClientId(1) */
+ 3, /* illegalSlotId(3) */
+ 0 /* ok(0) */
+ /* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_ResultCode_specs_1 = {
+ asn_MAP_ResultCode_value2enum_1, /* "tag" => N; sorted by tag */
+ asn_MAP_ResultCode_enum2value_1, /* N => "tag"; sorted by N */
+ 7, /* Number of elements in the maps */
+ 8, /* Extensions before this member */
+ 1, /* Strict enumeration */
+ 0, /* Native long size */
+ 0
+};
+static const ber_tlv_tag_t asn_DEF_ResultCode_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ResultCode = {
+ "ResultCode",
+ "ResultCode",
+ ResultCode_free,
+ ResultCode_print,
+ ResultCode_constraint,
+ ResultCode_decode_ber,
+ ResultCode_encode_der,
+ ResultCode_decode_xer,
+ ResultCode_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_ResultCode_tags_1,
+ sizeof(asn_DEF_ResultCode_tags_1)
+ /sizeof(asn_DEF_ResultCode_tags_1[0]), /* 1 */
+ asn_DEF_ResultCode_tags_1, /* Same as above */
+ sizeof(asn_DEF_ResultCode_tags_1)
+ /sizeof(asn_DEF_ResultCode_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ 0, 0, /* Defined elsewhere */
+ &asn_SPC_ResultCode_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/RsproPDU.c b/src/rspro/RsproPDU.c
new file mode 100644
index 0000000..2aa0862
--- /dev/null
+++ b/src/rspro/RsproPDU.c
@@ -0,0 +1,122 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/RsproPDU.h>
+
+static int
+memb_version_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+ asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+ long value;
+
+ if(!sptr) {
+ _ASN_CTFAIL(app_key, td, sptr,
+ "%s: value not given (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+
+ value = *(const long *)sptr;
+
+ if((value >= 0l && value <= 32l)) {
+ /* Constraint check succeeded */
+ return 0;
+ } else {
+ _ASN_CTFAIL(app_key, td, sptr,
+ "%s: constraint failed (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+}
+
+static int asn_DFL_2_set_1(int set_value, void **sptr) {
+ long *st = *sptr;
+
+ if(!st) {
+ if(!set_value) return -1; /* Not a default value */
+ st = (*sptr = CALLOC(1, sizeof(*st)));
+ if(!st) return -1;
+ }
+
+ if(set_value) {
+ /* Install default value 1 */
+ *st = 1l;
+ return 0;
+ } else {
+ /* Test default value 1 */
+ return (*st == 1);
+ }
+}
+static asn_TYPE_member_t asn_MBR_RsproPDU_1[] = {
+ { ATF_POINTER, 1, offsetof(struct RsproPDU, version),
+ (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_NativeInteger,
+ memb_version_constraint_1,
+ 0, /* PER is not compiled, use -gen-PER */
+ asn_DFL_2_set_1, /* DEFAULT 1 */
+ "version"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct RsproPDU, tag),
+ (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_OperationTag,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "tag"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct RsproPDU, msg),
+ (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+ +1, /* EXPLICIT tag at current level */
+ &asn_DEF_RsproPDUchoice,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "msg"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_RsproPDU_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RsproPDU_tag2el_1[] = {
+ { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* version */
+ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* tag */
+ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* msg */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RsproPDU_specs_1 = {
+ sizeof(struct RsproPDU),
+ offsetof(struct RsproPDU, _asn_ctx),
+ asn_MAP_RsproPDU_tag2el_1,
+ 3, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ -1, /* Start extensions */
+ -1 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RsproPDU = {
+ "RsproPDU",
+ "RsproPDU",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_RsproPDU_tags_1,
+ sizeof(asn_DEF_RsproPDU_tags_1)
+ /sizeof(asn_DEF_RsproPDU_tags_1[0]), /* 1 */
+ asn_DEF_RsproPDU_tags_1, /* Same as above */
+ sizeof(asn_DEF_RsproPDU_tags_1)
+ /sizeof(asn_DEF_RsproPDU_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_RsproPDU_1,
+ 3, /* Elements count */
+ &asn_SPC_RsproPDU_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/RsproPDUchoice.c b/src/rspro/RsproPDUchoice.c
new file mode 100644
index 0000000..330821f
--- /dev/null
+++ b/src/rspro/RsproPDUchoice.c
@@ -0,0 +1,205 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/RsproPDUchoice.h>
+
+static asn_TYPE_member_t asn_MBR_RsproPDUchoice_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct RsproPDUchoice, choice.connectBankReq),
+ (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_ConnectBankReq,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "connectBankReq"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct RsproPDUchoice, choice.connectBankRes),
+ (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_ConnectBankRes,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "connectBankRes"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct RsproPDUchoice, choice.connectClientReq),
+ (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_ConnectClientReq,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "connectClientReq"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct RsproPDUchoice, choice.connectClientRes),
+ (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_ConnectClientRes,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "connectClientRes"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct RsproPDUchoice, choice.createMappingReq),
+ (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_CreateMappingReq,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "createMappingReq"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct RsproPDUchoice, choice.createMappingRes),
+ (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_CreateMappingRes,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "createMappingRes"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct RsproPDUchoice, choice.removeMappingReq),
+ (ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_RemoveMappingReq,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "removeMappingReq"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct RsproPDUchoice, choice.removeMappingRes),
+ (ASN_TAG_CLASS_CONTEXT | (7 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_RemoveMappingRes,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "removeMappingRes"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct RsproPDUchoice, choice.configClientReq),
+ (ASN_TAG_CLASS_CONTEXT | (8 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_ConfigClientReq,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "configClientReq"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct RsproPDUchoice, choice.configClientRes),
+ (ASN_TAG_CLASS_CONTEXT | (9 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_ConfigClientRes,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "configClientRes"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct RsproPDUchoice, choice.setAtrReq),
+ (ASN_TAG_CLASS_CONTEXT | (10 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_SetAtrReq,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "setAtrReq"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct RsproPDUchoice, choice.setAtrRes),
+ (ASN_TAG_CLASS_CONTEXT | (11 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_SetAtrRes,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "setAtrRes"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct RsproPDUchoice, choice.tpduModemToCard),
+ (ASN_TAG_CLASS_CONTEXT | (12 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_TpduModemToCard,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "tpduModemToCard"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct RsproPDUchoice, choice.tpduCardToModem),
+ (ASN_TAG_CLASS_CONTEXT | (13 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_TpduCardToModem,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "tpduCardToModem"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct RsproPDUchoice, choice.clientSlotStatusInd),
+ (ASN_TAG_CLASS_CONTEXT | (14 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_ClientSlotStatusInd,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "clientSlotStatusInd"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct RsproPDUchoice, choice.bankSlotStatusInd),
+ (ASN_TAG_CLASS_CONTEXT | (15 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_BankSlotStatusInd,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "bankSlotStatusInd"
+ },
+};
+static const asn_TYPE_tag2member_t asn_MAP_RsproPDUchoice_tag2el_1[] = {
+ { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* connectBankReq */
+ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* connectBankRes */
+ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* connectClientReq */
+ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* connectClientRes */
+ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* createMappingReq */
+ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* createMappingRes */
+ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* removeMappingReq */
+ { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* removeMappingRes */
+ { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* configClientReq */
+ { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* configClientRes */
+ { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 }, /* setAtrReq */
+ { (ASN_TAG_CLASS_CONTEXT | (11 << 2)), 11, 0, 0 }, /* setAtrRes */
+ { (ASN_TAG_CLASS_CONTEXT | (12 << 2)), 12, 0, 0 }, /* tpduModemToCard */
+ { (ASN_TAG_CLASS_CONTEXT | (13 << 2)), 13, 0, 0 }, /* tpduCardToModem */
+ { (ASN_TAG_CLASS_CONTEXT | (14 << 2)), 14, 0, 0 }, /* clientSlotStatusInd */
+ { (ASN_TAG_CLASS_CONTEXT | (15 << 2)), 15, 0, 0 } /* bankSlotStatusInd */
+};
+static asn_CHOICE_specifics_t asn_SPC_RsproPDUchoice_specs_1 = {
+ sizeof(struct RsproPDUchoice),
+ offsetof(struct RsproPDUchoice, _asn_ctx),
+ offsetof(struct RsproPDUchoice, present),
+ sizeof(((struct RsproPDUchoice *)0)->present),
+ asn_MAP_RsproPDUchoice_tag2el_1,
+ 16, /* Count of tags in the map */
+ 0,
+ 16 /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_RsproPDUchoice = {
+ "RsproPDUchoice",
+ "RsproPDUchoice",
+ CHOICE_free,
+ CHOICE_print,
+ CHOICE_constraint,
+ CHOICE_decode_ber,
+ CHOICE_encode_der,
+ CHOICE_decode_xer,
+ CHOICE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ CHOICE_outmost_tag,
+ 0, /* No effective tags (pointer) */
+ 0, /* No effective tags (count) */
+ 0, /* No tags (pointer) */
+ 0, /* No tags (count) */
+ 0, /* No PER visible constraints */
+ asn_MBR_RsproPDUchoice_1,
+ 16, /* Elements count */
+ &asn_SPC_RsproPDUchoice_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/SetAtrReq.c b/src/rspro/SetAtrReq.c
new file mode 100644
index 0000000..213f353
--- /dev/null
+++ b/src/rspro/SetAtrReq.c
@@ -0,0 +1,69 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/SetAtrReq.h>
+
+static asn_TYPE_member_t asn_MBR_SetAtrReq_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct SetAtrReq, slot),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_ClientSlot,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "slot"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct SetAtrReq, atr),
+ (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+ 0,
+ &asn_DEF_ATR,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "atr"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_SetAtrReq_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_SetAtrReq_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 1, 0, 0 }, /* atr */
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* slot */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_SetAtrReq_specs_1 = {
+ sizeof(struct SetAtrReq),
+ offsetof(struct SetAtrReq, _asn_ctx),
+ asn_MAP_SetAtrReq_tag2el_1,
+ 2, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ 1, /* Start extensions */
+ 3 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_SetAtrReq = {
+ "SetAtrReq",
+ "SetAtrReq",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_SetAtrReq_tags_1,
+ sizeof(asn_DEF_SetAtrReq_tags_1)
+ /sizeof(asn_DEF_SetAtrReq_tags_1[0]), /* 1 */
+ asn_DEF_SetAtrReq_tags_1, /* Same as above */
+ sizeof(asn_DEF_SetAtrReq_tags_1)
+ /sizeof(asn_DEF_SetAtrReq_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_SetAtrReq_1,
+ 2, /* Elements count */
+ &asn_SPC_SetAtrReq_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/SetAtrRes.c b/src/rspro/SetAtrRes.c
new file mode 100644
index 0000000..8dc3652
--- /dev/null
+++ b/src/rspro/SetAtrRes.c
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/SetAtrRes.h>
+
+static asn_TYPE_member_t asn_MBR_SetAtrRes_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct SetAtrRes, result),
+ (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+ 0,
+ &asn_DEF_ResultCode,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "result"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_SetAtrRes_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_SetAtrRes_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* result */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_SetAtrRes_specs_1 = {
+ sizeof(struct SetAtrRes),
+ offsetof(struct SetAtrRes, _asn_ctx),
+ asn_MAP_SetAtrRes_tag2el_1,
+ 1, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ 0, /* Start extensions */
+ 2 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_SetAtrRes = {
+ "SetAtrRes",
+ "SetAtrRes",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_SetAtrRes_tags_1,
+ sizeof(asn_DEF_SetAtrRes_tags_1)
+ /sizeof(asn_DEF_SetAtrRes_tags_1[0]), /* 1 */
+ asn_DEF_SetAtrRes_tags_1, /* Same as above */
+ sizeof(asn_DEF_SetAtrRes_tags_1)
+ /sizeof(asn_DEF_SetAtrRes_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_SetAtrRes_1,
+ 1, /* Elements count */
+ &asn_SPC_SetAtrRes_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/SlotNumber.c b/src/rspro/SlotNumber.c
new file mode 100644
index 0000000..4824169
--- /dev/null
+++ b/src/rspro/SlotNumber.c
@@ -0,0 +1,128 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/SlotNumber.h>
+
+int
+SlotNumber_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+ asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+ long value;
+
+ if(!sptr) {
+ _ASN_CTFAIL(app_key, td, sptr,
+ "%s: value not given (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+
+ value = *(const long *)sptr;
+
+ if((value >= 0l && value <= 1023l)) {
+ /* Constraint check succeeded */
+ return 0;
+ } else {
+ _ASN_CTFAIL(app_key, td, sptr,
+ "%s: constraint failed (%s:%d)",
+ td->name, __FILE__, __LINE__);
+ return -1;
+ }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static void
+SlotNumber_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
+ td->free_struct = asn_DEF_NativeInteger.free_struct;
+ td->print_struct = asn_DEF_NativeInteger.print_struct;
+ td->check_constraints = asn_DEF_NativeInteger.check_constraints;
+ td->ber_decoder = asn_DEF_NativeInteger.ber_decoder;
+ td->der_encoder = asn_DEF_NativeInteger.der_encoder;
+ td->xer_decoder = asn_DEF_NativeInteger.xer_decoder;
+ td->xer_encoder = asn_DEF_NativeInteger.xer_encoder;
+ td->uper_decoder = asn_DEF_NativeInteger.uper_decoder;
+ td->uper_encoder = asn_DEF_NativeInteger.uper_encoder;
+ td->aper_decoder = asn_DEF_NativeInteger.aper_decoder;
+ td->aper_encoder = asn_DEF_NativeInteger.aper_encoder;
+ if(!td->per_constraints)
+ td->per_constraints = asn_DEF_NativeInteger.per_constraints;
+ td->elements = asn_DEF_NativeInteger.elements;
+ td->elements_count = asn_DEF_NativeInteger.elements_count;
+ td->specifics = asn_DEF_NativeInteger.specifics;
+}
+
+void
+SlotNumber_free(asn_TYPE_descriptor_t *td,
+ void *struct_ptr, int contents_only) {
+ SlotNumber_1_inherit_TYPE_descriptor(td);
+ td->free_struct(td, struct_ptr, contents_only);
+}
+
+int
+SlotNumber_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
+ int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+ SlotNumber_1_inherit_TYPE_descriptor(td);
+ return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+asn_dec_rval_t
+SlotNumber_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const void *bufptr, size_t size, int tag_mode) {
+ SlotNumber_1_inherit_TYPE_descriptor(td);
+ return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
+}
+
+asn_enc_rval_t
+SlotNumber_encode_der(asn_TYPE_descriptor_t *td,
+ void *structure, int tag_mode, ber_tlv_tag_t tag,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ SlotNumber_1_inherit_TYPE_descriptor(td);
+ return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+asn_dec_rval_t
+SlotNumber_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+ void **structure, const char *opt_mname, const void *bufptr, size_t size) {
+ SlotNumber_1_inherit_TYPE_descriptor(td);
+ return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
+asn_enc_rval_t
+SlotNumber_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
+ int ilevel, enum xer_encoder_flags_e flags,
+ asn_app_consume_bytes_f *cb, void *app_key) {
+ SlotNumber_1_inherit_TYPE_descriptor(td);
+ return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
+}
+
+static const ber_tlv_tag_t asn_DEF_SlotNumber_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_SlotNumber = {
+ "SlotNumber",
+ "SlotNumber",
+ SlotNumber_free,
+ SlotNumber_print,
+ SlotNumber_constraint,
+ SlotNumber_decode_ber,
+ SlotNumber_encode_der,
+ SlotNumber_decode_xer,
+ SlotNumber_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_SlotNumber_tags_1,
+ sizeof(asn_DEF_SlotNumber_tags_1)
+ /sizeof(asn_DEF_SlotNumber_tags_1[0]), /* 1 */
+ asn_DEF_SlotNumber_tags_1, /* Same as above */
+ sizeof(asn_DEF_SlotNumber_tags_1)
+ /sizeof(asn_DEF_SlotNumber_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ 0, 0, /* No members */
+ 0 /* No specifics */
+};
+
diff --git a/src/rspro/SlotPhysStatus.c b/src/rspro/SlotPhysStatus.c
new file mode 100644
index 0000000..1f1387a
--- /dev/null
+++ b/src/rspro/SlotPhysStatus.c
@@ -0,0 +1,89 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/SlotPhysStatus.h>
+
+static asn_TYPE_member_t asn_MBR_SlotPhysStatus_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct SlotPhysStatus, resetActive),
+ (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_BOOLEAN,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "resetActive"
+ },
+ { ATF_POINTER, 3, offsetof(struct SlotPhysStatus, vccPresent),
+ (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_BOOLEAN,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "vccPresent"
+ },
+ { ATF_POINTER, 2, offsetof(struct SlotPhysStatus, clkActive),
+ (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_BOOLEAN,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "clkActive"
+ },
+ { ATF_POINTER, 1, offsetof(struct SlotPhysStatus, cardPresent),
+ (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_BOOLEAN,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "cardPresent"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_SlotPhysStatus_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_SlotPhysStatus_tag2el_1[] = {
+ { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* resetActive */
+ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* vccPresent */
+ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* clkActive */
+ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* cardPresent */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_SlotPhysStatus_specs_1 = {
+ sizeof(struct SlotPhysStatus),
+ offsetof(struct SlotPhysStatus, _asn_ctx),
+ asn_MAP_SlotPhysStatus_tag2el_1,
+ 4, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ 3, /* Start extensions */
+ 5 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_SlotPhysStatus = {
+ "SlotPhysStatus",
+ "SlotPhysStatus",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_SlotPhysStatus_tags_1,
+ sizeof(asn_DEF_SlotPhysStatus_tags_1)
+ /sizeof(asn_DEF_SlotPhysStatus_tags_1[0]), /* 1 */
+ asn_DEF_SlotPhysStatus_tags_1, /* Same as above */
+ sizeof(asn_DEF_SlotPhysStatus_tags_1)
+ /sizeof(asn_DEF_SlotPhysStatus_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_SlotPhysStatus_1,
+ 4, /* Elements count */
+ &asn_SPC_SlotPhysStatus_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/TpduCardToModem.c b/src/rspro/TpduCardToModem.c
new file mode 100644
index 0000000..883d937
--- /dev/null
+++ b/src/rspro/TpduCardToModem.c
@@ -0,0 +1,89 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/TpduCardToModem.h>
+
+static asn_TYPE_member_t asn_MBR_TpduCardToModem_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct TpduCardToModem, fromBankSlot),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_BankSlot,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "fromBankSlot"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct TpduCardToModem, toClientSlot),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_ClientSlot,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "toClientSlot"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct TpduCardToModem, flags),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_TpduFlags,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "flags"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct TpduCardToModem, data),
+ (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+ 0,
+ &asn_DEF_OCTET_STRING,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "data"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_TpduCardToModem_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_TpduCardToModem_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, 0, 0 }, /* data */
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* fromBankSlot */
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 1 }, /* toClientSlot */
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 0 } /* flags */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_TpduCardToModem_specs_1 = {
+ sizeof(struct TpduCardToModem),
+ offsetof(struct TpduCardToModem, _asn_ctx),
+ asn_MAP_TpduCardToModem_tag2el_1,
+ 4, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ 3, /* Start extensions */
+ 5 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_TpduCardToModem = {
+ "TpduCardToModem",
+ "TpduCardToModem",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_TpduCardToModem_tags_1,
+ sizeof(asn_DEF_TpduCardToModem_tags_1)
+ /sizeof(asn_DEF_TpduCardToModem_tags_1[0]), /* 1 */
+ asn_DEF_TpduCardToModem_tags_1, /* Same as above */
+ sizeof(asn_DEF_TpduCardToModem_tags_1)
+ /sizeof(asn_DEF_TpduCardToModem_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_TpduCardToModem_1,
+ 4, /* Elements count */
+ &asn_SPC_TpduCardToModem_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/TpduFlags.c b/src/rspro/TpduFlags.c
new file mode 100644
index 0000000..a43ec7a
--- /dev/null
+++ b/src/rspro/TpduFlags.c
@@ -0,0 +1,89 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/TpduFlags.h>
+
+static asn_TYPE_member_t asn_MBR_TpduFlags_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct TpduFlags, tpduHeaderPresent),
+ (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
+ 0,
+ &asn_DEF_BOOLEAN,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "tpduHeaderPresent"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct TpduFlags, finalPart),
+ (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
+ 0,
+ &asn_DEF_BOOLEAN,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "finalPart"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct TpduFlags, procByteContinueTx),
+ (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
+ 0,
+ &asn_DEF_BOOLEAN,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "procByteContinueTx"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct TpduFlags, procByteContinueRx),
+ (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
+ 0,
+ &asn_DEF_BOOLEAN,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "procByteContinueRx"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_TpduFlags_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_TpduFlags_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 0, 0, 3 }, /* tpduHeaderPresent */
+ { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 1, -1, 2 }, /* finalPart */
+ { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 2, -2, 1 }, /* procByteContinueTx */
+ { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 3, -3, 0 } /* procByteContinueRx */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_TpduFlags_specs_1 = {
+ sizeof(struct TpduFlags),
+ offsetof(struct TpduFlags, _asn_ctx),
+ asn_MAP_TpduFlags_tag2el_1,
+ 4, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ 3, /* Start extensions */
+ 5 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_TpduFlags = {
+ "TpduFlags",
+ "TpduFlags",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_TpduFlags_tags_1,
+ sizeof(asn_DEF_TpduFlags_tags_1)
+ /sizeof(asn_DEF_TpduFlags_tags_1[0]), /* 1 */
+ asn_DEF_TpduFlags_tags_1, /* Same as above */
+ sizeof(asn_DEF_TpduFlags_tags_1)
+ /sizeof(asn_DEF_TpduFlags_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_TpduFlags_1,
+ 4, /* Elements count */
+ &asn_SPC_TpduFlags_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro/TpduModemToCard.c b/src/rspro/TpduModemToCard.c
new file mode 100644
index 0000000..8accb1d
--- /dev/null
+++ b/src/rspro/TpduModemToCard.c
@@ -0,0 +1,89 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RSPRO"
+ * found in "../../asn1/RSPRO.asn"
+ */
+
+#include <osmocom/rspro/TpduModemToCard.h>
+
+static asn_TYPE_member_t asn_MBR_TpduModemToCard_1[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct TpduModemToCard, fromClientSlot),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_ClientSlot,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "fromClientSlot"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct TpduModemToCard, toBankSlot),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_BankSlot,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "toBankSlot"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct TpduModemToCard, flags),
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+ 0,
+ &asn_DEF_TpduFlags,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "flags"
+ },
+ { ATF_NOFLAGS, 0, offsetof(struct TpduModemToCard, data),
+ (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+ 0,
+ &asn_DEF_OCTET_STRING,
+ 0, /* Defer constraints checking to the member type */
+ 0, /* PER is not compiled, use -gen-PER */
+ 0,
+ "data"
+ },
+};
+static const ber_tlv_tag_t asn_DEF_TpduModemToCard_tags_1[] = {
+ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_TpduModemToCard_tag2el_1[] = {
+ { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 3, 0, 0 }, /* data */
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 2 }, /* fromClientSlot */
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 1 }, /* toBankSlot */
+ { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -2, 0 } /* flags */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_TpduModemToCard_specs_1 = {
+ sizeof(struct TpduModemToCard),
+ offsetof(struct TpduModemToCard, _asn_ctx),
+ asn_MAP_TpduModemToCard_tag2el_1,
+ 4, /* Count of tags in the map */
+ 0, 0, 0, /* Optional elements (not needed) */
+ 3, /* Start extensions */
+ 5 /* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_TpduModemToCard = {
+ "TpduModemToCard",
+ "TpduModemToCard",
+ SEQUENCE_free,
+ SEQUENCE_print,
+ SEQUENCE_constraint,
+ SEQUENCE_decode_ber,
+ SEQUENCE_encode_der,
+ SEQUENCE_decode_xer,
+ SEQUENCE_encode_xer,
+ 0, 0, /* No UPER support, use "-gen-PER" to enable */
+ 0, 0, /* No APER support, use "-gen-PER" to enable */
+ 0, /* Use generic outmost tag fetcher */
+ asn_DEF_TpduModemToCard_tags_1,
+ sizeof(asn_DEF_TpduModemToCard_tags_1)
+ /sizeof(asn_DEF_TpduModemToCard_tags_1[0]), /* 1 */
+ asn_DEF_TpduModemToCard_tags_1, /* Same as above */
+ sizeof(asn_DEF_TpduModemToCard_tags_1)
+ /sizeof(asn_DEF_TpduModemToCard_tags_1[0]), /* 1 */
+ 0, /* No PER visible constraints */
+ asn_MBR_TpduModemToCard_1,
+ 4, /* Elements count */
+ &asn_SPC_TpduModemToCard_specs_1 /* Additional specs */
+};
+
diff --git a/src/rspro_util.c b/src/rspro_util.c
new file mode 100644
index 0000000..7a53859
--- /dev/null
+++ b/src/rspro_util.c
@@ -0,0 +1,156 @@
+
+
+#include <asn1c/asn_application.h>
+#include <asn1c/der_encoder.h>
+
+#include <osmocom/core/msgb.h>
+#include <osmocom/rspro/RsproPDU.h>
+
+struct msgb *rspro_msgb_alloc(void)
+{
+ return msgb_alloc_headroom(1024, 8, "RSPRO");
+}
+
+/*! BER-Encode an RSPRO message into msgb.
+ * \param[in] pdu Structure describing RSPRO PDU. Is freed by this function on success
+ * \returns callee-allocated message buffer containing encoded RSPRO PDU; NULL on error.
+ */
+struct msgb *rspro_enc_msg(RsproPDU_t *pdu)
+{
+ struct msgb *msg = rspro_msgb_alloc();
+ asn_enc_rval_t rval;
+
+ if (!msg)
+ return NULL;
+
+ rval = der_encode_to_buffer(&asn_DEF_RsproPDU, pdu, msgb_data(msg), msgb_length(msg));
+ if (rval.encoded < 0) {
+ return NULL;
+ }
+ msgb_put(msg, rval.encoded/8);
+
+ ASN_STRUCT_FREE(asn_DEF_RsproPDU, pdu);
+
+ return msg;
+}
+
+/* consumes 'msg' _if_ it is successful */
+RsproPDU_t *rspro_dec_msg(struct msgb *msg)
+{
+ RsproPDU_t *pdu;
+ asn_dec_rval_t rval;
+
+ rval = ber_decode(NULL, &asn_DEF_RsproPDU, (void **) &pdu, msgb_data(msg), msgb_length(msg));
+ if (rval.code != RC_OK) {
+ /* FIXME */
+ return NULL;
+ }
+
+ msgb_free(msg);
+
+ return pdu;
+}
+
+#define MAX_NAME_LEN 32
+struct app_comp_id {
+ char name[MAX_NAME_LEN+1];
+ char software[MAX_NAME_LEN+1];
+ char sw_version[MAX_NAME_LEN+1];
+ char hw_manufacturer[MAX_NAME_LEN+1];
+ char hw_model[MAX_NAME_LEN+1];
+ char hw_serial_nr[MAX_NAME_LEN+1];
+ char hw_version[MAX_NAME_LEN+1];
+ char fw_version[MAX_NAME_LEN+1];
+};
+
+static void fill_comp_id(ComponentIdentity_t *out, const struct app_comp_id *in)
+{
+ OCTET_STRING_fromString(&out->name, in->name);
+ OCTET_STRING_fromString(&out->software, in->software);
+ OCTET_STRING_fromString(&out->swVersion, in->sw_version);
+ if (strlen(in->hw_manufacturer))
+ out->hwManufacturer = OCTET_STRING_new_fromBuf(&asn_DEF_ComponentName,
+ in->hw_manufacturer, -1);
+ if (strlen(in->hw_model))
+ out->hwModel = OCTET_STRING_new_fromBuf(&asn_DEF_ComponentName, in->hw_model, -1);
+ if (strlen(in->hw_serial_nr))
+ out->hwSerialNr = OCTET_STRING_new_fromBuf(&asn_DEF_ComponentName, in->hw_serial_nr, -1);
+ if (strlen(in->hw_version))
+ out->hwVersion = OCTET_STRING_new_fromBuf(&asn_DEF_ComponentName, in->hw_version, -1);
+ if (strlen(in->fw_version))
+ out->fwVersion = OCTET_STRING_new_fromBuf(&asn_DEF_ComponentName, in->fw_version, -1);
+}
+
+static void fill_ip4_port(IpPort_t *out, uint32_t ip, uint16_t port)
+{
+ uint32_t ip_n = htonl(ip);
+ out->ip.present = IpAddress_PR_ipv4;
+ OCTET_STRING_fromBuf(&out->ip.choice.ipv4, (const char *) &ip_n, 4);
+ out->port = htons(port);
+}
+
+
+RsproPDU_t *rspro_gen_ConnectBankReq(const struct app_comp_id *a_cid,
+ uint16_t bank_id, uint16_t num_slots)
+{
+ RsproPDU_t *pdu = CALLOC(1, sizeof(*pdu));
+ if (!pdu)
+ return NULL;
+ pdu->msg.present = RsproPDUchoice_PR_connectBankReq;
+ fill_comp_id(&pdu->msg.choice.connectBankReq.identity, a_cid);
+ pdu->msg.choice.connectBankReq.bankId = bank_id;
+ pdu->msg.choice.connectBankReq.numberOfSlots = num_slots;
+
+ return pdu;
+}
+
+RsproPDU_t *rspro_gen_ConnectClientReq(const struct app_comp_id *a_cid)
+{
+ RsproPDU_t *pdu = CALLOC(1, sizeof(*pdu));
+ if (!pdu)
+ return NULL;
+ pdu->msg.present = RsproPDUchoice_PR_connectClientReq;
+ fill_comp_id(&pdu->msg.choice.connectClientReq.identity, a_cid);
+
+ return pdu;
+}
+
+RsproPDU_t *rspro_gen_CreateMappingReq(const ClientSlot_t *client, const BankSlot_t *bank)
+{
+ RsproPDU_t *pdu = CALLOC(1, sizeof(*pdu));
+ if (!pdu)
+ return NULL;
+ pdu->msg.present = RsproPDUchoice_PR_createMappingReq;
+ pdu->msg.choice.createMappingReq.client = *client;
+ pdu->msg.choice.createMappingReq.bank = *bank;
+
+ return pdu;
+}
+
+RsproPDU_t *rspro_gen_ConfigClientReq(uint16_t client_id, uint32_t ip, uint16_t port)
+{
+ RsproPDU_t *pdu = CALLOC(1, sizeof(*pdu));
+ if (!pdu)
+ return NULL;
+ pdu->msg.present = RsproPDUchoice_PR_configClientReq;
+ pdu->msg.choice.configClientReq.clientId = client_id;
+ fill_ip4_port(&pdu->msg.choice.configClientReq.bankd, ip, port);
+
+ return pdu;
+}
+
+RsproPDU_t *rspro_gen_SetAtrReq(uint16_t client_id, uint16_t slot_nr, const uint8_t *atr,
+ unsigned int atr_len)
+{
+ RsproPDU_t *pdu = CALLOC(1, sizeof(*pdu));
+ if (!pdu)
+ return NULL;
+ pdu->msg.present = RsproPDUchoice_PR_setAtrReq;
+ pdu->msg.choice.setAtrReq.slot.clientId = client_id;
+ pdu->msg.choice.setAtrReq.slot.slotNr = slot_nr;
+ OCTET_STRING_fromBuf(&pdu->msg.choice.setAtrReq.atr, (const char *)atr, atr_len);
+
+ return pdu;
+}
+
+