<?wireshark-protocol
   proto_name="mscml"
   media="application/mediaservercontrol+xml"
   description="Media Server Control Markup Language - draft 07"
   hierarchy="yes" ?>

<!--
    DTD for MSCML - draft 07
		https://tools.ietf.org/html/draft-vandyke-mscml-07
		See this for current limitations:
		https://wireshark.org/lists/ethereal-dev/200605/msg02351.html

		(c)Copyright 2006 Hewlett-Packard Development Company, LP.
		   Contact: olivier.jacques@hp.com

                Latest RFC:
                https://datatracker.ietf.org/doc/rfc5022/
-->

<!ELEMENT MediaServerControl (request | response | notification) >
<!-- <!ATTLIST MediaServerControl version <!ATTLIST > #REQUIRED > -->
<!ATTLIST MediaServerControl version CDATA #REQUIRED >
<!ELEMENT request (configure_conference | configure_leg | play | playcollect | playrecord | managecontent | faxplay | faxrecord | stop)>
<!ELEMENT configure_conference (subscribe?)>
<!-- The MSCML yesNoType should also have | 1 | 0 in addition but Wireshark's
     parser doesn't like it. Should the yesNoType be an entity? -->
<!ATTLIST configure_conference
	id CDATA #IMPLIED
	reservedtalkers NMTOKEN #IMPLIED
	reserveconfmedia (yes | no | true | false) "yes"
>
<!ELEMENT configure_leg (inputgain?, outputgain?, configure_team?, subscribe?)>
<!ATTLIST configure_leg
	id CDATA #IMPLIED
	type (talker | listener) #IMPLIED
	mixmode (full | mute | preferred | parked | private) #IMPLIED
	dtmfclamp (yes | no | true | false) #IMPLIED
	toneclamp (yes | no | true | false) #IMPLIED
>
<!ELEMENT play (prompt?)>
<!ATTLIST play
	id CDATA #IMPLIED
	prompturl CDATA #IMPLIED
	offset CDATA #IMPLIED
	promptencoding CDATA #IMPLIED
>
<!ELEMENT playcollect (prompt?, pattern?)>
<!ATTLIST playcollect
	id CDATA #IMPLIED
	prompturl CDATA #IMPLIED
	offset CDATA #IMPLIED
	barge (yes | no | true | false) "yes"
	promptencoding CDATA #IMPLIED
	cleardigits (yes | no | true | false) "no"
	maxdigits CDATA #IMPLIED
	firstdigittimer CDATA "5000ms"
	interdigittimer CDATA "2000ms"
	extradigittimer CDATA "1000ms"
	interdigitcriticaltimer CDATA #IMPLIED
	skipinterval CDATA "6s"
	ffkey CDATA #IMPLIED
	rwkey CDATA #IMPLIED
	returnkey CDATA "#"
	escapekey CDATA "*"
	maskdigits (yes | no | true | false) "no"
>
<!ELEMENT playrecord (prompt?)>
<!ATTLIST playrecord
	id CDATA #IMPLIED
	prompturl CDATA #IMPLIED
	promptencoding CDATA #IMPLIED
	offset CDATA "0"
	barge (yes | no | true | false) "yes"
	cleardigits (yes | no | true | false) "no"
	escapekey CDATA "*"
	recurl CDATA #REQUIRED
	mode (append | overwrite) "overwrite"
	recencoding CDATA #IMPLIED
	initsilence CDATA #IMPLIED
	endsilence CDATA #IMPLIED
	duration CDATA #IMPLIED
	beep (yes | no | true | false) "yes"
	recstopmask CDATA "01234567890*#"
>
<!ELEMENT managecontent EMPTY>
<!ATTLIST managecontent
	id CDATA #IMPLIED
	fetchtimeout CDATA "10000"
	mimetype CDATA #IMPLIED
	name CDATA #IMPLIED
	httpmethod (put | post) #IMPLIED
	action (move | delete) #IMPLIED
	dest CDATA #IMPLIED
	src CDATA #REQUIRED
>
<!ELEMENT faxplay (prompt?)>
<!ATTLIST faxplay
	id CDATA #IMPLIED
	lclid CDATA #IMPLIED
	prompturl CDATA #IMPLIED
	recurl CDATA #IMPLIED
	rmtid CDATA #IMPLIED
>
<!ELEMENT faxrecord (prompt?)>
<!ATTLIST faxrecord
	id CDATA #IMPLIED
	lclid CDATA #IMPLIED
	prompturl CDATA #IMPLIED
	recurl CDATA #IMPLIED
	rmtid CDATA #IMPLIED
>
<!ELEMENT stop EMPTY>
<!ATTLIST stop
	id CDATA #IMPLIED
>
<!ELEMENT response (error_info?, team?)>
<!ATTLIST response
	request (configure_conference | configure_leg | play | playcollect | playrecord | managecontent | faxplay | faxrecord | stop) #REQUIRED
	id CDATA #IMPLIED
	code CDATA #REQUIRED
	text CDATA #REQUIRED
	reason CDATA #IMPLIED
	reclength CDATA #IMPLIED
	recduration CDATA #IMPLIED
	digits CDATA #IMPLIED
	name CDATA #IMPLIED
	playduration CDATA #IMPLIED
	playoffset CDATA #IMPLIED
	faxcode CDATA #IMPLIED
	pages_sent CDATA #IMPLIED
	pages_recv CDATA #IMPLIED
>
<!ELEMENT notification (conference | keypress | signal)>
<!ELEMENT conference (activetalkers?)>
<!ATTLIST conference
	uniqueid CDATA #REQUIRED
	numtalkers CDATA #REQUIRED
>
<!ELEMENT keypress (status)>
<!-- FIXME: Added for events in leg_eventsubscriptionType -->
<!ATTLIST keypress
	digit CDATA #REQUIRED
	length (standard | long) #REQUIRED
	method (standard | long | double) #REQUIRED
	interdigittime CDATA #REQUIRED
	report (standard | long | both | none) #REQUIRED
	maskdigits (yes | no | true | false) "no"
>
<!ELEMENT signal EMPTY>
<!-- FIXME: added because signal can be of type CDATA and nmtoken -->
<!ATTLIST signal
	type CDATA #FIXED "busy"
	report (yes | no | true | false) #REQUIRED
>
<!ELEMENT prompt (audio | variable)+>
<!ATTLIST prompt
	locale CDATA #IMPLIED
	baseurl CDATA #IMPLIED
	stoponerror (yes | no | true | false) "no"
	gain CDATA "0"
	gaindelta CDATA "0"
	rate CDATA "0"
	ratedelta CDATA "0"
	repeat CDATA "1"
	duration CDATA "infinite"
	offset CDATA "0"
	delay CDATA "0"
>
<!ELEMENT subscribe (events)>
<!ELEMENT inputgain (auto | fixed)>
<!ELEMENT outputgain (auto | fixed)>
<!ELEMENT configure_team (teammate*)>
<!ATTLIST configure_team
	id CDATA #IMPLIED
	action (add | delete | query | set) #REQUIRED
>
<!ELEMENT teammate EMPTY>
<!ATTLIST teammate
	id CDATA #REQUIRED
>
<!ELEMENT pattern (regex+ | mgcpdigitmap | megacodigitmap)>
<!ELEMENT regex EMPTY>
<!ATTLIST regex
	value CDATA #REQUIRED
	name CDATA #IMPLIED
>
<!ELEMENT mgcpdigitmap EMPTY>
<!ATTLIST mgcpdigitmap
	value CDATA #REQUIRED
	name CDATA #IMPLIED
>
<!ELEMENT megacodigitmap EMPTY>
<!ATTLIST megacodigitmap
	value CDATA #REQUIRED
	name CDATA #IMPLIED
>
<!ELEMENT error_info EMPTY>
<!ATTLIST error_info
	code CDATA #REQUIRED
	text CDATA #REQUIRED
	context CDATA #REQUIRED
>
<!ELEMENT team (teammate*)>
<!ATTLIST team
	id CDATA #REQUIRED
	numteam NMTOKEN #REQUIRED
>
<!-- two events elements are possible (conference_eventsubscriptionType, leg_eventsubscriptionType)
     Let's take the union
     It should be:
<!ELEMENT events (activetalkers)>
<!ELEMENT activetalkers EMPTY>
<!ATTLIST activetalkers
	interval CDATA "60s"
>
<!ELEMENT events (keypress?, signal*)>
<!ELEMENT keypress EMPTY>
<!ATTLIST keypress
	report (standard | long | both | none) #REQUIRED
	maskdigits (yes | no | true | false) "no"
>
-->
<!ELEMENT events (activetalkers*, keypress*, signal*)>
<!-- FIXME: two different activetalkers defined
<!ELEMENT activetalkers EMPTY>
<!ATTLIST activetalkers
	report (yes | no | true | false) #REQUIRED
	interval CDATA "60s"
>
-->

<!--
<!ELEMENT signal EMPTY>
<!ATTLIST signal
	type NMTOKEN #REQUIRED
	report (yes | no | true | false) #REQUIRED
>
-->
<!ELEMENT activetalkers (talker*)?>
<!ATTLIST activetalkers
	report (yes | no | true | false) #IMPLIED
	interval CDATA "60s"
>
<!ELEMENT talker EMPTY>
<!ATTLIST talker
	callid CDATA #REQUIRED
>
<!ELEMENT status EMPTY>
<!ATTLIST status
	command (idle | play | collect | record) #REQUIRED
	duration CDATA #REQUIRED
>
<!ELEMENT audio EMPTY>
<!ATTLIST audio
	url CDATA #REQUIRED
	encoding CDATA #IMPLIED
	gain CDATA "0"
	gaindelta CDATA "0"
	rate CDATA "0"
	ratedelta CDATA "0"
>
<!ELEMENT variable EMPTY>
<!-- FIXME: USD creates an error -> is it because of all capital? -->
<!-- subtype (mdy | dmy | ymd | ndn | t12 | t24 | USD | gen | ndn | crd | ord) #IMPLIED -->
<!ATTLIST variable
	type (dat | dig | dur | mth | mny | num | sil | str | tme | wkd) #REQUIRED
	subtype (mdy | dmy | ymd | ndn | usd | t12 | t24 | gen | crd | ord) #IMPLIED
	value CDATA #REQUIRED
>
<!ELEMENT auto EMPTY>
<!ATTLIST auto
	startlevel CDATA #IMPLIED
	targetlevel CDATA #IMPLIED
	silencethreshold CDATA #IMPLIED
>
<!ELEMENT fixed EMPTY>
<!ATTLIST fixed
	level CDATA #IMPLIED
>

