KItinerary

dosipas2.h
1/*
2 SPDX-FileCopyrightText: 2025 Volker Krause <vkrause@kde.org>
3 SPDX-License-Identifier: LGPL-2.0-or-later
4*/
5
6#ifndef KITINERARY_DOSIPAS2_H
7#define KITINERARY_DOSIPAS2_H
8
9#include <kitinerary_export.h>
10
11#include "asn1/uperelement.h"
12#include "era/fcbticket.h"
13
14#include <QDateTime>
15#include <QList>
16#include <QVariant>
17
18namespace KItinerary {
19
20class UPERDecoder;
21
22/** UIC DOSIPAS container types.
23 * @see https://github.com/UnionInternationalCheminsdeFer/UIC-barcode
24 */
25namespace Dosipas {
26namespace v2 {
27
28class DataType {
29 UPER_GADGET
30 UPER_ELEMENT(QByteArray, dataFormat)
31 UPER_ELEMENT(QByteArray, data)
32 UPER_GADGET_FINALIZE
33 Q_PROPERTY(QVariant content READ content)
34public:
35 /** Decoded form of data, if in a supported format. */
36 [[nodiscard]] QVariant content() const;
37 /** Same as content(), but type-safe for FCB content. */
38 [[nodiscard]] std::optional<Fcb::UicRailTicketData> fcb() const;
39};
40
41class Level1DataType {
42 UPER_GADGET
43 UPER_ELEMENT_OPTIONAL(int, securityProviderNum)
44 UPER_ELEMENT_OPTIONAL(QByteArray, securityProviderIA5)
45 UPER_ELEMENT_OPTIONAL(int, keyId)
46 UPER_ELEMENT(QList<DataType>, dataSequence)
47 UPER_ELEMENT_OPTIONAL(QByteArray, level1KeyAlg)
48 UPER_ELEMENT_OPTIONAL(QByteArray, level2KeyAlg)
49 UPER_ELEMENT_OPTIONAL(QByteArray, level1SigningAlg)
50 UPER_ELEMENT_OPTIONAL(QByteArray, level2SigningAlg)
51 UPER_ELEMENT_OPTIONAL(QByteArray, level2PublicKey)
52 UPER_ELEMENT_OPTIONAL(int, endOfValidityYear)
53 UPER_ELEMENT_OPTIONAL(int, endOfValidityDay)
54 UPER_ELEMENT_OPTIONAL(int, endOfValidityTime)
55 UPER_ELEMENT_OPTIONAL(int, validityDuration)
56 UPER_GADGET_FINALIZE
57};
58
59class Level2DataType {
60 UPER_GADGET
61 UPER_ELEMENT(Level1DataType, level1Data)
62 UPER_ELEMENT_OPTIONAL(QByteArray, level1Signature)
63 UPER_ELEMENT_OPTIONAL(DataType, level2Data)
64 UPER_GADGET_FINALIZE
65};
66
67class KITINERARY_EXPORT UicBarcodeHeader {
68 UPER_GADGET
69 UPER_ELEMENT(QByteArray, format)
70 UPER_ELEMENT(Level2DataType, level2SignedData)
71 UPER_ELEMENT_OPTIONAL(QByteArray, level2Signature)
72 UPER_GADGET_FINALIZE
73
74 Q_PROPERTY(QByteArray rawData READ rawData)
75public:
76 UicBarcodeHeader();
77 explicit UicBarcodeHeader(const QByteArray &data);
78 [[nodiscard]] bool isValid() const;
79
80 [[nodiscard]] QByteArray rawData() const;
81private:
82 QByteArray m_data;
83};
84
85
86}
87}
88}
89
90#endif
Decoder for data encoded according to X.691 ASN.1 Unaligned Packed Encoding Rules (UPER).
Definition uperdecoder.h:17
UIC DOSIPAS container types.
Definition dosipas1.h:25
Classes for reservation/travel data models, data extraction and data augmentation.
Definition berelement.h:17
bool isValid(QStringView ifopt)
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Mar 28 2025 11:59:49 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.