131 lines
3.0 KiB
Plaintext
131 lines
3.0 KiB
Plaintext
module Osmocom_CTRL_Types {
|
|
|
|
/* Definition of abstract types for the CTRL protocol as used in Osmocom.
|
|
* Uses the TITAN "TEXT" codec to auto-generate encoder/decoder functions.
|
|
*
|
|
* (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.
|
|
*/
|
|
|
|
type charstring CtrlVerb ("GET", "SET") 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,'((GET)|(SET))',case_insensitive)"
|
|
};
|
|
|
|
type charstring CtrlReplyVerb ("GET_REPLY", "SET_REPLY") with {
|
|
variant "TEXT_CODING(,convert=upper_case,'((GET_REPLY)|(SET_REPLY))',case_insensitive)"
|
|
};
|
|
|
|
type charstring CtrlId (pattern "\d#(1,9)");
|
|
type charstring CtrlVariable (pattern "[^, \{\}\[\]\(\)<>\|~\\\^`'\"\?=;/\+&%$\#!]#(1,)");
|
|
type charstring CtrlValue (pattern "[^ ]#(0,)");
|
|
type charstring CtrlReason;
|
|
|
|
|
|
type record CtrlCommand {
|
|
CtrlVerb verb,
|
|
CtrlId id,
|
|
CtrlVariable variable,
|
|
CtrlValue val optional /* only for SET */
|
|
} with {
|
|
variant "SEPARATOR(' ',)"
|
|
};
|
|
|
|
type record CtrlResponse {
|
|
CtrlReplyVerb verb,
|
|
CtrlId id,
|
|
CtrlVariable variable,
|
|
CtrlValue val
|
|
} with {
|
|
variant "SEPARATOR(' ',)"
|
|
};
|
|
|
|
type record CtrlError {
|
|
CtrlId id,
|
|
CtrlReason reason
|
|
} with {
|
|
variant "BEGIN('ERROR ',,case_insensitive)"
|
|
variant "SEPARATOR(' ',)"
|
|
};
|
|
|
|
type record CtrlTrap {
|
|
CtrlVariable variable,
|
|
CtrlValue val
|
|
} with {
|
|
variant "BEGIN('TRAP 0 ',,case_insensitive)"
|
|
variant "SEPARATOR(' ',)"
|
|
};
|
|
|
|
type union CtrlMessage {
|
|
CtrlCommand cmd,
|
|
CtrlResponse resp,
|
|
CtrlError err,
|
|
CtrlTrap trap
|
|
} with { variant "BEGIN('')" };
|
|
|
|
external function enc_CtrlMessage(in CtrlMessage id) return charstring
|
|
with { extension "prototype(convert) encode(TEXT)"};
|
|
|
|
external function dec_CtrlMessage(in charstring id) return CtrlMessage
|
|
with { extension "prototype(convert) decode(TEXT)"};
|
|
|
|
|
|
template CtrlMessage ts_CtrlMsgGet(CtrlId id, CtrlVariable variable) := {
|
|
cmd := {
|
|
verb := "GET",
|
|
id := id,
|
|
variable := variable,
|
|
val := omit
|
|
}
|
|
};
|
|
|
|
template CtrlMessage ts_CtrlMsgSet(CtrlId id, CtrlVariable variable, CtrlValue val) := {
|
|
cmd := {
|
|
verb := "SET",
|
|
id := id,
|
|
variable := variable,
|
|
val := omit
|
|
}
|
|
}
|
|
|
|
template CtrlMessage tr_CtrlMsgGetRepl(template CtrlId id, template CtrlVariable variable := ?) := {
|
|
resp := {
|
|
verb := "GET_REPLY",
|
|
id := id,
|
|
variable := variable,
|
|
val := ?
|
|
}
|
|
}
|
|
|
|
template CtrlMessage tr_CtrlMsgSetRepl(template CtrlId id, template CtrlVariable variable := ?,
|
|
template CtrlValue val := ?) := {
|
|
resp := {
|
|
verb := "SET_REPLY",
|
|
id := id,
|
|
variable := variable,
|
|
val := val
|
|
}
|
|
}
|
|
|
|
template CtrlMessage tr_CtrlMsgTrap(template CtrlVariable variable := ?,
|
|
template CtrlValue val := ?) := {
|
|
trap := {
|
|
variable := variable,
|
|
val := val
|
|
}
|
|
}
|
|
|
|
template CtrlMessage tr_CtrlMsgError(template CtrlId id := ?, template CtrlReason reason := ?) := {
|
|
err := {
|
|
id := id,
|
|
reason := reason
|
|
}
|
|
}
|
|
|
|
|
|
} with { encode "TEXT" }
|