summaryrefslogtreecommitdiffstats
path: root/library/MGCP_Types.ttcn
blob: 8e11c7a1f9b706f8a4e4b64525950cbbe3f85ddc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
module MGCP_Types {

/* Definition of abstract types for the MGCP protocol as specified in
 * IETF RFC 3435.  Uses the TITAN "TEXT" codec to auto-generate encoder/decoder
 * functions, as well as the SDP type definitions and coder from Ericsson.
 *
 * (C) 2017 by Harald Welte <laforge@gnumonks.org>
 * All rights reserved.
 *
 * Released under the terms of GNU General Public License, Version 2 or
 * (at your option) any later version.
 */

	import from SDP_Types all;

	type charstring MgcpVerb ("EPCF", "CRCX", "MDCX", "DLCX", "RQNT", "NTFY",
				  "AUEP", "AUCX", "RSIP") with {
		/* see https://www.eclipse.org/forums/index.php/t/1088893/ on why this
		 * match expression is needed here */
		variant "TEXT_CODING(,convert=upper_case,'((EPCF)|(CRCX)|(MDCX)|(DLCX)|(RQNT)|(NTFY)|(AUEP)|(AUCX)|(RSIP))',case_insensitive)"
	};
	type charstring MgcpTransId 	(pattern "\d#(1,9)");
	type charstring MgcpEndpoint	(pattern "*@*");
	type hexstring MgcpCallId	length(1..32);	/* 3.2.2.2 */
	type hexstring MgcpConnectionId	length(1..32);	/* 3.2.2.5 */
	type hexstring MgcpRequestId	length(1..32);	/* 3.2.2.18 */
	type charstring MgcpResponseCode (pattern "\d#(3)");

	type charstring MgcpInfoCode ("B", "C", "I", "N", "X", "L", "M", "R",
				      "S", "D", "O", "P", "E", "Z", "Q", "T",
				      "RC", "LC", "A", "ES", "RM", "RD", "PL",
				      "MD", "X-Osmo-CP") with {
		variant "TEXT_CODING(,convert=upper_case,'([BCINXLMRSDOPEZQTA])|(RC)|(LC)|(ES)|(RM)|(RD)|(PL)|(MD)|(X-Osmo-CP)',case_insensitive)"
	};

	/* 3.2.2.6 */
	type charstring MgcpConnectionMode ("sendonly", "recvonly", "sendrecv", "confrnce",
					    "inactive", "loopback", "conttest", "netwloop",
					    "netwtest");

	/* 3.2.2.10 */
	type charstring MgcpLocalConnOptKeys ("a", "p", "b", "t", "e", "gc", "s", "r", "k",
					      "nt", "r");

	type charstring MgcpVersion (pattern "\d.\d") with {
		variant "BEGIN('MGCP ')"
	}

	type record MgcpCommandLine {
		MgcpVerb	verb,
		MgcpTransId	trans_id,
		MgcpEndpoint	ep,
		MgcpVersion	ver
	} with {
		variant "SEPARATOR(' ', '[\t ]+')"
		variant "END('\r\n', '([\r\n])|(\r\n)')"
	}

	type record MgcpParameter {
		MgcpInfoCode	code,
		charstring	val optional
	} with {
		variant "BEGIN('')"
		variant "SEPARATOR(': ', ':[\t ]+')"
		variant "END('\r\n', '([\r\n])|(\r\n)')"
	}

	type set of MgcpParameter MgcpParameterList with {
		variant "BEGIN('')"
	};

	type record MgcpCommand {
		MgcpCommandLine		line,
		MgcpParameterList 	params optional,
		SDP_Message		sdp optional
	} with {
		variant "BEGIN('')"
		variant (sdp) "BEGIN('\r\n','([\r\n])|(\r\n)')"
	}

	external function enc_MgcpCommand(in MgcpCommand id) return charstring
		with { extension "prototype(convert) encode(TEXT)" };
	external function dec_MgcpCommand(in charstring  id) return MgcpCommand
		with { extension "prototype(convert) decode(TEXT)" };

	type record MgcpResponseLine {
		MgcpResponseCode	code,
		MgcpTransId		trans_id,
		charstring		string optional
	} with {
		variant "SEPARATOR(' ', '[\t ]+')"
		variant "END('\r\n', '([\r\n])|(\r\n)')"
	}

	type record MgcpResponse {
		MgcpResponseLine	line,
		MgcpParameterList	params optional,
		SDP_Message		sdp optional
	} with {
		variant "BEGIN('')"
		variant (sdp) "BEGIN('\r\n','([\r\n])|(\r\n)')"
	}

	external function enc_MgcpResponse(in MgcpResponse id) return charstring
		with { extension "prototype(convert) encode(TEXT)" };
	external function dec_MgcpResponse(in charstring  id) return MgcpResponse
		with { extension "prototype(convert) decode(TEXT)" };

	type union MgcpMessage {
		MgcpCommand	command,
		MgcpResponse	response
	} with {
		variant "BEGIN('')"
	}

	external function enc_MgcpMessage(in MgcpMessage id) return charstring
		with { extension "prototype(convert) encode(TEXT)" };
	external function dec_MgcpMessage(in charstring  id) return MgcpMessage
		with { extension "prototype(convert) decode(TEXT)" };

	/* IANA / 3gpp assigned payload type numbers */
	type enumerated SDP_FIELD_PayloadType {
		PT_PCMU(0),
		PT_GSM(3),
		PT_PCMA(8),
		PT_G729(18),
		PT_GSMEFR(110),
		PT_GSMHR(111),
		PT_AMR(112),
		PT_AMRWB(113)
	}

} with { encode "TEXT" }