2017-11-26 10:56:35 +00:00
|
|
|
# -*- coding: UTF-8 -*-
|
|
|
|
#/**
|
|
|
|
# * Software Name : pycrate
|
2018-02-09 21:23:26 +00:00
|
|
|
# * Version : 0.3
|
2017-11-26 10:56:35 +00:00
|
|
|
# *
|
|
|
|
# * Copyright 2017. Benoit Michau. ANSSI.
|
|
|
|
# *
|
2018-04-15 19:47:21 +00:00
|
|
|
# * This library is free software; you can redistribute it and/or
|
|
|
|
# * modify it under the terms of the GNU Lesser General Public
|
|
|
|
# * License as published by the Free Software Foundation; either
|
|
|
|
# * version 2.1 of the License, or (at your option) any later version.
|
|
|
|
# *
|
|
|
|
# * This library is distributed in the hope that it will be useful,
|
2017-11-26 10:56:35 +00:00
|
|
|
# * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
2018-04-15 19:47:21 +00:00
|
|
|
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
# * Lesser General Public License for more details.
|
|
|
|
# *
|
|
|
|
# * You should have received a copy of the GNU Lesser General Public
|
|
|
|
# * License along with this library; if not, write to the Free Software
|
|
|
|
# * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
|
|
|
# * MA 02110-1301 USA
|
2017-11-26 10:56:35 +00:00
|
|
|
# *
|
|
|
|
# *--------------------------------------------------------
|
|
|
|
# * File Name : pycrate_mobile/SIGTRAN.py
|
|
|
|
# * Created : 2017-11-24
|
|
|
|
# * Authors : Benoit Michau
|
|
|
|
# *--------------------------------------------------------
|
|
|
|
#*/
|
|
|
|
|
|
|
|
from pycrate_core.utils import *
|
|
|
|
from pycrate_core.elt import *
|
|
|
|
from pycrate_core.base import *
|
|
|
|
from pycrate_core.charpy import *
|
|
|
|
|
|
|
|
|
|
|
|
# http://www.iana.org/assignments/sigtran-adapt
|
|
|
|
|
|
|
|
# SIGTRAN messages class
|
|
|
|
MGMT = 0
|
|
|
|
TRANS = 1
|
|
|
|
SSNM = 2
|
|
|
|
ASPSM = 3
|
|
|
|
ASPTM = 4
|
|
|
|
QPTM = 5
|
|
|
|
MAUP = 6
|
|
|
|
CONLESS = 7
|
|
|
|
CONOR = 8
|
|
|
|
RKM = 9
|
|
|
|
IIM = 10
|
|
|
|
M2PA = 11
|
|
|
|
SEC = 12
|
|
|
|
BPT = 13
|
|
|
|
V5PTM = 14
|
|
|
|
|
|
|
|
Class_dict = {
|
|
|
|
MGMT : 'Management Message',
|
|
|
|
TRANS : 'Transfer Messages',
|
|
|
|
SSNM : 'SS7 Signalling Network Management Messages',
|
|
|
|
ASPSM : 'ASP State Maintenance Messages',
|
|
|
|
ASPTM : 'ASP Traffic Maintenance Messages',
|
|
|
|
QPTM : 'Q.921/Q.931 Boundary Primitives Transport Messages',
|
|
|
|
MAUP : 'MTP2 User Adaptation Messages',
|
|
|
|
CONLESS : 'Connectionless Messages',
|
|
|
|
CONOR : 'Connection-Oriented Messages',
|
|
|
|
RKM : 'Routing Key Management Messages',
|
|
|
|
IIM : 'Interface Identifier Management Messages',
|
|
|
|
M2PA : 'M2PA Messages',
|
|
|
|
SEC : 'Security Messages',
|
|
|
|
BPT : 'DPNSS/DASS2 Boundary Primitives Transport Messages',
|
|
|
|
V5PTM : 'V5 Boundary Primitives Transport Messages',
|
|
|
|
}
|
|
|
|
|
|
|
|
# SIGTRAN MGMT messages type
|
|
|
|
MGMT_ERR = 0
|
|
|
|
MGMT_NTFY = 1
|
|
|
|
MGMT_TEISREQ = 2
|
|
|
|
MGMT_TEISCONF = 3
|
|
|
|
MGMT_TEISIND = 4
|
|
|
|
MGMT_DLCSREQ = 5
|
|
|
|
MGMT_DLCSCONF = 6
|
|
|
|
MGMT_DLCSIND = 7
|
|
|
|
MGMT_TEIQREQ = 8
|
|
|
|
|
|
|
|
TypeMGMT_dict = {
|
|
|
|
MGMT_ERR : 'Error',
|
|
|
|
MGMT_NTFY : 'Notify (NTFY)',
|
|
|
|
MGMT_TEISREQ : 'TEI Status Request (TEISREQ)',
|
|
|
|
MGMT_TEISCONF : 'TEI Status Confirm (TEIS',
|
|
|
|
MGMT_TEISIND : 'TEI Status Indication',
|
|
|
|
MGMT_DLCSREQ : 'DLC Status Request',
|
|
|
|
MGMT_DLCSCONF : 'DLC Status Confirm',
|
|
|
|
MGMT_DLCSIND : 'DLC Status Indication',
|
|
|
|
MGMT_TEIQREQ : 'TEI Query Request',
|
|
|
|
}
|
|
|
|
|
|
|
|
# SIGTRAN TRANS message type
|
|
|
|
TRANS_DATA = 2
|
|
|
|
|
|
|
|
TypeTRANS_dict = {
|
|
|
|
TRANS_DATA : 'Payload data'
|
|
|
|
}
|
|
|
|
|
|
|
|
# SIGTRAN SSNM messages type
|
|
|
|
SSNM_DUNA = 1
|
|
|
|
SSNM_DAVA = 2
|
|
|
|
SSNM_DAUD = 3
|
|
|
|
SSNM_SCON = 4
|
|
|
|
SSNM_DPU = 5
|
|
|
|
SSNM_DRST = 6
|
|
|
|
|
|
|
|
TypeSSNM_dict = {
|
|
|
|
SSNM_DUNA : 'Destination Unavailable',
|
|
|
|
SSNM_DAVA : 'Destination Available',
|
|
|
|
SSNM_DAUD : 'Destination State Audit',
|
|
|
|
SSNM_SCON : 'Signalling Congestion',
|
|
|
|
SSNM_DPU : 'Destination User Part Unavailable',
|
|
|
|
SSNM_DRST : 'Destination Restricted'
|
|
|
|
}
|
|
|
|
|
|
|
|
# SIGTRAN ASPSM messages type
|
|
|
|
ASPSM_UP = 1
|
|
|
|
ASPSM_DOWN = 2
|
|
|
|
ASPSM_BEAT = 3
|
|
|
|
ASPSM_UPACK = 4
|
|
|
|
ASPSM_DOWNACK = 5
|
|
|
|
ASPSM_BEATACK = 6
|
|
|
|
|
|
|
|
TypeASPSM_dict = {
|
|
|
|
ASPSM_UP : 'ASP Up',
|
|
|
|
ASPSM_DOWN : 'ASP Down',
|
|
|
|
ASPSM_BEAT : 'Heartbeat',
|
|
|
|
ASPSM_UPACK : 'ASP Up Ack',
|
|
|
|
ASPSM_DOWNACK : 'ASP Down Ack',
|
|
|
|
ASPSM_BEATACK : 'Heartbeat Ack'
|
|
|
|
}
|
|
|
|
|
|
|
|
# SIGTRAN ASPTM messages type
|
|
|
|
ASPTM_ACTIVE = 1
|
|
|
|
ASPTM_INACTIVE = 2
|
|
|
|
ASPTM_ACTIVEACK = 3
|
|
|
|
ASPTM_INACTIVEACK = 4
|
|
|
|
|
|
|
|
TypeASPTM_dict = {
|
|
|
|
ASPTM_ACTIVE : 'ASP Active',
|
|
|
|
ASPTM_INACTIVE : 'ASP Inactive',
|
|
|
|
ASPTM_ACTIVEACK : 'ASP Active Ack',
|
|
|
|
ASPTM_INACTIVEACK : 'ASP Inactive Ack'
|
|
|
|
}
|
|
|
|
|
|
|
|
# SIGTRAN QPTM messages type
|
|
|
|
QPTM_DATREQ = 1
|
|
|
|
QPTM_DATIND = 2
|
|
|
|
QPTM_UNITREQ = 3
|
|
|
|
QPTM_UNITIND = 4
|
|
|
|
QPTM_ESTREQ = 5
|
|
|
|
QPTM_ESTCONF = 6
|
|
|
|
QPTM_ESTIND = 7
|
|
|
|
QPTM_RELREQ = 8
|
|
|
|
QPTM_RELCONF = 9
|
|
|
|
QPTM_RELIND = 10
|
|
|
|
|
|
|
|
TypeQPTM_dict = {
|
|
|
|
QPTM_DATREQ : 'Data Request Message ',
|
|
|
|
QPTM_DATIND : 'Data Indication Message ',
|
|
|
|
QPTM_UNITREQ : 'Unit Data Request Message',
|
|
|
|
QPTM_UNITIND : 'Unit Data Indication Message',
|
|
|
|
QPTM_ESTREQ : 'Establish Request',
|
|
|
|
QPTM_ESTCONF : 'Establish Confirm',
|
|
|
|
QPTM_ESTIND : 'Establish Indication',
|
|
|
|
QPTM_RELREQ : 'Release Request',
|
|
|
|
QPTM_RELCONF : 'Release Confirm',
|
|
|
|
QPTM_RELIND : 'Release Indication'
|
|
|
|
}
|
|
|
|
|
|
|
|
# SIGTRAN MAUP messages type
|
|
|
|
MAUP_DATA = 1
|
|
|
|
MAUP_ESTREQ = 2
|
|
|
|
MAUP_ESTCONF = 3
|
|
|
|
MAUP_RELREQ = 4
|
|
|
|
MAUP_RELCONF = 5
|
|
|
|
MAUP_RELIND = 6
|
|
|
|
MAUP_STATREQ = 7
|
|
|
|
MAUP_STATCONF = 8
|
|
|
|
MAUP_STATIND = 9
|
|
|
|
MAUP_RETRREQ = 10
|
|
|
|
MAUP_RETRCONF = 11
|
|
|
|
MAUP_RETRIND = 12
|
|
|
|
MAUP_RETRCOMP = 13
|
|
|
|
MAUP_CONG = 14
|
|
|
|
MAUP_DATACK = 15
|
|
|
|
|
|
|
|
TypeMAUP_dict = {
|
|
|
|
MAUP_DATA : 'Data',
|
|
|
|
MAUP_ESTREQ : 'Establish Request',
|
|
|
|
MAUP_ESTCONF : 'Establish Confirm',
|
|
|
|
MAUP_RELREQ : 'Release Request',
|
|
|
|
MAUP_RELCONF : 'Release Confirm',
|
|
|
|
MAUP_RELIND : 'Release Indication',
|
|
|
|
MAUP_STATREQ : 'State Request',
|
|
|
|
MAUP_STATCONF : 'State Confirm',
|
|
|
|
MAUP_STATIND : 'State Indication',
|
|
|
|
MAUP_RETRREQ : 'Data Retrieval Request',
|
|
|
|
MAUP_RETRCONF : 'Data Retrieval Confirm',
|
|
|
|
MAUP_RETRIND : 'Data Retrieval Indication',
|
|
|
|
MAUP_RETRCOMP : 'Data Retrieval Complete Indication',
|
|
|
|
MAUP_CONG : 'Congestion Indication',
|
|
|
|
MAUP_DATACK : 'Data Acknowledge'
|
|
|
|
}
|
|
|
|
|
|
|
|
# SIGTRAN CONLESS messages type
|
|
|
|
CONLESS_CLDT = 1
|
|
|
|
CONLESS_CLDR = 2
|
|
|
|
|
|
|
|
TypeCONLESS_dict = {
|
|
|
|
CONLESS_CLDT : 'Connectionless Data Transfer',
|
|
|
|
CONLESS_CLDR : 'Connectionless Data Response'
|
|
|
|
}
|
|
|
|
|
|
|
|
# SIGTRAN CONOR messages type
|
|
|
|
CONOR_CORE = 1
|
|
|
|
CONOR_COAK = 2
|
|
|
|
CONOR_COREF = 3
|
|
|
|
CONOR_RELRE = 4
|
|
|
|
CONOR_RELCO = 5
|
|
|
|
CONOR_RESCO = 6
|
|
|
|
CONOR_RESRE = 7
|
|
|
|
CONOR_CODT = 8
|
|
|
|
CONOR_CODA = 9
|
|
|
|
CONOR_COERR = 10
|
|
|
|
CONOR_COIT = 11
|
|
|
|
|
|
|
|
TypeCONOR_dict = {
|
|
|
|
CONOR_CORE : 'Connection Request',
|
|
|
|
CONOR_COAK : 'Connection Acknowledge',
|
|
|
|
CONOR_COREF : 'Connection Refused',
|
|
|
|
CONOR_RELRE : 'Release Request',
|
|
|
|
CONOR_RELCO : 'Release Complete',
|
|
|
|
CONOR_RESCO : 'Reset Confirm',
|
|
|
|
CONOR_RESRE : 'Reset Request',
|
|
|
|
CONOR_CODT : 'Connection Oriented Data Transfer',
|
|
|
|
CONOR_CODA : 'Connection Oriented Data Acknowledge',
|
|
|
|
CONOR_COERR : 'Connection Oriented Error',
|
|
|
|
CONOR_COIT : 'Inactivity Test'
|
|
|
|
}
|
|
|
|
|
|
|
|
# SIGTRAN RKM messages type
|
|
|
|
RKM_REGREQ = 1
|
|
|
|
RKM_REGRSP = 2
|
|
|
|
RKM_DEREGREQ = 3
|
|
|
|
RKM_DEREGRSP = 4
|
|
|
|
|
|
|
|
TypeRKM_dict = {
|
|
|
|
RKM_REGREQ : 'Registration Request',
|
|
|
|
RKM_REGRSP : 'Registration Response',
|
|
|
|
RKM_DEREGREQ : 'Deregistration Request',
|
|
|
|
RKM_DEREGRSP : 'Deregistration Response'
|
|
|
|
}
|
|
|
|
|
|
|
|
# SIGTRAN IIM messages type
|
|
|
|
IIM_REGREQ = 1
|
|
|
|
IIM_REGRSP = 2
|
|
|
|
IIM_DEREGREQ = 3
|
|
|
|
IIM_DEREGRSP = 4
|
|
|
|
|
|
|
|
TypeIIM_dict = {
|
|
|
|
IIM_REGREQ : 'Registration Request',
|
|
|
|
IIM_REGRSP : 'Registration Response',
|
|
|
|
IIM_DEREGREQ : 'Deregistration Request',
|
|
|
|
IIM_DEREGRSP : 'Deregistration Response'
|
|
|
|
}
|
|
|
|
|
|
|
|
# SIGTRAN M2PA messages type
|
|
|
|
M2PA_DATA = 1
|
|
|
|
M2PA_STAT = 2
|
|
|
|
|
|
|
|
TypeM2PA_dict = {
|
|
|
|
M2PA_DATA : 'User Data',
|
|
|
|
M2PA_STAT : 'Link Status'
|
|
|
|
}
|
|
|
|
|
|
|
|
# SIGTRAN SEC messages type
|
|
|
|
SEC_STLS = 1
|
|
|
|
SEC_STLSACK = 2
|
|
|
|
|
|
|
|
TypeSEC_dict = {
|
|
|
|
SEC_STLS : 'STARTTLS message',
|
|
|
|
SEC_STLSACK : 'STARTTLS_ACK message'
|
|
|
|
}
|
|
|
|
|
|
|
|
# SIGTRAN BPT messages type
|
|
|
|
BPT_DATREQ = 1
|
|
|
|
BPT_DATIND = 2
|
|
|
|
BPT_UNITREQ = 3
|
|
|
|
BPT_UNITIND = 4
|
|
|
|
BPT_ESTREQ = 5
|
|
|
|
BPT_ESTCONF = 6
|
|
|
|
BPT_ESTIND = 7
|
|
|
|
BPT_RELREQ = 8
|
|
|
|
BPT_RELCONF = 9
|
|
|
|
BPT_RELIND = 10
|
|
|
|
|
|
|
|
TypeBPT_dict = {
|
|
|
|
BPT_DATREQ : 'Data Request Message ',
|
|
|
|
BPT_DATIND : 'Data Indication Message ',
|
|
|
|
BPT_UNITREQ : 'Unit Data Request Message',
|
|
|
|
BPT_UNITIND : 'Unit Data Indication Message',
|
|
|
|
BPT_ESTREQ : 'Establish Request',
|
|
|
|
BPT_ESTCONF : 'Establish Confirm',
|
|
|
|
BPT_ESTIND : 'Establish Indication',
|
|
|
|
BPT_RELREQ : 'Release Request',
|
|
|
|
BPT_RELCONF : 'Release Confirm',
|
|
|
|
BPT_RELIND : 'Release Indication'
|
|
|
|
}
|
|
|
|
|
|
|
|
# SIGTRAN V5PTM messages type
|
|
|
|
V5PTM_DATA = 1
|
|
|
|
V5PTM_DATIND = 2
|
|
|
|
V5PTM_UNITREQ = 3
|
|
|
|
V5PTM_UNITIND = 4
|
|
|
|
V5PTM_ESTREQ = 5
|
|
|
|
V5PTM_ESTCONF = 6
|
|
|
|
V5PTM_ESTIND = 7
|
|
|
|
V5PTM_RELREQ = 8
|
|
|
|
V5PTM_RELCONF = 9
|
|
|
|
V5PTM_RELIND = 10
|
|
|
|
V5PTM_LSSTART = 11
|
|
|
|
V5PTM_LSSTOP = 12
|
|
|
|
V5PTM_LSIND = 13
|
|
|
|
V5PTM_SASETREQ = 14
|
|
|
|
V5PTM_SASETCONF = 15
|
|
|
|
V5PTM_SASTATREQ = 16
|
|
|
|
V5PTM_SASTATIND = 17
|
|
|
|
V5PTM_ERRIND = 18
|
|
|
|
|
|
|
|
TypeV5PTM_dict = {
|
|
|
|
V5PTM_DATA : 'Data Request Message ',
|
|
|
|
V5PTM_DATIND : 'Data Indication Message',
|
|
|
|
V5PTM_UNITREQ : 'Unit Data Request Message',
|
|
|
|
V5PTM_UNITIND : 'Unit Data Indication Message',
|
|
|
|
V5PTM_ESTREQ : 'Establish Request',
|
|
|
|
V5PTM_ESTCONF : 'Establish Confirm',
|
|
|
|
V5PTM_ESTIND : 'Establish Indication',
|
|
|
|
V5PTM_RELREQ : 'Release Request',
|
|
|
|
V5PTM_RELCONF : 'Release Confirm',
|
|
|
|
V5PTM_RELIND : 'Release Indication',
|
|
|
|
V5PTM_LSSTART : 'Link Status Start Reporting',
|
|
|
|
V5PTM_LSSTOP : 'Link Status Stop Reporting',
|
|
|
|
V5PTM_LSIND : 'Link Status Indication',
|
|
|
|
V5PTM_SASETREQ : 'Sa-Bit Set Request',
|
|
|
|
V5PTM_SASETCONF : 'Sa-Bit Set Confirm',
|
|
|
|
V5PTM_SASTATREQ : 'Sa-Bit Status Request',
|
|
|
|
V5PTM_SASTATIND : 'Sa-Bit Status Indication',
|
|
|
|
V5PTM_ERRIND : 'Error Indication'
|
|
|
|
}
|
|
|
|
|
|
|
|
# SIGTRAN message parameters
|
|
|
|
Params_dict = {
|
|
|
|
0 : 'Reserved', # [RFC4233] [RFC3868] [RFC3331]
|
|
|
|
1 : 'Interface Identifier', # [RFC4233] [RFC3331] [RFC4129] [RFC3807]
|
|
|
|
2 : 'Reserved', # [RFC4233]
|
|
|
|
3 : 'Interface Identifier', # [RFC4233] [RFC3331] [RFC4129] [RFC3807]
|
|
|
|
4 : 'Info String', # [RFC4233] [RFC3331] [RFC4666] [RFC3868] [RFC4129] [RFC3807]
|
|
|
|
5 : 'DLCI', # [RFC4233] [RFC4129]
|
|
|
|
6 : 'Routing Context', # [RFC4666] [RFC3868]
|
|
|
|
7 : 'Diagnostic Information', # [RFC4233] [RFC3331] [RFC4666] [RFC3868] [RFC4129] [RFC3807]
|
|
|
|
8 : 'Interface Identifier', # [RFC4233] [RFC3331] [RFC4129] [RFC3807]
|
|
|
|
9 : 'Heartbeat Data', # [RFC4233] [RFC3331] [RFC4666] [RFC3868] [RFC4129] [RFC3807]
|
|
|
|
10 : 'Reason', # [RFC4129] [RFC3807]
|
|
|
|
11 : 'Traffic Mode Type', # [RFC4233] [RFC3331] [RFC4666] [RFC3868] [RFC4129] [RFC3807]
|
|
|
|
12 : 'Error Code', # [RFC4233] [RFC3331] [RFC4666] [RFC3868] [RFC4129] [RFC3807]
|
|
|
|
13 : 'Status Type/Information', # [RFC4233] [RFC3331] [RFC4666] [RFC3868] [RFC4129] [RFC3807]
|
|
|
|
14 : 'Protocol Data', # [RFC4233] [RFC4129] [RFC3807]
|
|
|
|
15 : 'Release Reason', # [RFC4233] [RFC4129] [RFC3807]
|
|
|
|
16 : 'Status', # [RFC4233] [RFC4129] [RFC3807]
|
|
|
|
17 : 'ASP Identifier', # [RFC3331] [RFC4666] [RFC3868]
|
|
|
|
18 : 'Affected Point Code', # [RFC4666] [RFC3868]
|
|
|
|
19 : 'Correlation Id', # [RFC3331] [RFC4666] [RFC3868]
|
|
|
|
20 : 'Registration Result', # [RFC3868]
|
|
|
|
21 : 'Deregistration Result', # [RFC3868]
|
|
|
|
22 : 'Registration Status', # [RFC3868]
|
|
|
|
23 : 'Deregistration Status', # [RFC3868]
|
|
|
|
24 : 'Local Routing Key Identifier', # [RFC3868]
|
|
|
|
129 : 'DLCI/EFA', # [RFC3807]
|
|
|
|
130 : 'Link Status', # [RFC3807]
|
|
|
|
131 : 'Bit ID/Bit Value', # [RFC3807]
|
|
|
|
132 : 'Error Reason', # [RFC3807]
|
|
|
|
257 : 'SS7 Hop Counter', # [RFC3868]
|
|
|
|
258 : 'Source Address', # [RFC3868]
|
|
|
|
259 : 'Destination Address', # [RFC3868]
|
|
|
|
260 : 'Source Reference Number', # [RFC3868]
|
|
|
|
261 : 'Destination Reference Number', # [RFC3868]
|
|
|
|
262 : 'SCCP Cause', # [RFC3868]
|
|
|
|
263 : 'Sequence Number', # [RFC3868]
|
|
|
|
264 : 'Receive Sequence Number', # [RFC3868]
|
|
|
|
265 : 'ASP Capabilities', # [RFC3868]
|
|
|
|
266 : 'Credit', # [RFC3868]
|
|
|
|
267 : 'Data', # [RFC3868]
|
|
|
|
268 : 'Cause / User', # [RFC3868]
|
|
|
|
269 : 'Network Appearance', # [RFC3868]
|
|
|
|
270 : 'Routing Key', # [RFC3868]
|
|
|
|
271 : 'DRN Label', # [RFC3868]
|
|
|
|
272 : 'TID Label', # [RFC3868]
|
|
|
|
273 : 'Address Range', # [RFC3868]
|
|
|
|
274 : 'SMI', # [RFC3868]
|
|
|
|
275 : 'Importance', # [RFC3868]
|
|
|
|
276 : 'Message Priority', # [RFC3868]
|
|
|
|
277 : 'Protocol Class', # [RFC3868]
|
|
|
|
278 : 'Sequence Control', # [RFC3868]
|
|
|
|
279 : 'Segmentation', # [RFC3868]
|
|
|
|
280 : 'Congestion Level', # [RFC3868]
|
|
|
|
512 : 'Network Appearance', # [RFC4666]
|
|
|
|
513 : 'Reserved', # [RFC4666]
|
|
|
|
514 : 'Reserved', # [RFC4666]
|
|
|
|
515 : 'Reserved', # [RFC4666]
|
|
|
|
516 : 'User/Cause', # [RFC4666]
|
|
|
|
517 : 'Congestion Indications', # [RFC4666]
|
|
|
|
518 : 'Concerned Destination', # [RFC4666]
|
|
|
|
519 : 'Routing Key', # [RFC4666]
|
|
|
|
520 : 'Registration Result', # [RFC4666]
|
|
|
|
521 : 'Deregistration Result', # [RFC4666]
|
|
|
|
522 : 'Local_Routing Key Identifier', # [RFC4666]
|
|
|
|
523 : 'Destination Point Code', # [RFC4666]
|
|
|
|
524 : 'Service Indicators', # [RFC4666]
|
|
|
|
525 : 'Reserved', # [RFC4666]
|
|
|
|
526 : 'Originating Point Code List', # [RFC4666]
|
|
|
|
527 : 'Circuit Range', # [RFC4666]
|
|
|
|
528 : 'Protocol Data', # [RFC4666]
|
|
|
|
529 : 'Reserved', # [RFC4666]
|
|
|
|
530 : 'Registration Status', # [RFC4666]
|
|
|
|
531 : 'Deregistration Status', # [RFC4666]
|
|
|
|
768 : 'Protocol Data 1', # [RFC3331]
|
|
|
|
769 : 'Protocol Data 2', # [RFC3331]
|
|
|
|
770 : 'State Request', # [RFC3331]
|
|
|
|
771 : 'State Event', # [RFC3331]
|
|
|
|
772 : 'Congestion Status', # [RFC3331]
|
|
|
|
773 : 'Discard Status', # [RFC3331]
|
|
|
|
774 : 'Action', # [RFC3331]
|
|
|
|
775 : 'Sequence Number', # [RFC3331]
|
|
|
|
776 : 'Retrieval Result', # [RFC3331]
|
|
|
|
777 : 'Link Key', # [RFC3331]
|
|
|
|
778 : 'Local-LK-Identifier', # [RFC3331]
|
|
|
|
779 : 'Signalling Data Terminal Identifier', # [RFC3331]
|
|
|
|
780 : 'Signalling Data Link Identifier', # [RFC3331]
|
|
|
|
781 : 'Registration Result', # [RFC3331]
|
|
|
|
782 : 'Registration Status', # [RFC3331]
|
|
|
|
783 : 'De-Registration Result', # [RFC3331]
|
|
|
|
784 : 'De-Registration Status', # [RFC3331]
|
|
|
|
32769 : 'Global Title', # [RFC3868]
|
|
|
|
32770 : 'Point Code', # [RFC3868]
|
|
|
|
32771 : 'Subsystem Number', # [RFC3868]
|
|
|
|
32772 : 'IPv4 Address', # [RFC3868]
|
|
|
|
32773 : 'Hostname', # [RFC3868]
|
|
|
|
32774 : 'IPv6 Addresses', # [RFC3868]
|
|
|
|
65535 : 'Reserved', # [RFC4233]
|
|
|
|
}
|
|
|
|
|
|
|
|
# SIGTRAN message structure
|
|
|
|
|
|
|
|
class Param(Envelope):
|
|
|
|
_pad = b'\0'
|
|
|
|
_GEN = (
|
|
|
|
Uint16('Tag', dic=Params_dict),
|
|
|
|
Uint16('Len'),
|
|
|
|
Buf('Val', val=b'', rep=REPR_HEX),
|
|
|
|
Buf('pad', rep=REPR_HEX)
|
|
|
|
)
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
Envelope.__init__(self, *args, **kwargs)
|
|
|
|
self[1].set_valauto(lambda: 4+self[2].get_len())
|
|
|
|
self[2].set_blauto(lambda: 8*max(0, self[1].get_val()-4))
|
|
|
|
self[3].set_valauto(lambda: (4-self[2].get_len()%4)%4 * self._pad)
|
|
|
|
self[3].set_blauto(lambda: 8*((4-self[2].get_len()%4)%4))
|
|
|
|
|
2018-09-25 12:10:16 +00:00
|
|
|
|
2017-11-26 10:56:35 +00:00
|
|
|
class SIGTRAN(Envelope):
|
2018-10-16 10:23:33 +00:00
|
|
|
# this enforces the Length field in the Header at decoding
|
|
|
|
# warning RFC 4666: this length must take padding into account,
|
|
|
|
# otherwise there will be a mismatch with Len fields in following Params
|
|
|
|
_LEN_ENFORCE = True
|
|
|
|
|
2017-11-26 10:56:35 +00:00
|
|
|
_TypeUndef_dict = {}
|
|
|
|
_Type_dict = {
|
|
|
|
MGMT : TypeMGMT_dict,
|
|
|
|
TRANS : TypeTRANS_dict,
|
|
|
|
SSNM : TypeSSNM_dict,
|
|
|
|
ASPSM : TypeASPSM_dict,
|
|
|
|
ASPTM : TypeASPTM_dict,
|
|
|
|
QPTM : TypeQPTM_dict,
|
|
|
|
MAUP : TypeMAUP_dict,
|
|
|
|
CONLESS : TypeCONLESS_dict,
|
|
|
|
CONOR : TypeCONOR_dict,
|
|
|
|
RKM : TypeRKM_dict,
|
|
|
|
IIM : TypeIIM_dict,
|
|
|
|
M2PA : TypeM2PA_dict,
|
|
|
|
SEC : TypeSEC_dict,
|
|
|
|
BPT : TypeBPT_dict,
|
|
|
|
V5PTM : TypeV5PTM_dict
|
|
|
|
}
|
|
|
|
_GEN = (
|
|
|
|
Envelope('Header', GEN=(
|
|
|
|
Uint8('Version', val=1),
|
|
|
|
Uint8('spare'),
|
|
|
|
Uint8('Class', val=TRANS, dic=Class_dict),
|
|
|
|
Uint8('Type'),
|
|
|
|
Uint32('Len')
|
|
|
|
), hier=0),
|
|
|
|
Sequence('Params', GEN=Param(), hier=1)
|
|
|
|
)
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
Envelope.__init__(self, *args, **kwargs)
|
|
|
|
self[0][3].set_dicauto(lambda: self._Type_dict.get(self[0][2].get_val(), self._TypeUndef_dict))
|
|
|
|
self[0][4].set_valauto(lambda: 8+self[1].get_len())
|
|
|
|
|
|
|
|
def _from_char(self, char):
|
|
|
|
self[0]._from_char(char)
|
2018-10-16 10:23:33 +00:00
|
|
|
if self._LEN_ENFORCE:
|
|
|
|
clen = char._len_bit
|
|
|
|
char._len_bit = char._cur + 8*(max(0, self[0][4].get_val()-8))
|
|
|
|
self[1]._from_char(char)
|
|
|
|
char._len_bit = clen
|
|
|
|
else:
|
|
|
|
self[1]._from_char(char)
|
2017-11-26 10:56:35 +00:00
|
|
|
|