18 Commits
0.4.1 ... 0.5.0

Author SHA1 Message Date
Oliver Smith
637874eaf9 Bump version: 0.4.2.9-f6a2 → 0.5.0
Change-Id: I9225ec8b652e3b2dea97cb0ef8631afd0a745e5c
2024-07-25 09:46:02 +02:00
Vadim Yanitskiy
f6a2a6ba4f README.md: cosmetic: fix a typo
Change-Id: I37040ec0df073248289b839a9f9e34732d9ac8eb
2024-06-05 18:34:07 +07:00
Oliver Smith
bd50b41eeb debian/postinst: add checks, be verbose
Do not attempt to change permissions/ownership if the package gets
upgraded from a version higher than the next release.

Do not fail if the user deleted the config file.

Be verbose when changing permissions.

Related: OS#4107
Change-Id: Ic41d3ae2478c49aed222bfa978344727c5dc92a4
2024-05-14 15:20:35 +02:00
Oliver Smith
f18c9d6f9c contrib: remove rpm spec file
Related: https://osmocom.org/news/255
Related: OS#6446
Change-Id: Ic79cde09bf7d5e96e439b1883d3a3fe5568bdbf1
2024-05-08 14:40:57 +02:00
Oliver Smith
9fad2713c3 .deb/.rpm: various fixes related to non-root
* Explicitly chown /var/lib/osmocom to osmocom:osmocom, instead of
  relying on systemd to do it when the service starts up. This does not
  work with the systemd versions in debian 10 and almalinux 8.
* deb: Use "useradd" instead of the interactive "adduser" perl script
  from Debian. This makes it consistent with how we do it in rpm, and
  avoids the dependency on "adduser".
* deb: Consistently use tabs through the file, instead of mixing tabs
  and spaces.
* deb: Remove support for the "dpkg-statoverride --list" logic. This
  seems to be a rather obscure feature to override permissions for
  certain files or directories, for which it does not seem to be a good
  idea to make the postinst script less maintainable. Something similar
  can be achieved by using your own Osmocom config file in a different
  path with different permissions.

Related: OS#4107
Change-Id: I6dd0205fb65d4ad5a79821c111865e67fb293a73
2024-04-26 15:08:44 +02:00
Max
b3743e9603 .deb/.rpm: add osmocom user during package install
Create osmocom user & group during package installation.
Fix the configuration dir/files permission to match.

Related: OS#4107
Tweaked-By: Oliver Smith <osmith@sysmocom.de>
Change-Id: Ifcc882125a22d8f2e1bfcd19622aed4e8a723e6c
2024-04-24 16:18:33 +02:00
Pau Espin Pedrol
538bc4c699 SBcAP: Update as1nc skeleton and generated code
Generated using current mouse07410/vlm_master
(12b8e555b971c745ea715cb247f39120fa15f7f0) [1]

[1] 12b8e555b9

Change-Id: I0153ecf307c99ce904ed4632422bd9d586ec3167
2024-03-25 16:07:13 +01:00
Vadim Yanitskiy
da8b98cf88 build: include debian/ into the release tarball
Change-Id: I54b092ac3c8b25a7511531253c1ec13098629b41
2024-01-26 23:32:23 +07:00
Andreas Eversberg
36a7759e39 Use uniform log format for default config files
Related: OS#6272
Change-Id: I9897bf964880f2e35a59812d319851eb6e06de68
2023-12-01 11:50:49 +01:00
Harald Welte
7ae4b6d61f cbc-apitool: Make character set configurable
osmo-cbc already supported the transmission of UCS2 characters for quite
some time.  However, the cbc-apitool didn't expose this capability so
far.

Change-Id: Ia7291238f3b0af8ff9f476fce9a7805e12821d8c
Related: OS#6028
2023-10-19 07:20:35 +00:00
Pau Espin Pedrol
311673c365 Bump version: 0.4.1.7-7fbd-dirty → 0.4.2
Change-Id: I49749d1d5809d18a7c0c81fb7316791fad81b5cc
2023-09-12 17:08:38 +02:00
Pau Espin Pedrol
7fbd6aa472 Catch and forbid configuring peers before configuring main protocol node
When the user enters each "peer" node, the related object is created if
not yet existing, and its updated config is applied (connect()) upon
exiting the node (cbc_peer_apply_cfg_chg()). When connect happens, it
needs to obtain the local IP address from the main protocol node
(cbsp|sbcap)", which means it must be configured beforehand, otherwise
the peers connect using the default values.

Hence, it makes no sense to configure peers if the main protocol
information has not yet been configured. The usual example configs as
well as the write-config VTY commands provide correct order of things.
Catch and forbid the user providing a config file where the peers are
configured before the main protocol nodes.

Related: OS#6154
Change-Id: I678f9e6715c85b1eb9116cc892f1a8299577c0c2
2023-08-29 17:26:56 +02:00
Oliver Smith
66221e60d6 systemd: depend on networking-online.target
Related: SYS#6400
Change-Id: I9c0cc0779f9ddb7520a565668b7cde07c6ad55d8
2023-05-26 14:10:44 +02:00
Pau Espin Pedrol
0422a10253 README.md: Document generation of SBcAP code from ASN.1 files
Change-Id: Id6edb2dcbd39ca101110f1ca57fcd67bf08c0ef0
2023-05-16 12:33:57 +02:00
Pau Espin Pedrol
292b2e895b sbcap: Update asn1c skeleton files
Update skeleton files using newest asn1c with APER support [1],
commit 08b293e8aa342d465d26805d1d66f3595b2ce261.

This contains among others, fix to automatically disable stack overflow checks [2]
when using ASan, in order to avoid failing during unit test run.

[1] https://github.com/mouse07410/asn1c/tree/vlm_master
[2] https://github.com/mouse07410/asn1c/pull/128

Related: OS#6025
Change-Id: I385d14d4be308b991a48ce1033087f07bd1f47ea
2023-05-15 17:34:45 +02:00
Oliver Smith
a7aca0333b debian: set compat level to 10
Related: OS#5958
Change-Id: Id0f168a7d3c2ae6869121397e65ca1d0cfea30d3
2023-04-25 16:48:21 +02:00
Vadim Yanitskiy
d04fe38e73 tests: use -no-install libtool flag to avoid ./lt-* scripts
This option should be used for any executables which are used only
for testing, or for generating other files and are consequently never
installed.  By specifying this option, we are telling Libtool that
the executable it links will only ever be executed from where it is
built in the build tree.  Libtool is usually able to considerably
speed up the link process for such executables.

Change-Id: I405b5e85113e9529b4491c7eeeec71afe25ef488
2023-03-11 04:34:45 +07:00
Vadim Yanitskiy
eb82cbc249 {src,tests/sbcap}/Makefile.am: reorder libraries in LDADD
... so that locally built libraries are listed first.
Otherwise the linker may pick system-installed libs instead.

Change-Id: I3396a95d221e81f3785a5883630d261f033aa10e
2023-03-09 17:11:37 +07:00
119 changed files with 1459 additions and 393 deletions

View File

@@ -11,7 +11,7 @@ pkgconfig_DATA = \
EXTRA_DIST = .version \
README.md \
git-version-gen \
contrib/osmo-cbc.spec.in \
debian \
cbc.schema.json \
smscb.schema.json \
$(NULL)

View File

@@ -60,10 +60,37 @@ Contributing
Our coding standards are described at
https://osmocom.org/projects/cellular-infrastructure/wiki/Coding_standards
We us a gerrit based patch submission/review process for managing
We use a Gerrit based patch submission/review process for managing
contributions. Please see
https://osmocom.org/projects/cellular-infrastructure/wiki/Gerrit for
more details
The current patch queue for osmo-cbc can be seen at
https://gerrit.osmocom.org/#/q/project:osmo-cbc+status:open
Generating asn1c code
---------------------
Upstream master as1nc from [vlm](https://github.com/vlm/asn1c) [doesn't support
APER encoding](https://github.com/vlm/asn1c/issues/452). Nevertheless, the
upstream fork maintained by a big contributor
[mouse07410](https://github.com/mouse07410/asn1c) does support it, and it is
used in osmo-cbc to generate the SBc-AP code from ASN.1 files present in
src/sbcap/asn1/.
In order to regenerate the code, one shall adjust the ASN1C_SKELETON_PATH and
ASN1C_BIN_PATH in configure.ac to point to the built & installed asn1c from
mouse07410 (usually `vlm_master` branch). Last generated code was built using
commit hash 08b293e8aa342d465d26805d1d66f3595b2ce261.
Then, do the usual `autoreconf -fi && ./configure`, using a buildir != srcdir
(important, in order to avoid ending up with tempotary files in srcdir and
making it difficult to stash the relevant changes).
Finally, run `make -C src/ regen`, which will regenerate the files and copy over
the skeletons, with git possibily showing changes in the following paths:
- include/osmocom/sbcap/
- src/sbcap/gen/
- src/sbcap/skel/

9
TODO-RELEASE Normal file
View File

@@ -0,0 +1,9 @@
# When cleaning up this file: bump API version in corresponding Makefile.am and rename corresponding debian/lib*.install
# according to https://osmocom.org/projects/cellular-infrastructure/wiki/Make_a_new_release
# In short: https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html#Updating-version-info
# LIBVERSION=c:r:a
# If the library source code has changed at all since the last update, then increment revision: c:r + 1:a.
# If any interfaces have been added, removed, or changed since the last update: c + 1:0:a.
# If any interfaces have been added since the last public release: c:r:a + 1.
# If any interfaces have been removed or changed since the last public release: c:r:0.
#library what description / commit summary line

View File

@@ -31,10 +31,10 @@ if test "x$PKG_CONFIG_INSTALLED" = "xno"; then
fi
PKG_PROG_PKG_CONFIG([0.20])
PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.8.0)
PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 1.8.0)
PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 1.8.0)
PKG_CHECK_MODULES(LIBOSMONETIF, libosmo-netif >= 1.3.0)
PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.10.0)
PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 1.10.0)
PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 1.10.0)
PKG_CHECK_MODULES(LIBOSMONETIF, libosmo-netif >= 1.5.0)
PKG_CHECK_MODULES(ULFIUS, libulfius)
PKG_CHECK_MODULES(JANSSON, jansson)
PKG_CHECK_MODULES(ORCANIA, liborcania)
@@ -196,7 +196,6 @@ AC_OUTPUT(
include/osmocom/cbc/Makefile
include/osmocom/sbcap/Makefile
contrib/Makefile
contrib/osmo-cbc.spec
tests/Makefile
tests/sbcap/Makefile
doc/Makefile

View File

@@ -63,7 +63,7 @@ def do_create_cbs(args):
},
'payload': {
'payload_decoded': {
'character_set': "gsm",
'character_set': args.character_set,
#'language': 'en',
'data_utf8': args.payload_data_utf8,
#'data_utf8': "Mahlzeit1 Mahlzeit2 Mahlzeit3 Mahlzeit4 Mahlzeit5 Mahlzeit6 Mahlzeit7 Mahlzeit8"
@@ -126,6 +126,7 @@ def main(argv):
parser_c_cbs.add_argument("--repetition-period", type=int, help='Repetition Period', default=5)
parser_c_cbs.add_argument("--num-of-bcast", type=int, help='Number of Broadcasts', default=999)
parser_c_cbs.add_argument("--payload-data-utf8", type=str, help='Payload Data in UTF8', required=True)
parser_c_cbs.add_argument("--character-set", type=str, help='Character Set', default="gsm", choices=["gsm","ucs2","8bit"])
parser_c_cbs.set_defaults(func=do_create_cbs)
parser_c_etws = subparsers.add_parser('create-etws', help='Create a new ETWS message')

View File

@@ -1,128 +0,0 @@
#
# spec file for package osmo-cbc
#
# Copyright (c) 2021, Harald Welte <laforge@gnumonks.org>
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
## Disable LTO for now since it breaks compilation of the tests
## https://osmocom.org/issues/4113
%define _lto_cflags %{nil}
Name: osmo-cbc
Version: @VERSION@
Release: 0
Summary: OsmoCBC: Osmocom's Cell Broadcast Centre for 3GPP mobile networks
License: AGPL-3.0-or-later
Group: Hardware/Mobile
URL: https://osmocom.org/projects/osmo-cbc
Source: %{name}-%{version}.tar.xz
BuildRequires: automake >= 1.9
BuildRequires: libtool >= 2
BuildRequires: pkgconfig >= 0.20
%if 0%{?suse_version}
BuildRequires: systemd-rpm-macros
%endif
BuildRequires: pkgconfig(libsctp)
BuildRequires: pkgconfig(libosmocore) >= 1.8.0
BuildRequires: pkgconfig(libosmogsm) >= 1.8.0
BuildRequires: pkgconfig(libosmovty) >= 1.8.0
BuildRequires: pkgconfig(libosmo-netif) >= 1.3.0
BuildRequires: pkgconfig(talloc)
BuildRequires: pkgconfig(libulfius)
%{?systemd_requires}
%description
OsmoCBC: Osmocom's Cell Broadcast Centre for 3GPP mobile networks.
%package utils
Summary: CLI utility to interface osmo-cbc REST interface
License: MIT
Group: Productivity/Telephony/Utilities
%description utils
CLI utility to interface with the osmo-cbc REST interface (ECBE).
%package -n libosmo-sbcap0
Summary: Osmocom's library to encode/decode SBc-AP messages
Group: System/Libraries
%description -n libosmo-sbcap0
Osmocom's library to encode/decode SBc-AP messages.
%package -n libosmo-sbcap-devel
Summary: Development files for libosmo-sbcap
Group: Development/Libraries/C and C++
Requires: libosmo-sbcap0 = %{version}
%description -n libosmo-sbcap-devel
Osmocom's library to encode/decode SBc-AP messages.
This subpackage contains libraries and header files for developing
applications that want to make use of libosmo-sbcap.
%prep
%setup -q
%build
echo "%{version}" >.tarball-version
autoreconf -fi
%configure \
--docdir=%{_docdir}/%{name} \
--with-systemdsystemunitdir=%{_unitdir}
make %{?_smp_mflags}
%install
%make_install
install -m 755 contrib/cbc-apitool.py %{buildroot}/usr/bin/cbc-apitool.py
find %{buildroot} \( -name '*.la' -o -name '*.a' \) -delete -print
%if 0%{?suse_version}
%preun
%service_del_preun %{name}.service
%postun
%service_del_postun %{name}.service
%pre
%service_add_pre %{name}.service
%post
%service_add_post %{name}.service
%endif
%check
make %{?_smp_mflags} check || (find . -name testsuite.log -exec cat {} +)
%files
%license COPYING
%doc README.md
%{_bindir}/osmo-cbc
%dir %{_docdir}/%{name}/examples
%dir %{_docdir}/%{name}/examples/osmo-cbc
%{_docdir}/%{name}/examples/osmo-cbc/osmo-cbc*.cfg
%dir %{_sysconfdir}/osmocom
%config(noreplace) %{_sysconfdir}/osmocom/osmo-cbc.cfg
%{_unitdir}/%{name}.service
%files utils
%{_bindir}/cbc-apitool.py
%files -n libosmo-sbcap0
%{_libdir}/libosmo-sbcap.so.0*
%files -n libosmo-sbcap-devel
%{_libdir}/libosmo-sbcap.so
%{_libdir}/pkgconfig/libosmo-sbcap.pc
%dir %{_includedir}/osmocom
%dir %{_includedir}/osmocom/sbcap
%{_includedir}/osmocom/sbcap/*.h
%changelog

View File

@@ -1,11 +1,15 @@
[Unit]
Description=Osmocom CBC (Cell Broadcasting Centre)
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
StateDirectory=osmocom
WorkingDirectory=%S/osmocom
Restart=always
User=osmocom
Group=osmocom
ExecStart=/usr/bin/osmo-cbc -c /etc/osmocom/osmo-cbc.cfg
RestartSec=2

42
debian/changelog vendored
View File

@@ -1,3 +1,45 @@
osmo-cbc (0.5.0) unstable; urgency=medium
[ Harald Welte ]
* cbc-apitool: Make character set configurable
[ Andreas Eversberg ]
* Use uniform log format for default config files
[ Vadim Yanitskiy ]
* build: include debian/ into the release tarball
* README.md: cosmetic: fix a typo
[ Pau Espin Pedrol ]
* SBcAP: Update as1nc skeleton and generated code
[ Max ]
* .deb/.rpm: add osmocom user during package install
[ Oliver Smith ]
* .deb/.rpm: various fixes related to non-root
* contrib: remove rpm spec file
* debian/postinst: add checks, be verbose
-- Oliver Smith <osmith@sysmocom.de> Thu, 25 Jul 2024 09:46:02 +0200
osmo-cbc (0.4.2) unstable; urgency=medium
[ Vadim Yanitskiy ]
* {src,tests/sbcap}/Makefile.am: reorder libraries in LDADD
* tests: use -no-install libtool flag to avoid ./lt-* scripts
[ Oliver Smith ]
* debian: set compat level to 10
* systemd: depend on networking-online.target
[ Pau Espin Pedrol ]
* sbcap: Update asn1c skeleton files
* README.md: Document generation of SBcAP code from ASN.1 files
* Catch and forbid configuring peers before configuring main protocol node
-- Pau Espin Pedrol <pespin@sysmocom.de> Tue, 12 Sep 2023 17:08:37 +0200
osmo-cbc (0.4.1) unstable; urgency=medium
[ Vadim Yanitskiy ]

2
debian/compat vendored
View File

@@ -1 +1 @@
9
10

12
debian/control vendored
View File

@@ -2,7 +2,7 @@ Source: osmo-cbc
Section: net
Priority: extra
Maintainer: Osmocom team <openbsc@lists.osmocom.org>
Build-Depends: debhelper (>=9),
Build-Depends: debhelper (>= 10),
dh-autoreconf,
autotools-dev,
autoconf,
@@ -11,12 +11,12 @@ Build-Depends: debhelper (>=9),
pkg-config,
python3-minimal,
libtalloc-dev,
libosmocore-dev (>= 1.8.0),
libosmo-netif-dev (>= 1.3.0),
libosmocore-dev (>= 1.10.0),
libosmo-netif-dev (>= 1.5.0),
libulfius-dev,
libjansson-dev,
libsctp-dev,
osmo-gsm-manuals-dev
osmo-gsm-manuals-dev (>= 1.6.0)
Standards-Version: 3.9.8
Vcs-Git: https://gitea.osmocom.org/cellular-infrastructure/osmo-cbc
Vcs-Browser: https://gitea.osmocom.org/cellular-infrastructure/osmo-cbc
@@ -50,7 +50,7 @@ Description: ${misc:Package} PDF documentation
Various manuals: user manual, VTY reference manual and/or
protocol/interface manuals.
Package: libosmo-sbcap0
Package: libosmo-sbcap2
Section: libs
Architecture: any
Multi-Arch: same
@@ -62,5 +62,5 @@ Package: libosmo-sbcap-dev
Section: libdevel
Architecture: any
Multi-Arch: same
Depends: libosmo-sbcap0 (= ${binary:Version}), ${misc:Depends}
Depends: libosmo-sbcap2 (= ${binary:Version}), ${misc:Depends}
Description: libosmo-sbcap: Osmocom's library to encode/decode SBc-AP messages

38
debian/postinst vendored Executable file
View File

@@ -0,0 +1,38 @@
#!/bin/sh -e
case "$1" in
configure)
# Create the osmocom group and user (if it doesn't exist yet)
if ! getent group osmocom >/dev/null; then
groupadd --system osmocom
fi
if ! getent passwd osmocom >/dev/null; then
useradd \
--system \
--gid osmocom \
--home-dir /var/lib/osmocom \
--shell /sbin/nologin \
--comment "Open Source Mobile Communications" \
osmocom
fi
# Fix permissions of previous (root-owned) install (OS#4107)
if dpkg --compare-versions "$2" le "0.5.0"; then
if [ -e /etc/osmocom/osmo-cbc.cfg ]; then
chown -v osmocom:osmocom /etc/osmocom/osmo-cbc.cfg
chmod -v 0660 /etc/osmocom/osmo-cbc.cfg
fi
if [ -d /etc/osmocom ]; then
chown -v root:osmocom /etc/osmocom
chmod -v 2775 /etc/osmocom
fi
mkdir -p /var/lib/osmocom
chown -R -v osmocom:osmocom /var/lib/osmocom
fi
;;
esac
# dh_installdeb(1) will replace this with shell code automatically
# generated by other debhelper scripts.
#DEBHELPER#

View File

@@ -1,4 +1,10 @@
log stderr
logging color 1
logging print category-hex 0
logging print category 1
logging timestamp 0
logging print file basename last
logging print level 1
logging level main notice
logging level smscb notice
logging level cbsp notice

View File

@@ -50,6 +50,8 @@ You can create a new CBS message using `cbc-apitool create-cbs`.
*--payload-data-utf8 PAYLOAD_DATA_UTF8*::
Payload data (typically text message) in UTF8 encoding. Will be
transcoded to 7bit GSM alphabet internally.
*--character-set {gsm,8bit,ucs2}*::
Character set to be used for the message. Default: gsm
==== `create-etws` Options

View File

@@ -57,11 +57,13 @@ struct cbc {
struct {
char *local_host;
int local_port;
bool configured;
} cbsp;
struct {
char *local_host[CBC_MAX_LOC_ADDRS];
unsigned int num_local_host;
int local_port;
bool configured;
} sbcap;
struct {
char *local_host;

View File

@@ -29,12 +29,12 @@ typedef long SBcAP_Concurrent_Warning_Message_Indicator_t;
/* Implementation */
extern asn_per_constraints_t asn_PER_type_SBcAP_Concurrent_Warning_Message_Indicator_constr_1;
extern asn_TYPE_descriptor_t asn_DEF_SBcAP_Concurrent_Warning_Message_Indicator;
extern const asn_INTEGER_specifics_t asn_SPC_Concurrent_Warning_Message_Indicator_specs_1;
asn_struct_free_f Concurrent_Warning_Message_Indicator_free;
asn_struct_print_f Concurrent_Warning_Message_Indicator_print;
asn_constr_check_f Concurrent_Warning_Message_Indicator_constraint;
per_type_decoder_f Concurrent_Warning_Message_Indicator_decode_aper;
per_type_encoder_f Concurrent_Warning_Message_Indicator_encode_aper;
extern const asn_INTEGER_specifics_t asn_SPC_SBcAP_Concurrent_Warning_Message_Indicator_specs_1;
asn_struct_free_f SBcAP_Concurrent_Warning_Message_Indicator_free;
asn_struct_print_f SBcAP_Concurrent_Warning_Message_Indicator_print;
asn_constr_check_f SBcAP_Concurrent_Warning_Message_Indicator_constraint;
per_type_decoder_f SBcAP_Concurrent_Warning_Message_Indicator_decode_aper;
per_type_encoder_f SBcAP_Concurrent_Warning_Message_Indicator_encode_aper;
#ifdef __cplusplus
}

View File

@@ -31,12 +31,12 @@ typedef long SBcAP_Criticality_t;
/* Implementation */
extern asn_per_constraints_t asn_PER_type_SBcAP_Criticality_constr_1;
extern asn_TYPE_descriptor_t asn_DEF_SBcAP_Criticality;
extern const asn_INTEGER_specifics_t asn_SPC_Criticality_specs_1;
asn_struct_free_f Criticality_free;
asn_struct_print_f Criticality_print;
asn_constr_check_f Criticality_constraint;
per_type_decoder_f Criticality_decode_aper;
per_type_encoder_f Criticality_encode_aper;
extern const asn_INTEGER_specifics_t asn_SPC_SBcAP_Criticality_specs_1;
asn_struct_free_f SBcAP_Criticality_free;
asn_struct_print_f SBcAP_Criticality_print;
asn_constr_check_f SBcAP_Criticality_constraint;
per_type_decoder_f SBcAP_Criticality_decode_aper;
per_type_encoder_f SBcAP_Criticality_encode_aper;
#ifdef __cplusplus
}

View File

@@ -33,6 +33,8 @@ typedef struct SBcAP_Error_Indication {
/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_SBcAP_Error_Indication;
extern asn_SEQUENCE_specifics_t asn_SPC_SBcAP_Error_Indication_specs_1;
extern asn_TYPE_member_t asn_MBR_SBcAP_Error_Indication_1[1];
#ifdef __cplusplus
}

View File

@@ -37,6 +37,8 @@ typedef struct SBcAP_PWS_Failure_Indication {
/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_SBcAP_PWS_Failure_Indication;
extern asn_SEQUENCE_specifics_t asn_SPC_SBcAP_PWS_Failure_Indication_specs_1;
extern asn_TYPE_member_t asn_MBR_SBcAP_PWS_Failure_Indication_1[2];
#ifdef __cplusplus
}

View File

@@ -37,6 +37,8 @@ typedef struct SBcAP_PWS_Restart_Indication {
/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_SBcAP_PWS_Restart_Indication;
extern asn_SEQUENCE_specifics_t asn_SPC_SBcAP_PWS_Restart_Indication_specs_1;
extern asn_TYPE_member_t asn_MBR_SBcAP_PWS_Restart_Indication_1[2];
#ifdef __cplusplus
}

View File

@@ -31,12 +31,12 @@ typedef long SBcAP_Presence_t;
/* Implementation */
extern asn_per_constraints_t asn_PER_type_SBcAP_Presence_constr_1;
extern asn_TYPE_descriptor_t asn_DEF_SBcAP_Presence;
extern const asn_INTEGER_specifics_t asn_SPC_Presence_specs_1;
asn_struct_free_f Presence_free;
asn_struct_print_f Presence_print;
asn_constr_check_f Presence_constraint;
per_type_decoder_f Presence_decode_aper;
per_type_encoder_f Presence_encode_aper;
extern const asn_INTEGER_specifics_t asn_SPC_SBcAP_Presence_specs_1;
asn_struct_free_f SBcAP_Presence_free;
asn_struct_print_f SBcAP_Presence_print;
asn_constr_check_f SBcAP_Presence_constraint;
per_type_decoder_f SBcAP_Presence_decode_aper;
per_type_encoder_f SBcAP_Presence_encode_aper;
#ifdef __cplusplus
}

View File

@@ -29,12 +29,12 @@ typedef long SBcAP_RAT_Selector_5GS_t;
/* Implementation */
extern asn_per_constraints_t asn_PER_type_SBcAP_RAT_Selector_5GS_constr_1;
extern asn_TYPE_descriptor_t asn_DEF_SBcAP_RAT_Selector_5GS;
extern const asn_INTEGER_specifics_t asn_SPC_RAT_Selector_5GS_specs_1;
asn_struct_free_f RAT_Selector_5GS_free;
asn_struct_print_f RAT_Selector_5GS_print;
asn_constr_check_f RAT_Selector_5GS_constraint;
per_type_decoder_f RAT_Selector_5GS_decode_aper;
per_type_encoder_f RAT_Selector_5GS_encode_aper;
extern const asn_INTEGER_specifics_t asn_SPC_SBcAP_RAT_Selector_5GS_specs_1;
asn_struct_free_f SBcAP_RAT_Selector_5GS_free;
asn_struct_print_f SBcAP_RAT_Selector_5GS_print;
asn_constr_check_f SBcAP_RAT_Selector_5GS_constraint;
per_type_decoder_f SBcAP_RAT_Selector_5GS_decode_aper;
per_type_encoder_f SBcAP_RAT_Selector_5GS_encode_aper;
#ifdef __cplusplus
}

View File

@@ -29,12 +29,12 @@ typedef long SBcAP_Send_Stop_Warning_Indication_t;
/* Implementation */
extern asn_per_constraints_t asn_PER_type_SBcAP_Send_Stop_Warning_Indication_constr_1;
extern asn_TYPE_descriptor_t asn_DEF_SBcAP_Send_Stop_Warning_Indication;
extern const asn_INTEGER_specifics_t asn_SPC_Send_Stop_Warning_Indication_specs_1;
asn_struct_free_f Send_Stop_Warning_Indication_free;
asn_struct_print_f Send_Stop_Warning_Indication_print;
asn_constr_check_f Send_Stop_Warning_Indication_constraint;
per_type_decoder_f Send_Stop_Warning_Indication_decode_aper;
per_type_encoder_f Send_Stop_Warning_Indication_encode_aper;
extern const asn_INTEGER_specifics_t asn_SPC_SBcAP_Send_Stop_Warning_Indication_specs_1;
asn_struct_free_f SBcAP_Send_Stop_Warning_Indication_free;
asn_struct_print_f SBcAP_Send_Stop_Warning_Indication_print;
asn_constr_check_f SBcAP_Send_Stop_Warning_Indication_constraint;
per_type_decoder_f SBcAP_Send_Stop_Warning_Indication_decode_aper;
per_type_encoder_f SBcAP_Send_Stop_Warning_Indication_encode_aper;
#ifdef __cplusplus
}

View File

@@ -29,12 +29,12 @@ typedef long SBcAP_Send_Write_Replace_Warning_Indication_t;
/* Implementation */
extern asn_per_constraints_t asn_PER_type_SBcAP_Send_Write_Replace_Warning_Indication_constr_1;
extern asn_TYPE_descriptor_t asn_DEF_SBcAP_Send_Write_Replace_Warning_Indication;
extern const asn_INTEGER_specifics_t asn_SPC_Send_Write_Replace_Warning_Indication_specs_1;
asn_struct_free_f Send_Write_Replace_Warning_Indication_free;
asn_struct_print_f Send_Write_Replace_Warning_Indication_print;
asn_constr_check_f Send_Write_Replace_Warning_Indication_constraint;
per_type_decoder_f Send_Write_Replace_Warning_Indication_decode_aper;
per_type_encoder_f Send_Write_Replace_Warning_Indication_encode_aper;
extern const asn_INTEGER_specifics_t asn_SPC_SBcAP_Send_Write_Replace_Warning_Indication_specs_1;
asn_struct_free_f SBcAP_Send_Write_Replace_Warning_Indication_free;
asn_struct_print_f SBcAP_Send_Write_Replace_Warning_Indication_print;
asn_constr_check_f SBcAP_Send_Write_Replace_Warning_Indication_constraint;
per_type_decoder_f SBcAP_Send_Write_Replace_Warning_Indication_decode_aper;
per_type_encoder_f SBcAP_Send_Write_Replace_Warning_Indication_encode_aper;
#ifdef __cplusplus
}

View File

@@ -29,12 +29,12 @@ typedef long SBcAP_Stop_All_Indicator_t;
/* Implementation */
extern asn_per_constraints_t asn_PER_type_SBcAP_Stop_All_Indicator_constr_1;
extern asn_TYPE_descriptor_t asn_DEF_SBcAP_Stop_All_Indicator;
extern const asn_INTEGER_specifics_t asn_SPC_Stop_All_Indicator_specs_1;
asn_struct_free_f Stop_All_Indicator_free;
asn_struct_print_f Stop_All_Indicator_print;
asn_constr_check_f Stop_All_Indicator_constraint;
per_type_decoder_f Stop_All_Indicator_decode_aper;
per_type_encoder_f Stop_All_Indicator_encode_aper;
extern const asn_INTEGER_specifics_t asn_SPC_SBcAP_Stop_All_Indicator_specs_1;
asn_struct_free_f SBcAP_Stop_All_Indicator_free;
asn_struct_print_f SBcAP_Stop_All_Indicator_print;
asn_constr_check_f SBcAP_Stop_All_Indicator_constraint;
per_type_decoder_f SBcAP_Stop_All_Indicator_decode_aper;
per_type_encoder_f SBcAP_Stop_All_Indicator_encode_aper;
#ifdef __cplusplus
}

View File

@@ -37,6 +37,8 @@ typedef struct SBcAP_Stop_Warning_Indication {
/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_SBcAP_Stop_Warning_Indication;
extern asn_SEQUENCE_specifics_t asn_SPC_SBcAP_Stop_Warning_Indication_specs_1;
extern asn_TYPE_member_t asn_MBR_SBcAP_Stop_Warning_Indication_1[2];
#ifdef __cplusplus
}

View File

@@ -37,6 +37,8 @@ typedef struct SBcAP_Stop_Warning_Request {
/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_SBcAP_Stop_Warning_Request;
extern asn_SEQUENCE_specifics_t asn_SPC_SBcAP_Stop_Warning_Request_specs_1;
extern asn_TYPE_member_t asn_MBR_SBcAP_Stop_Warning_Request_1[2];
#ifdef __cplusplus
}

View File

@@ -37,6 +37,8 @@ typedef struct SBcAP_Stop_Warning_Response {
/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_SBcAP_Stop_Warning_Response;
extern asn_SEQUENCE_specifics_t asn_SPC_SBcAP_Stop_Warning_Response_specs_1;
extern asn_TYPE_member_t asn_MBR_SBcAP_Stop_Warning_Response_1[2];
#ifdef __cplusplus
}

View File

@@ -32,12 +32,12 @@ typedef long SBcAP_TriggeringMessage_t;
/* Implementation */
extern asn_per_constraints_t asn_PER_type_SBcAP_TriggeringMessage_constr_1;
extern asn_TYPE_descriptor_t asn_DEF_SBcAP_TriggeringMessage;
extern const asn_INTEGER_specifics_t asn_SPC_TriggeringMessage_specs_1;
asn_struct_free_f TriggeringMessage_free;
asn_struct_print_f TriggeringMessage_print;
asn_constr_check_f TriggeringMessage_constraint;
per_type_decoder_f TriggeringMessage_decode_aper;
per_type_encoder_f TriggeringMessage_encode_aper;
extern const asn_INTEGER_specifics_t asn_SPC_SBcAP_TriggeringMessage_specs_1;
asn_struct_free_f SBcAP_TriggeringMessage_free;
asn_struct_print_f SBcAP_TriggeringMessage_print;
asn_constr_check_f SBcAP_TriggeringMessage_constraint;
per_type_decoder_f SBcAP_TriggeringMessage_decode_aper;
per_type_encoder_f SBcAP_TriggeringMessage_encode_aper;
#ifdef __cplusplus
}

View File

@@ -33,12 +33,12 @@ typedef long SBcAP_TypeOfError_t;
/* Implementation */
extern asn_per_constraints_t asn_PER_type_SBcAP_TypeOfError_constr_1;
extern asn_TYPE_descriptor_t asn_DEF_SBcAP_TypeOfError;
extern const asn_INTEGER_specifics_t asn_SPC_TypeOfError_specs_1;
asn_struct_free_f TypeOfError_free;
asn_struct_print_f TypeOfError_print;
asn_constr_check_f TypeOfError_constraint;
per_type_decoder_f TypeOfError_decode_aper;
per_type_encoder_f TypeOfError_encode_aper;
extern const asn_INTEGER_specifics_t asn_SPC_SBcAP_TypeOfError_specs_1;
asn_struct_free_f SBcAP_TypeOfError_free;
asn_struct_print_f SBcAP_TypeOfError_print;
asn_constr_check_f SBcAP_TypeOfError_constraint;
per_type_decoder_f SBcAP_TypeOfError_decode_aper;
per_type_encoder_f SBcAP_TypeOfError_encode_aper;
#ifdef __cplusplus
}

View File

@@ -37,6 +37,8 @@ typedef struct SBcAP_Write_Replace_Warning_Indication {
/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_SBcAP_Write_Replace_Warning_Indication;
extern asn_SEQUENCE_specifics_t asn_SPC_SBcAP_Write_Replace_Warning_Indication_specs_1;
extern asn_TYPE_member_t asn_MBR_SBcAP_Write_Replace_Warning_Indication_1[2];
#ifdef __cplusplus
}

View File

@@ -37,6 +37,8 @@ typedef struct SBcAP_Write_Replace_Warning_Request {
/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_SBcAP_Write_Replace_Warning_Request;
extern asn_SEQUENCE_specifics_t asn_SPC_SBcAP_Write_Replace_Warning_Request_specs_1;
extern asn_TYPE_member_t asn_MBR_SBcAP_Write_Replace_Warning_Request_1[2];
#ifdef __cplusplus
}

View File

@@ -37,6 +37,8 @@ typedef struct SBcAP_Write_Replace_Warning_Response {
/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_SBcAP_Write_Replace_Warning_Response;
extern asn_SEQUENCE_specifics_t asn_SPC_SBcAP_Write_Replace_Warning_Response_specs_1;
extern asn_TYPE_member_t asn_MBR_SBcAP_Write_Replace_Warning_Response_1[2];
#ifdef __cplusplus
}

View File

@@ -30,10 +30,17 @@ osmo_cbc_SOURCES = \
smscb_peer_fsm.c \
$(NULL)
osmo_cbc_LDADD = $(LIBOSMOCORE_LIBS) $(LIBOSMOGSM_LIBS) $(LIBOSMOVTY_LIBS) \
$(LIBOSMONETIF_LIBS) \
$(ULFIUS_LIBS) $(JANSSON_LIBS) $(ORCANIA_LIBS) $(LIBSCTP_LIBS) \
sbcap/libosmo-sbcap.la
osmo_cbc_LDADD = \
sbcap/libosmo-sbcap.la \
$(LIBOSMOCORE_LIBS) \
$(LIBOSMOGSM_LIBS) \
$(LIBOSMOVTY_LIBS) \
$(LIBOSMONETIF_LIBS) \
$(ULFIUS_LIBS) \
$(JANSSON_LIBS) \
$(ORCANIA_LIBS) \
$(LIBSCTP_LIBS) \
$(NULL)
regen:
$(MAKE) -C sbcap regen

View File

@@ -108,12 +108,16 @@ static const struct log_info log_info = {
static int cbc_vty_go_parent(struct vty *vty)
{
switch (vty->node) {
case CBSP_NODE:
g_cbc->config.cbsp.configured = true;
break;
case SBcAP_NODE:
/* If no local addr set, add a default one: */
if (g_cbc->config.sbcap.num_local_host == 0) {
g_cbc->config.sbcap.local_host[0] = talloc_strdup(g_cbc, "127.0.0.1");
g_cbc->config.sbcap.num_local_host = 1;
}
g_cbc->config.sbcap.configured = true;
vty->node = CONFIG_NODE;
vty->index = NULL;
break;

View File

@@ -576,6 +576,26 @@ DEFUN(cfg_cbc_peer, cfg_cbc_peer_cmd,
enum cbc_peer_protocol proto;
proto = get_string_value(cbc_peer_proto_name_vty, argv[0]);
switch (proto) {
case CBC_PEER_PROTO_CBSP:
if (!g_cbc->config.cbsp.configured) {
vty_out(vty, "%% Node '%s' must be configured before configuring node 'peer'!%s",
argv[0], VTY_NEWLINE);
return CMD_WARNING;
}
break;
case CBC_PEER_PROTO_SBcAP:
if (!g_cbc->config.sbcap.configured) {
vty_out(vty, "%% Node '%s' must be configured before configuring node 'peer'!%s",
argv[0], VTY_NEWLINE);
return CMD_WARNING;
}
break;
case CBC_PEER_PROTO_SABP:
default:
return CMD_WARNING;
}
peer = cbc_peer_by_name(argv[1]);
if (!peer)
peer = cbc_peer_create(argv[1], proto);

View File

@@ -33,6 +33,8 @@ ASN_MODULE_SRC = \
gen/constr_SET_OF_print.c \
gen/constr_SET_OF_rfill.c \
gen/constr_TYPE.c \
gen/ENUMERATED.c \
gen/ENUMERATED_aper.c \
gen/GraphicString.c \
gen/INTEGER_aper.c \
gen/INTEGER.c \
@@ -348,7 +350,9 @@ SKEL_HEADER_FILES = \
skel/constr_TYPE.h \
skel/constraints.h \
skel/der_encoder.h \
skel/jer_decoder.h \
skel/jer_encoder.h \
skel/jer_support.h \
skel/oer_decoder.h \
skel/oer_encoder.h \
skel/oer_support.h \
@@ -374,7 +378,7 @@ noinst_LTLIBRARIES=libosmo-asn1-sbcap.la
libosmo_asn1_sbcap_la_SOURCES=$(ASN_MODULE_SRC)
libosmo_asn1_sbcap_la_LIBADD=$(ASN1C_LDADD)
sbcap_LIBVERSION=0:0:0
sbcap_LIBVERSION=2:0:0
lib_LTLIBRARIES = libosmo-sbcap.la
libosmo_sbcap_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(sbcap_LIBVERSION) -no-undefined
libosmo_sbcap_la_LIBADD = $(LIBOSMOCORE_LIBS) $(LIBOSMOGSM_LIBS) $(LIBOSMOVTY_LIBS) \

View File

@@ -18,6 +18,7 @@ asn_TYPE_operation_t asn_OP_ANY = {
0,
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
OCTET_STRING_compare,
OCTET_STRING_copy,
#if !defined(ASN_DISABLE_BER_SUPPORT)
OCTET_STRING_decode_ber,
OCTET_STRING_encode_der,
@@ -33,9 +34,11 @@ asn_TYPE_operation_t asn_OP_ANY = {
0,
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
OCTET_STRING_decode_jer_hex,
ANY_encode_jer,
#else
0,
0,
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
#if !defined(ASN_DISABLE_OER_SUPPORT)
0,

View File

@@ -24,6 +24,7 @@ asn_TYPE_operation_t asn_OP_BIT_STRING = {
0,
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
BIT_STRING_compare,
BIT_STRING_copy,
#if !defined(ASN_DISABLE_BER_SUPPORT)
OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */
OCTET_STRING_encode_der, /* Implemented in terms of OCTET STRING */
@@ -39,9 +40,11 @@ asn_TYPE_operation_t asn_OP_BIT_STRING = {
0,
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
OCTET_STRING_decode_jer_hex,
BIT_STRING_encode_jer,
#else
0,
0,
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
#if !defined(ASN_DISABLE_OER_SUPPORT)
BIT_STRING_decode_oer,
@@ -211,3 +214,37 @@ BIT_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
return 1;
}
}
int
BIT_STRING_copy(const asn_TYPE_descriptor_t *td, void **aptr,
const void *bptr) {
const asn_OCTET_STRING_specifics_t *specs = td->specifics;
BIT_STRING_t *a = (BIT_STRING_t *)*aptr;
const BIT_STRING_t *b = (const BIT_STRING_t *)bptr;
if(!b) {
if(a) {
FREEMEM(a->buf);
FREEMEM(a);
*aptr = 0;
}
return 0;
}
if(!a) {
a = *aptr = CALLOC(1, specs->struct_size);
if(!a) return -1;
}
uint8_t* buf = MALLOC(b->size + 1);
if(!buf) return -1;
memcpy(buf, b->buf, b->size);
buf[b->size] = 0;
FREEMEM(a->buf);
a->buf = buf;
a->size = b->size;
a->bits_unused = b->bits_unused;
return 0;
}

View File

@@ -0,0 +1,92 @@
/*-
* Copyright (c) 2003, 2005, 2006 Lev Walkin <vlm@lionet.info>.
* All rights reserved.
* Redistribution and modifications are permitted subject to BSD license.
*/
#include <asn_internal.h>
#include <ENUMERATED.h>
/*
* ENUMERATED basic type description.
*/
static const ber_tlv_tag_t asn_DEF_ENUMERATED_tags[] = {
(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
};
asn_TYPE_operation_t asn_OP_ENUMERATED = {
ASN__PRIMITIVE_TYPE_free,
#if !defined(ASN_DISABLE_PRINT_SUPPORT)
INTEGER_print, /* Implemented in terms of INTEGER */
#else
0,
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
INTEGER_compare, /* Implemented in terms of INTEGER */
INTEGER_copy, /* Implemented in terms of INTEGER */
#if !defined(ASN_DISABLE_BER_SUPPORT)
ber_decode_primitive,
INTEGER_encode_der, /* Implemented in terms of INTEGER */
#else
0,
0,
#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
#if !defined(ASN_DISABLE_XER_SUPPORT)
INTEGER_decode_xer, /* This is temporary! */
INTEGER_encode_xer,
#else
0,
0,
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
ENUMERATED_decode_jer,
INTEGER_encode_jer,
#else
0,
0,
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
#if !defined(ASN_DISABLE_OER_SUPPORT)
ENUMERATED_decode_oer,
ENUMERATED_encode_oer,
#else
0,
0,
#endif /* !defined(ASN_DISABLE_OER_SUPPORT) */
#if !defined(ASN_DISABLE_UPER_SUPPORT)
ENUMERATED_decode_uper, /* Unaligned PER decoder */
ENUMERATED_encode_uper, /* Unaligned PER encoder */
#else
0,
0,
#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
#if !defined(ASN_DISABLE_APER_SUPPORT)
ENUMERATED_decode_aper, /* Aligned PER decoder */
ENUMERATED_encode_aper, /* Aligned PER encoder */
#else
0,
0,
#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
#if !defined(ASN_DISABLE_RFILL_SUPPORT)
ENUMERATED_random_fill,
#else
0,
#endif /* !defined(ASN_DISABLE_RFILL_SUPPORT) */
0 /* Use generic outmost tag fetcher */
};
asn_TYPE_descriptor_t asn_DEF_ENUMERATED = {
"ENUMERATED",
"ENUMERATED",
&asn_OP_ENUMERATED,
asn_DEF_ENUMERATED_tags,
sizeof(asn_DEF_ENUMERATED_tags) / sizeof(asn_DEF_ENUMERATED_tags[0]),
asn_DEF_ENUMERATED_tags, /* Same as above */
sizeof(asn_DEF_ENUMERATED_tags) / sizeof(asn_DEF_ENUMERATED_tags[0]),
{
#if !defined(ASN_DISABLE_OER_SUPPORT)
0,
#endif /* !defined(ASN_DISABLE_OER_SUPPORT) */
#if !defined(ASN_DISABLE_UPER_SUPPORT) || !defined(ASN_DISABLE_APER_SUPPORT)
0,
#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) || !defined(ASN_DISABLE_APER_SUPPORT) */
asn_generic_no_constraint
},
0, 0, /* No members */
0 /* No specifics */
};

View File

@@ -0,0 +1,43 @@
/*
* Copyright (c) 2017 Lev Walkin <vlm@lionet.info>.
* All rights reserved.
* Redistribution and modifications are permitted subject to BSD license.
*/
#include <asn_internal.h>
#include <ENUMERATED.h>
#include <NativeEnumerated.h>
asn_dec_rval_t
ENUMERATED_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
const asn_TYPE_descriptor_t *td,
const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
asn_dec_rval_t rval;
ENUMERATED_t *st = (ENUMERATED_t *)*sptr;
long value;
void *vptr = &value;
if(!st) {
st = (ENUMERATED_t *)(*sptr = CALLOC(1, sizeof(*st)));
if(!st) ASN__DECODE_FAILED;
}
rval = NativeEnumerated_decode_aper(opt_codec_ctx, td, constraints,
(void **)&vptr, pd);
if(rval.code == RC_OK)
if(asn_long2INTEGER(st, value))
rval.code = RC_FAIL;
return rval;
}
asn_enc_rval_t
ENUMERATED_encode_aper(const asn_TYPE_descriptor_t *td,
const asn_per_constraints_t *constraints,
const void *sptr, asn_per_outp_t *po) {
const ENUMERATED_t *st = (const ENUMERATED_t *)sptr;
long value;
if(asn_INTEGER2long(st, &value))
ASN__ENCODE_FAILED;
return NativeEnumerated_encode_aper(td, constraints, &value, po);
}

View File

@@ -20,6 +20,7 @@ asn_TYPE_operation_t asn_OP_GraphicString = {
0,
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
OCTET_STRING_compare,
OCTET_STRING_copy,
#if !defined(ASN_DISABLE_BER_SUPPORT)
OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */
OCTET_STRING_encode_der,
@@ -35,9 +36,11 @@ asn_TYPE_operation_t asn_OP_GraphicString = {
0,
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
OCTET_STRING_decode_jer_hex,
OCTET_STRING_encode_jer, /* Can't expect it to be ASCII/UTF8 */
#else
0,
0,
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
#if !defined(ASN_DISABLE_OER_SUPPORT)
OCTET_STRING_decode_oer,

View File

@@ -22,6 +22,7 @@ asn_TYPE_operation_t asn_OP_INTEGER = {
0,
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
INTEGER_compare,
INTEGER_copy,
#if !defined(ASN_DISABLE_BER_SUPPORT)
ber_decode_primitive,
INTEGER_encode_der,
@@ -37,9 +38,11 @@ asn_TYPE_operation_t asn_OP_INTEGER = {
0,
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
INTEGER_decode_jer,
INTEGER_encode_jer,
#else
0,
0,
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
#if !defined(ASN_DISABLE_OER_SUPPORT)
INTEGER_decode_oer, /* OER decoder */
@@ -361,7 +364,8 @@ asn_imax2INTEGER(INTEGER_t *st, intmax_t value) {
break;
}
/* Copy the integer body */
for(bp = buf, pend1 += add; p != pend1; p += add)
pend1 += add;
for(bp = buf; p != pend1; p += add)
*bp++ = *p;
if(st->buf) FREEMEM(st->buf);
@@ -411,6 +415,33 @@ asn_ulong2INTEGER(INTEGER_t *st, unsigned long value) {
return asn_imax2INTEGER(st, value);
}
int asn_INTEGER2int64(const INTEGER_t *st, int64_t *value) {
intmax_t v;
if(asn_INTEGER2imax(st, &v) == 0) {
if(v < INT64_MIN || v > INT64_MAX) {
errno = ERANGE;
return -1;
}
*value = v;
return 0;
} else {
return -1;
}
}
int asn_INTEGER2uint64(const INTEGER_t *st, uint64_t *value) {
uintmax_t v;
if(asn_INTEGER2umax(st, &v) == 0) {
if(v > UINT64_MAX) {
errno = ERANGE;
return -1;
}
*value = v;
return 0;
} else {
return -1;
}
}
int
asn_uint642INTEGER(INTEGER_t *st, uint64_t value) {
@@ -736,3 +767,40 @@ INTEGER_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
}
}
int
INTEGER_copy(const asn_TYPE_descriptor_t *td, void **aptr,
const void *bptr) {
(void)td;
INTEGER_t *a = *aptr;
const INTEGER_t *b = bptr;
if(!b) {
if(a) {
FREEMEM(a->buf);
FREEMEM(a);
*aptr = 0;
}
return 0;
}
if(!a) {
a = *aptr = CALLOC(1, sizeof(*a));
if(!a) return -1;
}
if(b->size) {
uint8_t* buf = MALLOC(b->size);
if(!buf) return -1;
memcpy(buf, b->buf, b->size);
FREEMEM(a->buf);
a->buf = buf;
a->size = b->size;
} else {
FREEMEM(a->buf);
a->buf = 0;
a->size = 0;
}
return 0;
}

View File

@@ -57,7 +57,7 @@ INTEGER_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
int max_range_bytes = (ct->range_bits >> 3) +
(((ct->range_bits % 8) > 0) ? 1 : 0);
int length = 0, i;
long value = 0;
intmax_t value = 0;
for (i = 1; ; i++) {
int upper = 1 << i;
@@ -79,18 +79,18 @@ INTEGER_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
int buf = per_get_few_bits(pd, 8);
if (buf < 0)
ASN__DECODE_FAILED;
value += (((long)buf) << (8 * length));
value += (((intmax_t)buf) << (8 * length));
}
value += ct->lower_bound;
if((specs && specs->field_unsigned)
? asn_uint642INTEGER(st, (unsigned long)value)
: asn_int642INTEGER(st, value))
? asn_umax2INTEGER(st, (uintmax_t)value)
: asn_imax2INTEGER(st, value))
ASN__DECODE_FAILED;
ASN_DEBUG("Got value %ld + low %lld",
value, (long long int)ct->lower_bound);
ASN_DEBUG("Got value %"ASN_PRIdMAX" + low %"ASN_PRIdMAX"",
value, (intmax_t)ct->lower_bound);
} else {
long value = 0;
intmax_t value = 0;
if (ct->range_bits < 8) {
value = per_get_few_bits(pd, ct->range_bits);
if(value < 0) ASN__DECODE_STARVED;
@@ -108,11 +108,11 @@ INTEGER_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
}
value += ct->lower_bound;
if((specs && specs->field_unsigned)
? asn_ulong2INTEGER(st, value)
: asn_long2INTEGER(st, value))
? asn_umax2INTEGER(st, (uintmax_t)value)
: asn_imax2INTEGER(st, value))
ASN__DECODE_FAILED;
ASN_DEBUG("Got value %ld + low %lld",
value, (long long int)ct->lower_bound);
ASN_DEBUG("Got value %"ASN_PRIdMAX" + low %"ASN_PRIdMAX"",
value, (intmax_t)ct->lower_bound);
}
return rval;
} else {
@@ -167,7 +167,7 @@ INTEGER_encode_aper(const asn_TYPE_descriptor_t *td,
const uint8_t *buf;
const uint8_t *end;
const asn_per_constraint_t *ct;
long value = 0;
intmax_t value = 0;
if(!st || st->size == 0) ASN__ENCODE_FAILED;
@@ -179,26 +179,26 @@ INTEGER_encode_aper(const asn_TYPE_descriptor_t *td,
if(ct) {
int inext = 0;
if(specs && specs->field_unsigned) {
unsigned long uval;
if(asn_INTEGER2ulong(st, &uval))
uintmax_t uval;
if(asn_INTEGER2umax(st, &uval))
ASN__ENCODE_FAILED;
/* Check proper range */
if(ct->flags & APC_SEMI_CONSTRAINED) {
if(uval < (unsigned long)ct->lower_bound)
if(uval < (uintmax_t)ct->lower_bound)
inext = 1;
} else if(ct->range_bits >= 0) {
if(uval < (unsigned long)ct->lower_bound
|| uval > (unsigned long)ct->upper_bound)
if(uval < (uintmax_t)ct->lower_bound
|| uval > (uintmax_t)ct->upper_bound)
inext = 1;
}
ASN_DEBUG("Value %lu (%02x/%zu) lb %lld ub %lld %s",
ASN_DEBUG("Value %"ASN_PRIdMAX" (%02x/%"ASN_PRI_SIZE") lb %"ASN_PRIdMAX" ub %"ASN_PRIdMAX" %s",
uval, st->buf[0], st->size,
(long long int)ct->lower_bound,
(long long int)ct->upper_bound,
(intmax_t)ct->lower_bound,
(intmax_t)ct->upper_bound,
inext ? "ext" : "fix");
value = uval;
} else {
if(asn_INTEGER2long(st, &value)) ASN__ENCODE_FAILED;
if(asn_INTEGER2imax(st, &value)) ASN__ENCODE_FAILED;
/* Check proper range */
if(ct->flags & APC_SEMI_CONSTRAINED) {
if(value < ct->lower_bound)
@@ -208,10 +208,10 @@ INTEGER_encode_aper(const asn_TYPE_descriptor_t *td,
|| value > ct->upper_bound)
inext = 1;
}
ASN_DEBUG("Value %lu (%02x/%zu) lb %lld ub %lld %s",
ASN_DEBUG("Value %"ASN_PRIdMAX" (%02x/%"ASN_PRI_SIZE") lb %"ASN_PRIdMAX" ub %"ASN_PRIdMAX" %s",
value, st->buf[0], st->size,
(long long int)ct->lower_bound,
(long long int)ct->upper_bound,
(intmax_t)ct->lower_bound,
(intmax_t)ct->upper_bound,
inext ? "ext" : "fix");
}
if(ct->flags & APC_EXTENSIBLE) {
@@ -225,11 +225,11 @@ INTEGER_encode_aper(const asn_TYPE_descriptor_t *td,
/* X.691, #12.2.2 */
if(ct && ct->range_bits >= 0) {
unsigned long v;
uintmax_t v;
/* #10.5.6 */
ASN_DEBUG("Encoding integer %ld (%lld) with range %d bits",
value, (long long int)(value - ct->lower_bound),
ASN_DEBUG("Encoding integer %"ASN_PRIdMAX" (%"ASN_PRIdMAX") with range %d bits",
value, (intmax_t)(value - ct->lower_bound),
ct->range_bits);
v = value - ct->lower_bound;
@@ -287,7 +287,7 @@ INTEGER_encode_aper(const asn_TYPE_descriptor_t *td,
}
if(ct && ct->lower_bound) {
ASN_DEBUG("Adjust lower bound to %lld", (long long int)ct->lower_bound);
ASN_DEBUG("Adjust lower bound to %"ASN_PRIdMAX"", (intmax_t)ct->lower_bound);
/* TODO: adjust lower bound */
ASN__ENCODE_FAILED;
}

View File

@@ -26,6 +26,7 @@ asn_TYPE_operation_t asn_OP_NativeEnumerated = {
0,
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
NativeInteger_compare,
NativeInteger_copy,
#if !defined(ASN_DISABLE_BER_SUPPORT)
NativeInteger_decode_ber,
NativeInteger_encode_der,
@@ -41,9 +42,11 @@ asn_TYPE_operation_t asn_OP_NativeEnumerated = {
0,
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
NativeEnumerated_decode_jer,
NativeEnumerated_encode_jer,
#else
0,
0,
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
#if !defined(ASN_DISABLE_OER_SUPPORT)
NativeEnumerated_decode_oer,

View File

@@ -64,7 +64,7 @@ NativeEnumerated_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
*/
/* XXX handle indefinite index length > 64k */
value = aper_get_nsnnwn(pd, 65537);
value = aper_get_nsnnwn(pd);
if(value < 0) ASN__DECODE_STARVED;
value += specs->extension - 1;
//if(value >= specs->map_count)
@@ -148,9 +148,7 @@ NativeEnumerated_encode_aper(const asn_TYPE_descriptor_t *td,
ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld",
value, specs->extension, inext,
value - (inext ? (specs->extension - 1) : 0));
if(aper_put_nsnnwn(po,
ct->upper_bound - ct->lower_bound + 1,
value - (inext ? (specs->extension - 1) : 0)))
if(aper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0)))
ASN__ENCODE_FAILED;
ASN__ENCODED_OK(er);

View File

@@ -27,6 +27,7 @@ asn_TYPE_operation_t asn_OP_NativeInteger = {
0,
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
NativeInteger_compare,
NativeInteger_copy,
#if !defined(ASN_DISABLE_BER_SUPPORT)
NativeInteger_decode_ber,
NativeInteger_encode_der,
@@ -42,9 +43,11 @@ asn_TYPE_operation_t asn_OP_NativeInteger = {
0,
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
NativeInteger_decode_jer,
NativeInteger_encode_jer,
#else
0,
0,
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
#if !defined(ASN_DISABLE_OER_SUPPORT)
NativeInteger_decode_oer, /* OER decoder */
@@ -150,3 +153,30 @@ NativeInteger_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const v
return 1;
}
}
int
NativeInteger_copy(const asn_TYPE_descriptor_t *td, void **aptr, const void *bptr) {
unsigned long *a = *aptr;
const unsigned long *b = bptr;
(void)td;
/* Check if source has data */
if(!b) {
/* Clear destination */
if(a) {
FREEMEM(a);
*aptr = 0;
}
return 0;
}
if(!a) {
a = *aptr = MALLOC(sizeof(*a));
if(!a) return -1;
}
*a = *b;
return 0;
}

View File

@@ -63,8 +63,10 @@ NativeInteger_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
0, sizeof(variants) / sizeof(variants[0]) - 1)];
}
if(!constraints) constraints = &td->encoding_constraints;
#if !defined(ASN_DISABLE_UPER_SUPPORT) || !defined(ASN_DISABLE_APER_SUPPORT)
if(!constraints || !constraints->per_constraints)
constraints = &td->encoding_constraints;
const asn_per_constraints_t *ct;
ct = constraints ? constraints->per_constraints : 0;
@@ -74,6 +76,8 @@ NativeInteger_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
ct->value.upper_bound);
}
}
#else
if(!constraints) constraints = &td->encoding_constraints;
#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) || !defined(ASN_DISABLE_APER_SUPPORT) */
}

View File

@@ -24,6 +24,7 @@ asn_TYPE_operation_t asn_OP_OBJECT_IDENTIFIER = {
0,
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
OCTET_STRING_compare, /* Implemented in terms of a string comparison */
OCTET_STRING_copy, /* Implemented in terms of a string copy */
#if !defined(ASN_DISABLE_BER_SUPPORT)
ber_decode_primitive,
der_encode_primitive,
@@ -39,9 +40,11 @@ asn_TYPE_operation_t asn_OP_OBJECT_IDENTIFIER = {
0,
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
OBJECT_IDENTIFIER_decode_jer,
OBJECT_IDENTIFIER_encode_jer,
#else
0,
0,
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
#if !defined(ASN_DISABLE_OER_SUPPORT)
OBJECT_IDENTIFIER_decode_oer,

View File

@@ -26,6 +26,7 @@ asn_TYPE_operation_t asn_OP_OCTET_STRING = {
0,
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
OCTET_STRING_compare,
OCTET_STRING_copy,
#if !defined(ASN_DISABLE_BER_SUPPORT)
OCTET_STRING_decode_ber,
OCTET_STRING_encode_der,
@@ -41,9 +42,11 @@ asn_TYPE_operation_t asn_OP_OCTET_STRING = {
0,
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
OCTET_STRING_decode_jer_hex,
OCTET_STRING_encode_jer,
#else
0,
0,
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
#if !defined(ASN_DISABLE_OER_SUPPORT)
OCTET_STRING_decode_oer,
@@ -247,6 +250,43 @@ OCTET_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
}
int
OCTET_STRING_copy(const asn_TYPE_descriptor_t *td, void **aptr,
const void *bptr) {
const asn_OCTET_STRING_specifics_t *specs =
td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics
: &asn_SPC_OCTET_STRING_specs;
OCTET_STRING_t *a = *aptr;
const OCTET_STRING_t *b = bptr;
if(!b) {
if(a) {
FREEMEM(a->buf);
a->buf = 0;
a->size = 0;
FREEMEM(a);
}
*aptr = 0;
return 0;
}
if(!a) {
a = *aptr = (OCTET_STRING_t *)CALLOC(1, specs->struct_size);
if(!a) return -1;
}
void *buf = MALLOC(b->size + 1);
if(!buf) return -1;
memcpy(buf, b->buf, b->size);
((uint8_t *)buf)[b->size] = '\0';
FREEMEM(a->buf);
a->buf = (uint8_t *)buf;
a->size = b->size;
return 0;
}
#if !defined(ASN_DISABLE_UPER_SUPPORT) || !defined(ASN_DISABLE_APER_SUPPORT)
int
OCTET_STRING_per_get_characters(asn_per_data_t *po, uint8_t *buf,

View File

@@ -179,7 +179,6 @@ OCTET_STRING_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
raw_len = aper_get_length(pd, csiz->lower_bound, csiz->upper_bound,
csiz->effective_bits, &repeat);
if(raw_len < 0) RETURN(RC_WMORE);
raw_len += csiz->lower_bound;
ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)",
(long)csiz->effective_bits, (long)raw_len,

View File

@@ -14,6 +14,7 @@ asn_TYPE_operation_t asn_OP_OPEN_TYPE = {
0,
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
OPEN_TYPE_compare,
OPEN_TYPE_copy,
#if !defined(ASN_DISABLE_BER_SUPPORT)
OPEN_TYPE_decode_ber,
OPEN_TYPE_encode_der,
@@ -29,9 +30,11 @@ asn_TYPE_operation_t asn_OP_OPEN_TYPE = {
0,
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
OPEN_TYPE_decode_jer,
OPEN_TYPE_encode_jer,
#else
0,
0,
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
#if !defined(ASN_DISABLE_OER_SUPPORT)
OPEN_TYPE_decode_oer,

View File

@@ -53,7 +53,8 @@ OPEN_TYPE_aper_get(const asn_codec_ctx_t *opt_codec_ctx,
(char *)*memb_ptr2
+ elm->type->elements[selected.presence_index - 1].memb_offset;
rv = aper_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL,
rv = aper_open_type_get(opt_codec_ctx, selected.type_descriptor,
elm->type->elements[selected.presence_index - 1].encoding_constraints.per_constraints,
&inner_value, pd);
switch(rv.code) {
case RC_OK:
@@ -110,7 +111,7 @@ OPEN_TYPE_encode_aper(const asn_TYPE_descriptor_t *td,
memb_ptr = (const char *)sptr + elm->memb_offset;
}
if(aper_open_type_put(elm->type, NULL, memb_ptr, po) < 0) {
if(aper_open_type_put(elm->type, elm->encoding_constraints.per_constraints, memb_ptr, po) < 0) {
ASN__ENCODE_FAILED;
}

View File

@@ -20,6 +20,7 @@ asn_TYPE_operation_t asn_OP_ObjectDescriptor = {
0,
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
OCTET_STRING_compare,
OCTET_STRING_copy,
#if !defined(ASN_DISABLE_BER_SUPPORT)
OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */
OCTET_STRING_encode_der,
@@ -35,9 +36,11 @@ asn_TYPE_operation_t asn_OP_ObjectDescriptor = {
0,
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
OCTET_STRING_decode_jer_utf8,
OCTET_STRING_encode_jer_utf8,
#else
0,
0,
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
#if !defined(ASN_DISABLE_OER_SUPPORT)
0,

View File

@@ -7,7 +7,7 @@
#include <osmocom/sbcap/SBcAP_Error-Indication.h>
static asn_TYPE_member_t asn_MBR_SBcAP_Error_Indication_1[] = {
asn_TYPE_member_t asn_MBR_SBcAP_Error_Indication_1[] = {
{ ATF_NOFLAGS, 0, offsetof(struct SBcAP_Error_Indication, protocolIEs),
(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-1, /* IMPLICIT tag at current level */
@@ -32,7 +32,7 @@ static const ber_tlv_tag_t asn_DEF_SBcAP_Error_Indication_tags_1[] = {
static const asn_TYPE_tag2member_t asn_MAP_SBcAP_Error_Indication_tag2el_1[] = {
{ (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* protocolIEs */
};
static asn_SEQUENCE_specifics_t asn_SPC_SBcAP_Error_Indication_specs_1 = {
asn_SEQUENCE_specifics_t asn_SPC_SBcAP_Error_Indication_specs_1 = {
sizeof(struct SBcAP_Error_Indication),
offsetof(struct SBcAP_Error_Indication, _asn_ctx),
asn_MAP_SBcAP_Error_Indication_tag2el_1,

View File

@@ -7,7 +7,7 @@
#include <osmocom/sbcap/SBcAP_PWS-Failure-Indication.h>
static asn_TYPE_member_t asn_MBR_SBcAP_PWS_Failure_Indication_1[] = {
asn_TYPE_member_t asn_MBR_SBcAP_PWS_Failure_Indication_1[] = {
{ ATF_NOFLAGS, 0, offsetof(struct SBcAP_PWS_Failure_Indication, protocolIEs),
(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-1, /* IMPLICIT tag at current level */
@@ -51,7 +51,7 @@ static const asn_TYPE_tag2member_t asn_MAP_SBcAP_PWS_Failure_Indication_tag2el_1
{ (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* protocolIEs */
{ (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* protocolExtensions */
};
static asn_SEQUENCE_specifics_t asn_SPC_SBcAP_PWS_Failure_Indication_specs_1 = {
asn_SEQUENCE_specifics_t asn_SPC_SBcAP_PWS_Failure_Indication_specs_1 = {
sizeof(struct SBcAP_PWS_Failure_Indication),
offsetof(struct SBcAP_PWS_Failure_Indication, _asn_ctx),
asn_MAP_SBcAP_PWS_Failure_Indication_tag2el_1,

View File

@@ -7,7 +7,7 @@
#include <osmocom/sbcap/SBcAP_PWS-Restart-Indication.h>
static asn_TYPE_member_t asn_MBR_SBcAP_PWS_Restart_Indication_1[] = {
asn_TYPE_member_t asn_MBR_SBcAP_PWS_Restart_Indication_1[] = {
{ ATF_NOFLAGS, 0, offsetof(struct SBcAP_PWS_Restart_Indication, protocolIEs),
(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-1, /* IMPLICIT tag at current level */
@@ -51,7 +51,7 @@ static const asn_TYPE_tag2member_t asn_MAP_SBcAP_PWS_Restart_Indication_tag2el_1
{ (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* protocolIEs */
{ (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* protocolExtensions */
};
static asn_SEQUENCE_specifics_t asn_SPC_SBcAP_PWS_Restart_Indication_specs_1 = {
asn_SEQUENCE_specifics_t asn_SPC_SBcAP_PWS_Restart_Indication_specs_1 = {
sizeof(struct SBcAP_PWS_Restart_Indication),
offsetof(struct SBcAP_PWS_Restart_Indication, _asn_ctx),
asn_MAP_SBcAP_PWS_Restart_Indication_tag2el_1,

View File

@@ -7,7 +7,7 @@
#include <osmocom/sbcap/SBcAP_Stop-Warning-Indication.h>
static asn_TYPE_member_t asn_MBR_SBcAP_Stop_Warning_Indication_1[] = {
asn_TYPE_member_t asn_MBR_SBcAP_Stop_Warning_Indication_1[] = {
{ ATF_NOFLAGS, 0, offsetof(struct SBcAP_Stop_Warning_Indication, protocolIEs),
(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-1, /* IMPLICIT tag at current level */
@@ -51,7 +51,7 @@ static const asn_TYPE_tag2member_t asn_MAP_SBcAP_Stop_Warning_Indication_tag2el_
{ (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* protocolIEs */
{ (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* protocolExtensions */
};
static asn_SEQUENCE_specifics_t asn_SPC_SBcAP_Stop_Warning_Indication_specs_1 = {
asn_SEQUENCE_specifics_t asn_SPC_SBcAP_Stop_Warning_Indication_specs_1 = {
sizeof(struct SBcAP_Stop_Warning_Indication),
offsetof(struct SBcAP_Stop_Warning_Indication, _asn_ctx),
asn_MAP_SBcAP_Stop_Warning_Indication_tag2el_1,

View File

@@ -7,7 +7,7 @@
#include <osmocom/sbcap/SBcAP_Stop-Warning-Request.h>
static asn_TYPE_member_t asn_MBR_SBcAP_Stop_Warning_Request_1[] = {
asn_TYPE_member_t asn_MBR_SBcAP_Stop_Warning_Request_1[] = {
{ ATF_NOFLAGS, 0, offsetof(struct SBcAP_Stop_Warning_Request, protocolIEs),
(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-1, /* IMPLICIT tag at current level */
@@ -51,7 +51,7 @@ static const asn_TYPE_tag2member_t asn_MAP_SBcAP_Stop_Warning_Request_tag2el_1[]
{ (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* protocolIEs */
{ (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* protocolExtensions */
};
static asn_SEQUENCE_specifics_t asn_SPC_SBcAP_Stop_Warning_Request_specs_1 = {
asn_SEQUENCE_specifics_t asn_SPC_SBcAP_Stop_Warning_Request_specs_1 = {
sizeof(struct SBcAP_Stop_Warning_Request),
offsetof(struct SBcAP_Stop_Warning_Request, _asn_ctx),
asn_MAP_SBcAP_Stop_Warning_Request_tag2el_1,

View File

@@ -7,7 +7,7 @@
#include <osmocom/sbcap/SBcAP_Stop-Warning-Response.h>
static asn_TYPE_member_t asn_MBR_SBcAP_Stop_Warning_Response_1[] = {
asn_TYPE_member_t asn_MBR_SBcAP_Stop_Warning_Response_1[] = {
{ ATF_NOFLAGS, 0, offsetof(struct SBcAP_Stop_Warning_Response, protocolIEs),
(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-1, /* IMPLICIT tag at current level */
@@ -51,7 +51,7 @@ static const asn_TYPE_tag2member_t asn_MAP_SBcAP_Stop_Warning_Response_tag2el_1[
{ (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* protocolIEs */
{ (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* protocolExtensions */
};
static asn_SEQUENCE_specifics_t asn_SPC_SBcAP_Stop_Warning_Response_specs_1 = {
asn_SEQUENCE_specifics_t asn_SPC_SBcAP_Stop_Warning_Response_specs_1 = {
sizeof(struct SBcAP_Stop_Warning_Response),
offsetof(struct SBcAP_Stop_Warning_Response, _asn_ctx),
asn_MAP_SBcAP_Stop_Warning_Response_tag2el_1,

View File

@@ -7,7 +7,7 @@
#include <osmocom/sbcap/SBcAP_Write-Replace-Warning-Indication.h>
static asn_TYPE_member_t asn_MBR_SBcAP_Write_Replace_Warning_Indication_1[] = {
asn_TYPE_member_t asn_MBR_SBcAP_Write_Replace_Warning_Indication_1[] = {
{ ATF_NOFLAGS, 0, offsetof(struct SBcAP_Write_Replace_Warning_Indication, protocolIEs),
(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-1, /* IMPLICIT tag at current level */
@@ -51,7 +51,7 @@ static const asn_TYPE_tag2member_t asn_MAP_SBcAP_Write_Replace_Warning_Indicatio
{ (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* protocolIEs */
{ (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* protocolExtensions */
};
static asn_SEQUENCE_specifics_t asn_SPC_SBcAP_Write_Replace_Warning_Indication_specs_1 = {
asn_SEQUENCE_specifics_t asn_SPC_SBcAP_Write_Replace_Warning_Indication_specs_1 = {
sizeof(struct SBcAP_Write_Replace_Warning_Indication),
offsetof(struct SBcAP_Write_Replace_Warning_Indication, _asn_ctx),
asn_MAP_SBcAP_Write_Replace_Warning_Indication_tag2el_1,

View File

@@ -7,7 +7,7 @@
#include <osmocom/sbcap/SBcAP_Write-Replace-Warning-Request.h>
static asn_TYPE_member_t asn_MBR_SBcAP_Write_Replace_Warning_Request_1[] = {
asn_TYPE_member_t asn_MBR_SBcAP_Write_Replace_Warning_Request_1[] = {
{ ATF_NOFLAGS, 0, offsetof(struct SBcAP_Write_Replace_Warning_Request, protocolIEs),
(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-1, /* IMPLICIT tag at current level */
@@ -51,7 +51,7 @@ static const asn_TYPE_tag2member_t asn_MAP_SBcAP_Write_Replace_Warning_Request_t
{ (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* protocolIEs */
{ (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* protocolExtensions */
};
static asn_SEQUENCE_specifics_t asn_SPC_SBcAP_Write_Replace_Warning_Request_specs_1 = {
asn_SEQUENCE_specifics_t asn_SPC_SBcAP_Write_Replace_Warning_Request_specs_1 = {
sizeof(struct SBcAP_Write_Replace_Warning_Request),
offsetof(struct SBcAP_Write_Replace_Warning_Request, _asn_ctx),
asn_MAP_SBcAP_Write_Replace_Warning_Request_tag2el_1,

View File

@@ -7,7 +7,7 @@
#include <osmocom/sbcap/SBcAP_Write-Replace-Warning-Response.h>
static asn_TYPE_member_t asn_MBR_SBcAP_Write_Replace_Warning_Response_1[] = {
asn_TYPE_member_t asn_MBR_SBcAP_Write_Replace_Warning_Response_1[] = {
{ ATF_NOFLAGS, 0, offsetof(struct SBcAP_Write_Replace_Warning_Response, protocolIEs),
(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-1, /* IMPLICIT tag at current level */
@@ -51,7 +51,7 @@ static const asn_TYPE_tag2member_t asn_MAP_SBcAP_Write_Replace_Warning_Response_
{ (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* protocolIEs */
{ (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* protocolExtensions */
};
static asn_SEQUENCE_specifics_t asn_SPC_SBcAP_Write_Replace_Warning_Response_specs_1 = {
asn_SEQUENCE_specifics_t asn_SPC_SBcAP_Write_Replace_Warning_Response_specs_1 = {
sizeof(struct SBcAP_Write_Replace_Warning_Response),
offsetof(struct SBcAP_Write_Replace_Warning_Response, _asn_ctx),
asn_MAP_SBcAP_Write_Replace_Warning_Response_tag2el_1,

View File

@@ -25,8 +25,7 @@ aper_get_length(asn_per_data_t *pd, ssize_t lb, ssize_t ub,
*repeat = 0;
if (constrained && ub < 65536) {
int range = ub - lb + 1;
return aper_get_nsnnwn(pd, range);
return aper_get_constrained_whole_number(pd, lb, ub);
}
if (aper_get_align(pd) < 0)
@@ -70,55 +69,117 @@ aper_get_nslength(asn_per_data_t *pd) {
}
ssize_t
aper_get_nsnnwn(asn_per_data_t *pd, int range) {
ssize_t value;
int bytes = 0;
aper_get_nsnnwn(asn_per_data_t *pd) {
int b;
int length;
ASN_DEBUG("getting nsnnwn with range %d", range);
ASN_DEBUG("getting nsnnwn");
if(range <= 255) {
int i;
b = per_get_few_bits(pd, 1);
if (b == -1)
return -1;
if (range < 0) return -1;
/* 1 -> 8 bits */
for (i = 1; i <= 8; i++) {
int upper = 1 << i;
if (upper >= range)
break;
}
value = per_get_few_bits(pd, i);
return value;
} else if (range == 256){
/* 1 byte */
bytes = 1;
} else if (range <= 65536) {
/* 2 bytes */
bytes = 2;
} else {
//return -1;
int length;
/* X.691 2002 10.6.1 */
if (b == 0)
return per_get_few_bits(pd, 6);
/* handle indefinite range */
length = per_get_few_bits(pd, 1);
if (length == 0)
return per_get_few_bits(pd, 6);
if (aper_get_align(pd) < 0)
return -1;
length = per_get_few_bits(pd, 8);
/* the length is not likely to be that big */
if (length > 4)
return -1;
value = 0;
if (per_get_many_bits(pd, (uint8_t *)&value, 0, length * 8) < 0)
return -1;
return value;
}
if (aper_get_align(pd) < 0)
return -1;
value = per_get_few_bits(pd, 8 * bytes);
return value;
/* X.691 2002 10.6.2 */
/* X.691 2002 10.9.3.5 */
b = per_get_few_bits(pd, 1);
if (b == -1)
return -1;
if (b == 1) {
/* other 10.9.3.x cases not handled, it's doubtful we reach them in practice */
ASN_DEBUG("todo: X.691 2002 10.9.3.x");
return -1;
}
/* X.691 2002 10.9.3.6 */
length = per_get_few_bits(pd, 7);
if (length > 4) {
/* todo */
ASN_DEBUG("todo: X.691 2002 10.9.3.6 for length > 4");
return -1;
}
ASN_DEBUG("length %d\n", length);
/* todo: 0xffffffff will be seen as -1 and will lead to decoding failure */
return per_get_few_bits(pd, length * 8);
}
/* X.691 2002 10.5 - Decoding of a constrained whole number */
long
aper_get_constrained_whole_number(asn_per_data_t *pd, long lb, long ub) {
assert(ub >= lb);
long range = ub - lb + 1;
int range_len;
int value_len;
long value;
ASN_DEBUG("aper get constrained_whole_number with lb %ld and ub %ld", lb, ub);
/* X.691 2002 10.5.4 */
if (range == 1)
return lb;
/* X.691 2002 10.5.7.1 - The bit-field case. */
if (range <= 255) {
int bitfield_size = 8;
for (bitfield_size = 8; bitfield_size >= 2; bitfield_size--)
if ((range - 1) & (1 << (bitfield_size-1)))
break;
value = per_get_few_bits(pd, bitfield_size);
if (value < 0 || value >= range)
return -1;
return value + lb;
}
/* X.691 2002 10.5.7.2 - The one-octet case. */
if (range == 256) {
if (aper_get_align(pd))
return -1;
value = per_get_few_bits(pd, 8);
if (value < 0 || value >= range)
return -1;
return value + lb;
}
/* X.691 2002 10.5.7.3 - The two-octet case. */
if (range <= 65536) {
if (aper_get_align(pd))
return -1;
value = per_get_few_bits(pd, 16);
if (value < 0 || value >= range)
return -1;
return value + lb;
}
/* X.691 2002 10.5.7.4 - The indefinite length case. */
/* since we limit input to be 'long' we don't handle all numbers */
/* and so length determinant is retrieved as X.691 2002 10.9.3.3 */
/* number of bytes to store the range */
for (range_len = 3; ; range_len++) {
long bits = ((long)1) << (8 * range_len);
if (range - 1 < bits)
break;
}
value_len = aper_get_constrained_whole_number(pd, 1, range_len);
if (value_len == -1)
return -1;
if (value_len > 4) {
ASN_DEBUG("todo: aper_get_constrained_whole_number: value_len > 4");
return -1;
}
if (aper_get_align(pd))
return -1;
value = per_get_few_bits(pd, value_len * 8);
if (value < 0 || value >= range)
return -1;
return value + lb;
}
int aper_put_align(asn_per_outp_t *po) {
@@ -142,11 +203,9 @@ aper_put_length(asn_per_outp_t *po, ssize_t lb, ssize_t ub, size_t n, int *need_
ASN_DEBUG("APER put length %zu with range (%zd..%zd)", n, lb, ub);
/* 11.9 X.691 Note 2 */
if (constrained && ub < 65536) {
int range = ub - lb + 1;
return aper_put_nsnnwn(po, range, n) ? -1 : (ssize_t)n;
}
/* X.691 2002 10.9.3.3 */
if (constrained && ub < 65536)
return aper_put_constrained_whole_number(po, lb, ub, n + lb) ? -1 : (ssize_t)n;
if (aper_put_align(po) < 0)
return -1;
@@ -189,51 +248,113 @@ aper_put_nslength(asn_per_outp_t *po, size_t length) {
}
int
aper_put_nsnnwn(asn_per_outp_t *po, int range, int number) {
int bytes;
aper_put_nsnnwn(asn_per_outp_t *po, int number) {
int len;
ASN_DEBUG("aper put nsnnwn %d with range %d", number, range);
/* 10.5.7.1 X.691 */
if(range < 0) {
int i;
for (i = 1; ; i++) {
int bits = 1 << (8 * i);
if (number <= bits)
break;
}
bytes = i;
assert(i <= 4);
ASN_DEBUG("aper put nsnnwn %d", number);
if (number <= 63) {
if (per_put_few_bits(po, 0, 1))
return -1;
return per_put_few_bits(po, number, 6);
}
if(range <= 255) {
if (per_put_few_bits(po, 1, 1))
return -1;
if (number < 256) {
len = 1;
} else if (number < 65536) {
len = 2;
} else { /* number > 64K */
int i;
for (i = 1; i <= 8; i++) {
int bits = 1 << i;
if (range <= bits)
break;
}
return per_put_few_bits(po, number, i);
} else if(range == 256) {
if (number >= range)
return -1;
bytes = 1;
} else if(range <= 65536) {
if (number >= range)
return -1;
bytes = 2;
} else { /* Ranges > 64K */
int i;
for (i = 1; ; i++) {
for (i = 3; ; i++) {
int bits = 1 << (8 * i);
if (range <= bits)
if (number < bits)
break;
}
assert(i <= 4);
bytes = i;
len = i;
}
if (aper_put_align(po) < 0)
return -1;
/* put the length which is a non-constrained whole number */
if (len <= 127) {
if(per_put_few_bits(po, 0, 1))
return -1;
if(per_put_few_bits(po, len, 7))
return -1;
} else {
/* todo but not big problem, it's very doubtful that the
* number of bytes to encode 'number' will be > 127
*/
return -1;
}
if(aper_put_align(po) < 0) /* Aligning on octet */
return -1;
/* if(per_put_few_bits(po, bytes, 8))
return -1;
*/
return per_put_few_bits(po, number, 8 * bytes);
return per_put_few_bits(po, number, 8 * len);
}
/* X.691 2002 10.5 - Encoding of a constrained whole number */
int
aper_put_constrained_whole_number(asn_per_outp_t *po, long lb, long ub, long number) {
assert(ub >= lb);
long range = ub - lb + 1;
long value = number - lb;
int range_len;
int value_len;
ASN_DEBUG("aper put constrained_whole_number %ld with lb %ld and ub %ld", number, lb, ub);
if (number < lb || number > ub)
return -1;
/* X.691 2002 10.5.4 */
if (range == 1)
return 0;
/* X.691 2002 10.5.7.1 - The bit-field case. */
if (range <= 255) {
int bitfield_size = 8;
for (bitfield_size = 8; bitfield_size >= 2; bitfield_size--)
if ((range - 1) & (1 << (bitfield_size-1)))
break;
return per_put_few_bits(po, value, bitfield_size);
}
/* X.691 2002 10.5.7.2 - The one-octet case. */
if (range == 256) {
if (aper_put_align(po))
return -1;
return per_put_few_bits(po, value, 8);
}
/* X.691 2002 10.5.7.3 - The two-octet case. */
if (range <= 65536) {
if (aper_put_align(po))
return -1;
return per_put_few_bits(po, value, 16);
}
/* X.691 2002 10.5.7.4 - The indefinite length case. */
/* since we limit input to be 'long' we don't handle all numbers */
/* and so length determinant is stored as X.691 2002 10.9.3.3 */
/* number of bytes to store the range */
for (range_len = 3; ; range_len++) {
int bits = 1 << (8 * range_len);
if (range - 1 < bits)
break;
}
/* number of bytes to store the value */
for (value_len = 1; ; value_len++) {
long bits = ((long)1) << (8 * value_len);
if (value < bits)
break;
}
if (aper_put_constrained_whole_number(po, 1, range_len, value_len))
return -1;
if (aper_put_align(po))
return -1;
return per_put_few_bits(po, value, value_len * 8);
}

View File

@@ -229,6 +229,9 @@ asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx,
#if !defined(ASN_DISABLE_XER_SUPPORT)
enum xer_encoder_flags_e xer_flags = XER_F_CANONICAL;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
enum jer_encoder_flags_e jer_flags = JER_F;
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
(void)opt_codec_ctx; /* Parameters are not checked on encode yet. */
@@ -432,9 +435,15 @@ asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx,
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
case ATS_BASIC_JER:
case ATS_JER_MINIFIED:
/* Currently JER_F and JER_F_MINIFIED have opposite purposes
* so we just flip the flag. */
jer_flags &= ~JER_F;
jer_flags |= JER_F_MINIFIED;
/* Fall through. */
case ATS_JER:
if(td->op->jer_encoder) {
er = jer_encode(td, sptr, callback, callback_key);
er = jer_encode(td, sptr, jer_flags, callback, callback_key);
if(er.encoded == -1) {
if(er.failed_type && er.failed_type->op->jer_encoder) {
errno = EBADF; /* Structure has incorrect form. */
@@ -533,6 +542,15 @@ asn_decode(const asn_codec_ctx_t *opt_codec_ctx,
errno = ENOENT;
ASN__DECODE_FAILED;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
case ATS_JER:
case ATS_JER_MINIFIED:
#if !defined(ASN_DISABLE_JER_SUPPORT)
return jer_decode(opt_codec_ctx, td, sptr, buffer, size);
#else
errno = ENOENT;
ASN__DECODE_FAILED;
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
}
}

View File

@@ -26,7 +26,9 @@ asn__format_to_callback(int (*cb)(const void *, size_t, void *key), void *key,
buf_size <<= 1;
if(buf == scratch) {
buf = MALLOC(buf_size);
if(!buf) return -1;
if(!buf) {
return -1;
}
} else {
void *p = REALLOC(buf, buf_size);
if(!p) {

View File

@@ -6,6 +6,7 @@
#include <asn_internal.h>
#include <asn_random_fill.h>
#include <constr_TYPE.h>
#include <stdlib.h>
int
asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr,
@@ -42,17 +43,22 @@ asn_random_between(intmax_t lb, intmax_t rb) {
uintmax_t range = asn__intmax_range(lb, rb);
uintmax_t value = 0;
uintmax_t got_entropy = 0;
(void)intmax_max;
assert(RAND_MAX > 0xffffff); /* Seen 7ffffffd! */
int max = 0xffffff;
#ifdef __WIN32__
max = RAND_MAX-1;
#endif
assert(RAND_MAX > max); /* Seen 7ffffffd! */
assert(range < intmax_max);
for(; got_entropy < range;) {
got_entropy = (got_entropy << 24) | 0xffffff;
got_entropy = (got_entropy << 24) | max;
#ifdef HAVE_RANDOM
value = (value << 24) | (random() % 0xffffff);
value = (value << 24) | (random() % max);
#else
value = (value << 24) | (rand() % 0xffffff);
value = (value << 24) | (rand() % max);
#endif
}

View File

@@ -13,6 +13,7 @@ asn_TYPE_operation_t asn_OP_CHOICE = {
0,
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
CHOICE_compare,
CHOICE_copy,
#if !defined(ASN_DISABLE_BER_SUPPORT)
CHOICE_decode_ber,
CHOICE_encode_der,
@@ -28,9 +29,11 @@ asn_TYPE_operation_t asn_OP_CHOICE = {
0,
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
CHOICE_decode_jer,
CHOICE_encode_jer,
#else
0,
0,
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
#if !defined(ASN_DISABLE_OER_SUPPORT)
CHOICE_decode_oer,
@@ -154,13 +157,14 @@ CHOICE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
void
CHOICE_free(const asn_TYPE_descriptor_t *td, void *ptr,
enum asn_struct_free_method method) {
const asn_CHOICE_specifics_t *specs =
(const asn_CHOICE_specifics_t *)td->specifics;
const asn_CHOICE_specifics_t *specs;
unsigned present;
if(!td || !ptr)
return;
specs = (const asn_CHOICE_specifics_t *)td->specifics;
ASN_DEBUG("Freeing %s as CHOICE", td->name);
/*
@@ -311,6 +315,59 @@ CHOICE_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const void *bp
}
}
int
CHOICE_copy(const asn_TYPE_descriptor_t *td, void **aptr, const void *bptr) {
if(!td) return -1;
void *st = *aptr;
const asn_CHOICE_specifics_t *specs =
(const asn_CHOICE_specifics_t *)td->specifics;
const asn_TYPE_member_t *elm; /* CHOICE's element */
int present;
int ret;
void *amemb;
void **amembp;
const void *bmemb;
if(!bptr) {
if(st) {
ASN_STRUCT_FREE(*td, st);
*aptr = NULL;
}
return 0;
}
if(!st) {
st = *aptr = CALLOC(1, specs->struct_size);
if(!st) return -1;
}
present = _fetch_present_idx(bptr,
specs->pres_offset, specs->pres_size);
if(present <= 0 && (unsigned)present > td->elements_count) return -1;
--present;
elm = &td->elements[present];
if(elm->flags & ATF_POINTER) {
/* Member is a pointer to another structure */
amembp = (void **)((char *)st + elm->memb_offset);
bmemb = *(const void* const*)((const char*)bptr + elm->memb_offset);
} else {
amemb = (char *)st + elm->memb_offset;
amembp = &amemb;
bmemb = (const void*)((const char*)bptr + elm->memb_offset);
}
ret = elm->type->op->copy_struct(elm->type, amembp, bmemb);
if (ret != 0) return ret;
_set_present_idx(st,
specs->pres_offset,
specs->pres_size, present + 1);
return 0;
}
/*
* Return the 1-based choice variant presence index.
* Returns 0 in case of error.

View File

@@ -40,6 +40,8 @@ CHOICE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
value = per_get_few_bits(pd, 1);
if(value < 0) ASN__DECODE_STARVED;
if(value) ct = 0; /* Not restricted */
if((unsigned)value >= td->elements_count)
ASN__DECODE_FAILED;
}
if(ct && ct->range_bits >= 0) {
@@ -53,8 +55,8 @@ CHOICE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
if(specs->ext_start == -1)
ASN__DECODE_FAILED;
if (ct && ct->upper_bound >= ct->lower_bound) {
value = aper_get_nsnnwn(pd, ct->upper_bound - ct->lower_bound + 1);
if(specs && specs->tag2el_count > (unsigned)specs->ext_start) {
value = aper_get_nsnnwn(pd); /* extension elements range */
if(value < 0) ASN__DECODE_STARVED;
value += specs->ext_start;
if((unsigned)value >= td->elements_count)
@@ -166,11 +168,7 @@ CHOICE_encode_aper(const asn_TYPE_descriptor_t *td,
asn_enc_rval_t rval = {0,0,0};
if(specs->ext_start == -1)
ASN__ENCODE_FAILED;
int n = present - specs->ext_start;
if(n <= 63) {
if(n < 0) ASN__ENCODE_FAILED;
if(per_put_few_bits(po, n, 7)) ASN__ENCODE_FAILED;
} else
if(aper_put_nsnnwn(po, present - specs->ext_start))
ASN__ENCODE_FAILED;
if(aper_open_type_put(elm->type, elm->encoding_constraints.per_constraints,
memb_ptr, po))

View File

@@ -14,6 +14,7 @@ asn_TYPE_operation_t asn_OP_SEQUENCE = {
0,
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
SEQUENCE_compare,
SEQUENCE_copy,
#if !defined(ASN_DISABLE_BER_SUPPORT)
SEQUENCE_decode_ber,
SEQUENCE_encode_der,
@@ -29,9 +30,11 @@ asn_TYPE_operation_t asn_OP_SEQUENCE = {
0,
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
SEQUENCE_decode_jer,
SEQUENCE_encode_jer,
#else
0,
0,
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
#if !defined(ASN_DISABLE_OER_SUPPORT)
SEQUENCE_decode_oer,
@@ -66,13 +69,14 @@ void
SEQUENCE_free(const asn_TYPE_descriptor_t *td, void *sptr,
enum asn_struct_free_method method) {
size_t edx;
const asn_SEQUENCE_specifics_t *specs =
(const asn_SEQUENCE_specifics_t *)td->specifics;
const asn_SEQUENCE_specifics_t *specs;
asn_struct_ctx_t *ctx; /* Decoder context */
if(!td || !sptr)
return;
specs = (const asn_SEQUENCE_specifics_t *)td->specifics;
ASN_DEBUG("Freeing %s as SEQUENCE", td->name);
for(edx = 0; edx < td->elements_count; edx++) {
@@ -124,6 +128,8 @@ SEQUENCE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
for(edx = 0; edx < td->elements_count; edx++) {
asn_TYPE_member_t *elm = &td->elements[edx];
const void *memb_ptr;
asn_constr_check_f *constr;
int ret;
if(elm->flags & ATF_POINTER) {
memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset);
@@ -139,14 +145,12 @@ SEQUENCE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
}
if(elm->encoding_constraints.general_constraints) {
int ret = elm->encoding_constraints.general_constraints(elm->type, memb_ptr,
ctfailcb, app_key);
if(ret) return ret;
} else {
return elm->type->encoding_constraints.general_constraints(elm->type,
memb_ptr, ctfailcb, app_key);
}
constr = elm->encoding_constraints.general_constraints;
if(!constr)
constr = elm->type->encoding_constraints.general_constraints;
ret = constr(elm->type, memb_ptr, ctfailcb, app_key);
if(ret) return ret;
}
return 0;
@@ -195,3 +199,53 @@ SEQUENCE_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
return 0;
}
int
SEQUENCE_copy(const asn_TYPE_descriptor_t *td, void **aptr,
const void *bptr) {
if(!td) return -1;
const asn_SEQUENCE_specifics_t *specs =
(const asn_SEQUENCE_specifics_t *)td->specifics;
size_t edx;
void *st = *aptr; /* Target structure */
if(!bptr) {
if(st) {
SEQUENCE_free(td, st, 0);
*aptr = 0;
}
return 0;
}
/*
* Create the target structure if it is not present already.
*/
if(st == 0) {
st = *aptr = CALLOC(1, specs->struct_size);
if(st == 0) return -1;
}
for(edx = 0; edx < td->elements_count; edx++) {
asn_TYPE_member_t *elm = &td->elements[edx];
void *amemb;
void **amembp;
const void *bmemb;
int ret;
if(elm->flags & ATF_POINTER) {
/* Member is a pointer to another structure */
amembp = (void **)((char *)st + elm->memb_offset);
bmemb = *(const void* const*)((const char*)bptr + elm->memb_offset);
} else {
amemb = (char *)st + elm->memb_offset;
amembp = &amemb;
bmemb = (const void*)((const char*)bptr + elm->memb_offset);
}
ret = elm->type->op->copy_struct(elm->type, amembp, bmemb);
if(ret != 0) return ret;
}
return 0;
}

View File

@@ -15,6 +15,7 @@ asn_TYPE_operation_t asn_OP_SEQUENCE_OF = {
0,
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
SEQUENCE_OF_compare,
SEQUENCE_OF_copy,
#if !defined(ASN_DISABLE_BER_SUPPORT)
SEQUENCE_OF_decode_ber,
SEQUENCE_OF_encode_der,
@@ -30,9 +31,11 @@ asn_TYPE_operation_t asn_OP_SEQUENCE_OF = {
0,
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
SEQUENCE_OF_decode_jer,
SEQUENCE_OF_encode_jer,
#else
0,
0,
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
#if !defined(ASN_DISABLE_OER_SUPPORT)
SEQUENCE_OF_decode_oer, /* Same as SET OF decoder. */

View File

@@ -14,6 +14,7 @@ asn_TYPE_operation_t asn_OP_SET_OF = {
0,
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
SET_OF_compare,
SET_OF_copy,
#if !defined(ASN_DISABLE_BER_SUPPORT)
SET_OF_decode_ber,
SET_OF_encode_der,
@@ -29,9 +30,11 @@ asn_TYPE_operation_t asn_OP_SET_OF = {
0,
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
SET_OF_decode_jer,
SET_OF_encode_jer,
#else
0,
0,
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
#if !defined(ASN_DISABLE_OER_SUPPORT)
SET_OF_decode_oer,
@@ -369,3 +372,58 @@ SET_OF_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
return 0;
}
int
SET_OF_copy(const asn_TYPE_descriptor_t *td, void **aptr,
const void *bptr) {
if(!td) return -1;
const asn_SET_OF_specifics_t *specs =
(const asn_SET_OF_specifics_t *)td->specifics;
void *st = *aptr;
if(!bptr) {
if(*aptr) {
asn_set_empty(_A_SET_FROM_VOID(*aptr));
*aptr = 0;
}
return 0;
}
if(st == 0) {
st = *aptr = CALLOC(1, specs->struct_size);
if(st == 0) return -1;
}
asn_anonymous_set_ *a = _A_SET_FROM_VOID(*aptr);
const asn_anonymous_set_ *b = _A_CSET_FROM_VOID(bptr);
if(b->size) {
void *_new_arr;
_new_arr = REALLOC(a->array, b->size * sizeof(b->array[0]));
if(_new_arr) {
a->array = (void **)_new_arr;
a->size = b->size;
} else {
return -1;
}
a->count = b->count;
for(int i = 0; i < b->count; i++) {
void *bmemb = b->array[i];
if(bmemb) {
void *amemb = 0;
int ret;
ret = td->elements->type->op->copy_struct(
td->elements->type,
&amemb, bmemb);
if(ret != 0) return ret;
a->array[i] = amemb;
} else {
a->array[i] = 0;
}
}
}
return 0;
}

View File

@@ -129,13 +129,12 @@ SET_OF_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
if(value) ct = 0; /* Not restricted! */
}
if(ct && ct->effective_bits >= 0) {
if(ct && ct->upper_bound >= 1 && ct->upper_bound <= 65535
&& ct->upper_bound == ct->lower_bound) {
/* X.691, #19.5: No length determinant */
nelems = aper_get_nsnnwn(pd, ct->upper_bound - ct->lower_bound + 1);
ASN_DEBUG("Preparing to fetch %ld+%lld elements from %s",
(long)nelems, (long long int)ct->lower_bound, td->name);
if(nelems < 0) ASN__DECODE_STARVED;
nelems += ct->lower_bound;
nelems = ct->upper_bound;
ASN_DEBUG("Preparing to fetch %ld elements from %s",
(long)nelems, td->name);
} else {
nelems = -1;
}

View File

@@ -9,7 +9,7 @@
/*
* Version of the ASN.1 infrastructure shipped with compiler.
*/
int get_asn1c_environment_version() { return ASN1C_ENVIRONMENT_VERSION; }
int get_asn1c_environment_version(void) { return ASN1C_ENVIRONMENT_VERSION; }
static asn_app_consume_bytes_f _print2fp;
@@ -54,6 +54,26 @@ asn_fprint(FILE *stream, const asn_TYPE_descriptor_t *td,
return fflush(stream);
}
/*
* Copy a structuture.
*/
int
asn_copy(const asn_TYPE_descriptor_t *td,
void **struct_dst, const void *struct_src) {
if(!td || !struct_dst || !struct_src) {
errno = EINVAL;
return -1;
}
if(!td->op) {
errno = ENOSYS;
return -1;
}
return td->op->copy_struct(td, struct_dst, struct_src);
}
/* Dump the data into the specified stdio stream */
static int
_print2fp(const void *buffer, size_t size, void *app_key) {

View File

@@ -29,6 +29,7 @@ extern asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
#define ANY_compare OCTET_STRING_compare
#define ANY_copy OCTET_STRING_copy
#define ANY_constraint asn_generic_no_constraint
@@ -43,6 +44,7 @@ xer_type_encoder_f ANY_encode_xer;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
jer_type_decoder_f ANY_decode_jer;
jer_type_encoder_f ANY_encode_jer;
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -31,6 +31,7 @@ asn_struct_print_f BIT_STRING_print; /* Human-readable output */
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
asn_struct_compare_f BIT_STRING_compare;
asn_struct_copy_f BIT_STRING_copy;
asn_constr_check_f BIT_STRING_constraint;
@@ -45,6 +46,7 @@ xer_type_encoder_f BIT_STRING_encode_xer;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
#define BIT_STRING_decode_jer OCTET_STRING_decode_jer_binary
jer_type_encoder_f BIT_STRING_encode_jer;
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -28,6 +28,7 @@ asn_struct_print_f BMPString_print; /* Human-readable output */
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
#define BMPString_compare OCTET_STRING_compare
#define BMPString_copy OCTET_STRING_copy
asn_constr_check_f BMPString_constraint;
@@ -42,6 +43,7 @@ xer_type_encoder_f BMPString_encode_xer;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
jer_type_decoder_f BMPString_decode_jer;
jer_type_encoder_f BMPString_encode_jer;
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -28,6 +28,7 @@ asn_struct_print_f BOOLEAN_print;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
asn_struct_compare_f BOOLEAN_compare;
asn_struct_copy_f BOOLEAN_copy;
#define BOOLEAN_constraint asn_generic_no_constraint
@@ -42,6 +43,7 @@ xer_type_encoder_f BOOLEAN_encode_xer;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
jer_type_decoder_f BOOLEAN_decode_jer;
jer_type_encoder_f BOOLEAN_encode_jer;
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -23,6 +23,7 @@ extern asn_TYPE_operation_t asn_OP_ENUMERATED;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
#define ENUMERATED_compare INTEGER_compare
#define ENUMERATED_copy INTEGER_copy
#define ENUMERATED_constraint asn_generic_no_constraint
@@ -37,6 +38,7 @@ extern asn_TYPE_operation_t asn_OP_ENUMERATED;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
jer_type_decoder_f ENUMERATED_decode_jer;
#define ENUMERATED_encode_jer INTEGER_encode_jer
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -23,6 +23,7 @@ extern asn_TYPE_operation_t asn_OP_GeneralString;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
#define GeneralString_compare OCTET_STRING_compare
#define GeneralString_copy OCTET_STRING_copy
#define GeneralString_constraint asn_generic_unknown_constraint
@@ -37,6 +38,7 @@ extern asn_TYPE_operation_t asn_OP_GeneralString;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
#define GeneralString_decode_jer OCTET_STRING_decode_jer_hex
#define GeneralString_encode_jer OCTET_STRING_encode_jer
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -23,6 +23,7 @@ asn_struct_print_f GeneralizedTime_print;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
asn_struct_compare_f GeneralizedTime_compare;
#define GeneralizedTime_copy OCTET_STRING_copy
asn_constr_check_f GeneralizedTime_constraint;
@@ -37,6 +38,7 @@ xer_type_encoder_f GeneralizedTime_encode_xer;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
#define GeneralizedTime_decode_jer OCTET_STRING_decode_jer_utf8
jer_type_encoder_f GeneralizedTime_encode_jer;
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -23,6 +23,7 @@ extern asn_TYPE_operation_t asn_OP_GraphicString;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
#define GraphicString_compare OCTET_STRING_compare
#define GraphicString_copy OCTET_STRING_copy
#define GraphicString_constraint asn_generic_unknown_constraint
@@ -37,6 +38,7 @@ extern asn_TYPE_operation_t asn_OP_GraphicString;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
#define GraphicString_decode_jer OCTET_STRING_decode_jer
#define GraphicString_encode_jer OCTET_STRING_encode_jer
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -26,6 +26,7 @@ extern asn_TYPE_operation_t asn_OP_IA5String;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
#define IA5String_compare OCTET_STRING_compare
#define IA5String_copy OCTET_STRING_copy
asn_constr_check_f IA5String_constraint;
@@ -40,6 +41,7 @@ asn_constr_check_f IA5String_constraint;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
#define IA5String_decode_jer OCTET_STRING_decode_jer_utf8
#define IA5String_encode_jer OCTET_STRING_encode_jer_utf8
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -47,6 +47,7 @@ asn_struct_print_f INTEGER_print;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
asn_struct_compare_f INTEGER_compare;
asn_struct_copy_f INTEGER_copy;
#define INTEGER_constraint asn_generic_no_constraint
@@ -61,6 +62,7 @@ xer_type_encoder_f INTEGER_encode_xer;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
jer_type_decoder_f INTEGER_decode_jer;
jer_type_encoder_f INTEGER_encode_jer;
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
@@ -106,6 +108,8 @@ int asn_INTEGER2long(const INTEGER_t *i, long *l);
int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l);
int asn_long2INTEGER(INTEGER_t *i, long l);
int asn_ulong2INTEGER(INTEGER_t *i, unsigned long l);
int asn_INTEGER2int64(const INTEGER_t *i, int64_t *l);
int asn_INTEGER2uint64(const INTEGER_t *i, uint64_t *l);
int asn_int642INTEGER(INTEGER_t *i, int64_t l);
int asn_uint642INTEGER(INTEGER_t *i, uint64_t l);

View File

@@ -24,6 +24,7 @@ extern asn_TYPE_operation_t asn_OP_ISO646String;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
#define ISO646String_compare OCTET_STRING_compare
#define ISO646String_copy OCTET_STRING_copy
#define ISO646String_constraint VisibleString_constraint
@@ -38,6 +39,7 @@ extern asn_TYPE_operation_t asn_OP_ISO646String;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
#define ISO646String_decode_jer OCTET_STRING_decode_jer_utf8
#define ISO646String_encode_jer OCTET_STRING_encode_jer_utf8
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -27,6 +27,7 @@ asn_struct_print_f NULL_print;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
asn_struct_compare_f NULL_compare;
asn_struct_copy_f NULL_copy;
#define NULL_constraint asn_generic_no_constraint
@@ -41,6 +42,7 @@ xer_type_encoder_f NULL_encode_xer;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
jer_type_decoder_f NULL_decode_jer;
jer_type_encoder_f NULL_encode_jer;
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -13,6 +13,7 @@
#define _NativeEnumerated_H_
#include <NativeInteger.h>
#include <ENUMERATED.h>
#ifdef __cplusplus
extern "C" {
@@ -28,6 +29,7 @@ extern asn_TYPE_operation_t asn_OP_NativeEnumerated;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
#define NativeEnumerated_compare NativeInteger_compare
#define NativeEnumerated_copy NativeInteger_copy
#define NativeEnumerated_constraint asn_generic_no_constraint
@@ -42,6 +44,7 @@ xer_type_encoder_f NativeEnumerated_encode_xer;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
jer_type_decoder_f NativeEnumerated_decode_jer;
jer_type_encoder_f NativeEnumerated_encode_jer;
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -29,6 +29,7 @@ asn_struct_print_f NativeInteger_print;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
asn_struct_compare_f NativeInteger_compare;
asn_struct_copy_f NativeInteger_copy;
#define NativeInteger_constraint asn_generic_no_constraint
@@ -43,6 +44,7 @@ xer_type_encoder_f NativeInteger_encode_xer;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
jer_type_decoder_f NativeInteger_decode_jer;
jer_type_encoder_f NativeInteger_encode_jer;
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -37,6 +37,7 @@ asn_struct_print_f NativeReal_print;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
asn_struct_compare_f NativeReal_compare;
asn_struct_copy_f NativeReal_copy;
#define NativeReal_constraint asn_generic_no_constraint
@@ -51,6 +52,7 @@ xer_type_encoder_f NativeReal_encode_xer;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
jer_type_decoder_f NativeReal_decode_jer;
jer_type_encoder_f NativeReal_encode_jer;
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -23,6 +23,7 @@ extern asn_TYPE_operation_t asn_OP_NumericString;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
#define NumericString_compare OCTET_STRING_compare
#define NumericString_copy OCTET_STRING_copy
asn_constr_check_f NumericString_constraint;
@@ -37,6 +38,7 @@ asn_constr_check_f NumericString_constraint;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
#define NumericString_decode_jer OCTET_STRING_decode_jer_utf8
#define NumericString_encode_jer OCTET_STRING_encode_jer_utf8
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -32,6 +32,7 @@ asn_struct_print_f OBJECT_IDENTIFIER_print;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
#define OBJECT_IDENTIFIER_compare OCTET_STRING_compare
#define OBJECT_IDENTIFIER_copy OCTET_STRING_copy
asn_constr_check_f OBJECT_IDENTIFIER_constraint;
@@ -46,6 +47,7 @@ xer_type_encoder_f OBJECT_IDENTIFIER_encode_xer;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
jer_type_decoder_f OBJECT_IDENTIFIER_decode_jer;
jer_type_encoder_f OBJECT_IDENTIFIER_encode_jer;
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -29,6 +29,7 @@ asn_struct_print_f OCTET_STRING_print_utf8;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
asn_struct_compare_f OCTET_STRING_compare;
asn_struct_copy_f OCTET_STRING_copy;
#define OCTET_STRING_constraint asn_generic_no_constraint
@@ -46,6 +47,8 @@ xer_type_encoder_f OCTET_STRING_encode_xer_utf8;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
jer_type_decoder_f OCTET_STRING_decode_jer_hex; /* Hexadecimal */
jer_type_decoder_f OCTET_STRING_decode_jer_utf8; /* ASCII/UTF-8 */
jer_type_encoder_f OCTET_STRING_encode_jer;
jer_type_encoder_f OCTET_STRING_encode_jer_utf8;
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -33,6 +33,7 @@ extern "C" {
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
#define OPEN_TYPE_compare CHOICE_compare
#define OPEN_TYPE_copy CHOICE_copy
#define OPEN_TYPE_constraint CHOICE_constraint
@@ -59,6 +60,13 @@ asn_dec_rval_t OPEN_TYPE_xer_get(
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
asn_dec_rval_t OPEN_TYPE_jer_get(
const asn_codec_ctx_t *opt_codec_ctx,
const asn_TYPE_descriptor_t *parent_type,
void *parent_structure,
const asn_TYPE_member_t *element,
const void *ptr, size_t size);
#define OPEN_TYPE_decode_jer NULL
#define OPEN_TYPE_encode_jer CHOICE_encode_jer
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
@@ -70,7 +78,10 @@ asn_dec_rval_t OPEN_TYPE_oer_get(
asn_TYPE_member_t *element, const void *ptr,
size_t size);
#define OPEN_TYPE_decode_oer NULL
#define OPEN_TYPE_encode_oer CHOICE_encode_oer
asn_enc_rval_t OPEN_TYPE_encode_oer(
const asn_TYPE_descriptor_t *type_descriptor,
const asn_oer_constraints_t *constraints, const void *struct_ptr,
asn_app_consume_bytes_f *consume_bytes_cb, void *app_key);
#endif /* !defined(ASN_DISABLE_OER_SUPPORT) */
#if !defined(ASN_DISABLE_UPER_SUPPORT)

View File

@@ -35,6 +35,7 @@ extern asn_TYPE_operation_t asn_OP_ObjectDescriptor;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
#define ObjectDescriptor_decode_jer OCTET_STRING_decode_jer_utf8
#define ObjectDescriptor_encode_jer OCTET_STRING_encode_jer_utf8
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -23,6 +23,7 @@ extern asn_TYPE_operation_t asn_OP_PrintableString;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
#define PrintableString_compare OCTET_STRING_compare
#define PrintableString_copy OCTET_STRING_copy
asn_constr_check_f PrintableString_constraint;
@@ -37,6 +38,7 @@ asn_constr_check_f PrintableString_constraint;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
#define PrintableString_decode_jer OCTET_STRING_decode_jer_utf8
#define PrintableString_encode_jer OCTET_STRING_encode_jer_utf8
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -54,6 +54,7 @@ asn_struct_print_f REAL_print;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
asn_struct_compare_f REAL_compare;
asn_struct_copy_f REAL_copy;
#define REAL_constraint asn_generic_no_constraint
@@ -68,6 +69,7 @@ xer_type_encoder_f REAL_encode_xer;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
jer_type_decoder_f REAL_decode_jer;
jer_type_encoder_f REAL_encode_jer;
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -28,6 +28,7 @@ asn_struct_print_f RELATIVE_OID_print;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
#define RELATIVE_OID_compare OCTET_STRING_compare
#define RELATIVE_OID_copy OCTET_STRING_copy
#define RELATIVE_OID_constraint asn_generic_no_constraint
@@ -42,6 +43,7 @@ xer_type_encoder_f RELATIVE_OID_encode_xer;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
jer_type_decoder_f RELATIVE_OID_decode_jer;
jer_type_encoder_f RELATIVE_OID_encode_jer;
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -23,6 +23,7 @@ extern asn_TYPE_operation_t asn_OP_T61String;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
#define T61String_compare OCTET_STRING_compare
#define T61String_copy OCTET_STRING_copy
#define T61String_constraint asn_generic_unknown_constraint
@@ -37,6 +38,7 @@ extern asn_TYPE_operation_t asn_OP_T61String;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
#define T61String_decode_jer OCTET_STRING_decode_jer_hex
#define T61String_encode_jer OCTET_STRING_encode_jer
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -23,6 +23,7 @@ extern asn_TYPE_operation_t asn_OP_TeletexString;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
#define TeletexString_compare OCTET_STRING_compare
#define TeletexString_copy OCTET_STRING_copy
#define TeletexString_constraint asn_generic_unknown_constraint
@@ -37,6 +38,7 @@ extern asn_TYPE_operation_t asn_OP_TeletexString;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
#define TeletexString_decode_jer OCTET_STRING_decode_jer_hex
#define TeletexString_encode_jer OCTET_STRING_encode_jer
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

View File

@@ -23,6 +23,7 @@ asn_struct_print_f UTCTime_print;
#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
asn_struct_compare_f UTCTime_compare;
#define UTCTime_copy OCTET_STRING_copy
asn_constr_check_f UTCTime_constraint;
@@ -37,6 +38,7 @@ xer_type_encoder_f UTCTime_encode_xer;
#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
#if !defined(ASN_DISABLE_JER_SUPPORT)
#define UTCTime_decode_jer OCTET_STRING_decode_jer_utf8
jer_type_encoder_f UTCTime_encode_jer;
#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */

Some files were not shown because too many files have changed in this diff Show More