e, applnfo, sellWatch The ASPs of the operation callnfo in symbolic form: CAS/callnfoRequest(typeOfInfo{time, day, date} DEFAULT time) CAS/callnfoConfirm(CHOICE{Time, DayInWeek, Date}) Time::=SET{hour, minute OPTIONAL) DayInWeek:::{"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"} Date::=SET{Month, DayInMonth} Month::={"January","February",...,"December"} DaylnMonth::=(1..31) CAS/callnfoRefuse(cause{watchBroken,noWatch}) Fig. 7.25 Abstract service primitives in symbolic form If, however, object communication relies on some message protocol, and/or dif- ferent concrete languages are used for implementation, all elements of ASPs must have a concrete-language-independent data representation, i.e. all parts of an ASP must have a type reference (or type name). According to Sect. 5.7.1, there are three typing systems allowed in AML: ASN.1 types, AML types and private types. The elements of ASPs that must be typed are the (optional) service name, the operation name, the primitive type and the parameters. Let's first type the parameters of the operation CAS/calInfo in ASN.1, see Fig. 7.26. Typed ASPs with identifiers for operation CAS/callnfo: CAS/callnfoRequest(INTEGER{time(0), day(1), date(2)} DEFAULT 0) CAS/callnfoConfirm(CHOICE{[0]Time, [1]DayInWeek, [2]Date}) Time::=SEQUENCE{hour INTEGER SIZE (0..24), ".", minute INTEGER SIZE (0..60) OPTIONAL) DaylnWeek::=IA5String{"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"} Date::=SEQUENCE{Month, "/", DayInMonth} Month::=IA5String{"January","February",. "December"} DaylnMonth::=INTEGERSIZ (1..31) CAS/callnfoRefuse(cause INTEGER{watchBroken(0), noWatch(1)) Typed ASPs without identifiers for operation CAS/callnfo: CAS/callnfoRequest(INTEGER(0..2 DEFAULT 0) CAS/callnfoConfirm(CHOICE{[0]Time, [1]DayInWeek, [2]Date}) Time::=SEQUENCE{INTEGER SIZE (0..24), ".", INTEGER SIZE (0..60) OPTIONAL) DayInWeek::=IA5String{"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"} Date::=SEQUENCE{Month, "/", DayInMonth