      type enumerated FieldName
      {
        ACCEPT_E,
        ACCEPT_ENCODING_E,
        ACCEPT_LANGUAGE_E,
        ALERT_INFO_E,
        ALLOW_E,
        AUTHENTICATION_INFO_E,
        AUTHORIZATION_E,
        CALL_ID_E,
        CALL_INFO_E,
        CONTACT_E,
        CONTENT_DISPOSITION_E,
        CONTENT_ENCODING_E,
        CONTENT_LANGUAGE_E,
        CONTENT_LENGTH_E,
        CONTENT_TYPE_E,
        CSEQ_E,
        DATE_E,
        ERROR_INFO_E,
        EXPIRES_E,
        FROM_E,
        IN_REPLY_TO_E,
        MAX_FORWARDS_E,
        MIME_VERSION_E,
        MIN_EXPIRES_E,
        ORGANIZATION_E,
        PRIORITY_E,
        PROXY_AUTHENTICATE_E,
        PROXY_AUTHORIZATION_E,
        PROXY_REQUIRE_E,
        RECORD_ROUTE_E,
        REPLY_TO_E,
        REQUIRE_E,
        RETRY_AFTER_E,
        ROUTE_E,
        SERVER_E,
        SUBJECT_E,
        SUPPORTED_E,
        TIMESTAMP_E,
        TO_E,
        UNSUPPORTED_E,
        USER_AGENT_E,
        VIA_E,
        WARNING_E,
        WWW_AUTHENTICATE_E,
		RACK_E,
		RSEQ_E,
		ALLOW_EVENTS_E,
		EVENT_E,
		SUBSCRIPTION_STATE_E,
		P_MEDIA_AUTHORIZATION_E,
		PRIVACY_E,
		P_ASSERTED_ID_E,
		P_PREFERRED_ID_E, 
		REASON_E,
		REFER_TO_E,
		REFERRED_BY_E,
		HISTORY_INFO_E,
		P_MEDIA_AUTH_E,
		PATH_E,	
		SECURITY_CLIENT_E,	
		SECURITY_SERVER_E,
		SECURITY_VERIFY_E,  
		P_ACCESS_NETWORK_INFO_E,
		P_ASSOCIATED_URI_E,
		P_CALLED_PARTY_E,
		P_CHARGING_FUNCTION_ADDRESSES_E,
		P_CHARGING_VECTOR_E,
		P_VISITED_NETWORK_E,
		SERVICE_ROUTE_E,
		ACCEPT_CONTACT_E,
		MIN_SE_E,
		SESSION_EXPIRES_E,
		P_ASSERTED_SERVICE_E,
		P_EARLY_MEDIA_E
      }

	  type enumerated Method {
		  ACK_E,
		  BYE_E,
		  CANCEL_E,
		  INVITE_E,
		  OPTIONS_E,
		  REGISTER_E,
		  PRACK_E, 
		  SUBSCRIBE_E, 
		  NOTIFY_E, 
		  PUBLISH_E, 
		  REFER_E, 
		  UPDATE_E,
		  MESSAGE_E,
		  INFO_E
		  }
	        
      type record GenericParam
      {
        charstring                 id,
        charstring                paramValue optional
      }
      
      type set of GenericParam SemicolonParam_List;
      
      type set of GenericParam AmpersandParam_List;
      
      type set of GenericParam CommaParam_List;
      
      type record HostPort
      {
        charstring             host optional,    
        integer                portField optional
      }
      
      type record UserInfo
      {
        charstring	       userOrTelephoneSubscriber,
        charstring	       password optional
      }
      
      type record SipUrl
      {
        charstring		scheme,
        UserInfo		userInfo optional,
        HostPort		hostPort optional,
        SemicolonParam_List	urlParameters optional,
        AmpersandParam_List	headers optional
      }
      
      type record AcceptBody
      {
        charstring 		mediaRange,
        SemicolonParam_List	acceptParam optional
      }
      
      type set of AcceptBody AcceptBody_List;
      
      type record AlertInfoBody
      {
        charstring			url,
        SemicolonParam_List	genericParams optional
      }
      
      type set of AlertInfoBody AlertInfoBody_List;
      
      type charstring CallidString; 
      
      type set of CallidString CallidString_List;
      
      type record CallInfoBody
      {
        charstring	 		url,
        SemicolonParam_List		infoParams optional
      }
      
      type set of CallInfoBody CallInfoBody_List;
      
      type union Challenge
      {
        CommaParam_List digestCln,
        OtherAuth	otherChallenge
      }
      
      type record NameAddr
      {
        charstring	displayName optional,
        SipUrl		addrSpec
      }
      
      type union Addr_Union
      {
        NameAddr	nameAddr,
        SipUrl		addrSpecUnion
      }
      
      type record ContactAddress
      {
        Addr_Union 		addressField,
        SemicolonParam_List	contactParams optional
      }
      
      type set of ContactAddress ContactAddress_List; 
      
      type union ContactBody
      {
        charstring		wildcard,
        ContactAddress_List	contactAddresses
      }
      
      type charstring ContentCoding;
      
      type set of ContentCoding ContentCoding_List;
      
      type union Credentials
      {
        CommaParam_List	digestResponse,
        OtherAuth  	    otherResponse
      }
      
      type charstring	DeltaSec;	      

      type record ErrorInfoBody
      {
        charstring			uri,		
        SemicolonParam_List		genericParams optional
      }
      
      type set of ErrorInfoBody ErrorInfoBody_List;
      
       type record LanguageBody
      {
        charstring 		languageRange,
        SemicolonParam_List	acceptParam optional
      }
      
      type set of LanguageBody LanguageBody_List;
      
       type charstring LanguageTag;
      
      type set of LanguageTag LanguageTag_List;
      
       type set of charstring Method_List;
      
      type charstring OptionTag;
      
      type set of OptionTag OptionTag_List;
      
      
      type record OtherAuth
      {
        charstring		authScheme,
        CommaParam_List	authParams
      }
      
      type record Payload
      {
        integer		payloadlength,
        charstring 		payloadvalue
      }
      
      type record RouteBody
      {
        NameAddr			nameAddr,
        SemicolonParam_List	rrParam optional
      }
      
      type record of RouteBody RouteBody_List;
      
      type record SentProtocol
      {
        charstring		protocolName,
        charstring		protocolVersion,
        charstring		transport
      }
      
      type charstring ServerVal;
      
      type set of ServerVal ServerVal_List;
      
      type record TimeValue
      {
        integer			majorDigit,		
        integer			minorDigit optional	
      }
      
      type record ViaBody
      {
        SentProtocol	sentProtocol,
        HostPort		sentBy,
        SemicolonParam_List	viaParams optional
      }
      
      type record of ViaBody ViaBody_List;
      
      type union WarnAgent
      {
        HostPort		hostPort,
        charstring		pseudonym
      }
      
      type record WarningValue
      {
        integer		warnCode,	
        WarnAgent		warnAgent,
        charstring		WarnText
      }
      
      type set of WarningValue WarningValue_List;

	  type Addr_Union PAssertedIDValue;
      
	  type record of PAssertedIDValue PAssertedIDValue_List;

	  type charstring PAssertedServiceValue;

	  type Addr_Union PPreferredIDValue;
      
	  type record of PPreferredIDValue PPreferredIDValue_List;

	  type charstring PrivacyValue;
      
	  type record of PrivacyValue PrivacyValue_List;

      type record Accept
      {
        FieldName		fieldName (ACCEPT_E),
        AcceptBody_List	        acceptArgs optional
      }

      type record AcceptEncoding
      {
        FieldName		fieldName (ACCEPT_ENCODING_E),
        ContentCoding_List	contentCoding optional
      }

      type record AcceptLanguage
      {
        FieldName		fieldName (ACCEPT_LANGUAGE_E),
        LanguageBody_List	languageBody optional
      }

      type record AlertInfo
      {
        FieldName		fieldName (ALERT_INFO_E),
        AlertInfoBody_List	alertInfoBody optional
      }
      
      type record Allow
      {
        FieldName		fieldName (ALLOW_E),
        Method_List		methods optional
      }
      
      type record AuthenticationInfo
      {
        FieldName		fieldName (AUTHENTICATION_INFO_E),
        CommaParam_List	ainfo
      }
      
      type record Authorization
      {
        FieldName		fieldName (AUTHORIZATION_E),
        Credentials		body
      }
      
      type record CallId
      {
        FieldName		fieldName (CALL_ID_E),
        CallidString       	callid
      }
      
      type record CallInfo
      {
        FieldName		fieldName (CALL_INFO_E),
        CallInfoBody_List	callInfoBody optional
      }
      
      type record Contact
      {
        FieldName		fieldName (CONTACT_E),
        ContactBody		contactBody
      }
      
      type record ContentDisposition
      {
        FieldName		fieldName (CONTENT_DISPOSITION_E),
        charstring		dispositionType,
        SemicolonParam_List	dispositionParams optional
      }
      
      type record ContentEncoding
      {
        FieldName		fieldName (CONTENT_ENCODING_E),
        ContentCoding_List	contentCoding
      }
      
      type record ContentLanguage
      {
        FieldName		fieldName (CONTENT_LANGUAGE_E),
        LanguageTag_List	languageTag
      }
      
      type record ContentLength
      {
        FieldName		fieldName (CONTENT_LENGTH_E),
        integer		len	
      }
      
      type record ContentType
      {
        FieldName		fieldName (CONTENT_TYPE_E),
        charstring		mediaType
      }
      
      type record CSeq
      {
        FieldName		fieldName (CSEQ_E),
        integer		seqNumber,	
        charstring   	method
      }
      
      type record Date
      {
        FieldName		fieldName (DATE_E),
        charstring		sipDate
      }
      
      type record ErrorInfo
      {
        FieldName		fieldName (ERROR_INFO_E),
        ErrorInfoBody_List	errorInfo optional
      }
      
      type record Expires
      {
        FieldName		fieldName (EXPIRES_E),
        DeltaSec		deltaSec
      }
      
      type record From
      {
        FieldName		fieldName (FROM_E),
        Addr_Union    	addressField,
        SemicolonParam_List	fromParams optional
      }
      
      type record InReplyTo
      {
        FieldName		fieldName (IN_REPLY_TO_E),
        CallidString_List	callids
      }
      
      type record MaxForwards
      {
        FieldName		fieldName (MAX_FORWARDS_E),
        integer		forwards	
      }
      
      type record MinExpires
      {
        FieldName		fieldName (MIN_EXPIRES_E),
        DeltaSec		deltaSec
      }
      
      type record MimeVersion
      {
        FieldName		fieldName (MIME_VERSION_E),
        integer		majorNumber,	
        integer		minorNumber	
      }
      
      type record Organization
      {
        FieldName		fieldName (ORGANIZATION_E),
        charstring		organization
      }
      
      type record Priority
      {
        FieldName		fieldName (PRIORITY_E),
        charstring		priorityValue
      }
      
      type record ProxyAuthenticate
      {
        FieldName		fieldName (PROXY_AUTHENTICATE_E),
        Challenge		challenge
      }
      
      type record ProxyAuthorization
      {
        FieldName		fieldName (PROXY_AUTHORIZATION_E),
        Credentials		credentials
      }
      
      type record ProxyRequire
      {
        FieldName		fieldName (PROXY_REQUIRE_E),
        OptionTag_List	optionsTags
      }
      
      type record RecordRoute
      {
        FieldName		fieldName (RECORD_ROUTE_E),
        RouteBody_List	routeBody
      }
      
      type record ReplyTo
      {
        FieldName		fieldName (REPLY_TO_E),
        Addr_Union    	addressField,
        SemicolonParam_List	replyToParams optional
      }
      
      type record Require
      {
        FieldName		fieldName (REQUIRE_E),
        OptionTag_List	optionsTags
      }
      
      type record RetryAfter
      {
        FieldName		fieldName (RETRY_AFTER_E),
        DeltaSec    	deltaSec,
        charstring		comment optional,
        SemicolonParam_List	retryParams optional
      }
      
      type record Route
      {
        FieldName		fieldName (ROUTE_E),
        RouteBody_List	routeBody
      }
      
      type record Server
      {
        FieldName		fieldName (SERVER_E),
        ServerVal_List	serverBody
      }
      
      type record Subject
      {
        FieldName		fieldName (SUBJECT_E),
        charstring		summary
      }
      
      type record Supported
      {
        FieldName		fieldName (SUPPORTED_E),
        OptionTag_List	optionsTags optional
      }
      
      type record Timestamp
      {
        FieldName		fieldName (TIMESTAMP_E),
        TimeValue		timeValue optional,
        TimeValue		delay optional
      }
      
      type record To
      {
        FieldName		fieldName (TO_E),
        Addr_Union      	addressField,
        SemicolonParam_List	toParams optional
      }
      
      type record Unsupported
      {
        FieldName		fieldName (UNSUPPORTED_E),
        OptionTag_List		optionsTags
      }
      
      type record UndefinedHeader
      {
        charstring		headerName,
        charstring		headerValue
      }
      
      type set of UndefinedHeader UndefinedHeader_List;
      
      type record UserAgent
      {
        FieldName		fieldName (USER_AGENT_E),
        ServerVal_List 	userAgentBody
      }
      
      type record Via
      {
        FieldName		fieldName (VIA_E),
        ViaBody_List		viaBody
      }
      
      type record Warning
      {
        FieldName		fieldName (WARNING_E),
        WarningValue_List	warningValue
      }
      
      type record WwwAuthenticate
      {
        FieldName		fieldName (WWW_AUTHENTICATE_E),
        Challenge		challenge
      }

	  type record RSeq {
		  FieldName fieldName(RSEQ_E),
		  integer responseNum
	  }

	  type record RAck {
		  FieldName fieldName(RACK_E),
		  integer responseNum,
		  integer seqNumber,
		  charstring method
	  }

	  type record AllowEvents {
		  FieldName fieldName(ALLOW_EVENTS_E),
		  EventType_List eventTypes
	  }
	  
	  type set of EventType EventType_List;
	  type charstring EventType;
	  
	  type record Event {
		  FieldName fieldName(EVENT_E),
		  EventType eventType,
		  SemicolonParam_List eventParams optional
	  }
	  
	  type record SubscriptionState {
		  FieldName fieldName(SUBSCRIPTION_STATE_E),
		  SubState subState,
		  SemicolonParam_List substateParams optional
	  }
	  
	  type charstring SubState;
	  
	  type record PMediaAuthorization {
		  FieldName fieldName(P_MEDIA_AUTHORIZATION_E),
		  PMediaAuthorization_List pMediaAuthorizations
	  }
			
	  type charstring PMediaAuthValue; 
	  
	  type record of PMediaAuthValue PMediaAuthorization_List;
	  

	  type record Privacy {
		  FieldName fieldName(PRIVACY_E),
		  PrivacyValue_List privValueList
	  }   

	  type record PAssertedID {
		  FieldName fieldName(P_ASSERTED_ID_E),
		  PAssertedIDValue_List pAssertedIDValueList
	  }

	  type record PPreferredID {
		  FieldName fieldName(P_PREFERRED_ID_E),
		  PPreferredIDValue_List pPreferredIDValueList
	  }

	  type record of ReasonValue ReasonValues;
	  
	  type record ReasonValue {
	  charstring token,
	  SemicolonParam_List reasonParams optional
  	  } 	  
	  
	  type record Reason {
	  FieldName fieldName(REASON_E),
	  ReasonValues reasonValues
	  }

	  type record Path {
		  FieldName fieldName(PATH_E),
		  PathValues pathValues
	  }
	  
	  type record of PathValue PathValues;

	  type record PathValue {
		  NameAddr nameAddr,
		  SemicolonParam_List rrParam optional
	  }

	  type record SecurityMechanism {
		charstring mechName,
		SemicolonParam_List mechParams optional
	  }

	  type set of SecurityMechanism SecurityMechanism_List;
			
	  type record SecurityClient {
		FieldName fieldName(SECURITY_CLIENT_E),
		SecurityMechanism_List securityMech
	  }

	  type record SecurityServer {
		FieldName fieldName(SECURITY_SERVER_E),
		SecurityMechanism_List securityMech
	  }

	  type record SecurityVerify {
		FieldName fieldName(SECURITY_VERIFY_E),
		SecurityMechanism_List securityMech
	  }
 
	  type record of NameAddrParam NameAddrParam_List;

	  type record NameAddrParam {
		  NameAddr nameAddr,
		  SemicolonParam_List genericParams optional
	  }

	  type record PAssociatedURI {
		FieldName fieldName(P_ASSOCIATED_URI_E),
		NameAddrParam_List nameAddrList
	  }	  

	  type record PCalledPartyID {
		  FieldName fieldName(P_CALLED_PARTY_E),
		  NameAddrParam nameAddParams
	  }

	  type record of VnetworkSpec VnetworkSpec_List;

	  type record VnetworkSpec {
		charstring vNetworkSpecToken,
		SemicolonParam_List genericParams optional
	  }

	  type record PVisitedNetworkID {
		FieldName fieldName(P_VISITED_NETWORK_E),
		VnetworkSpec_List vNetWorkSpec
	  }

	  type record PAccessNetworkInfo {
		FieldName fieldName(P_ACCESS_NETWORK_INFO_E),
		charstring accessType,
		SemicolonParam_List genericParams optional
	  }
		
	  type record PChargingFunctionAddresses {
		FieldName fieldName(P_CHARGING_FUNCTION_ADDRESSES_E),
		SemicolonParam_List chargeAddrParams optional
	  }
				
	  type record PChargingVector {
		FieldName fieldName(P_CHARGING_VECTOR_E),
		SemicolonParam_List chargeParams optional
	  }

	  type record ReferTo {
		  FieldName fieldName(REFER_TO_E),
		  NameAddr nameAddr,
		  SemicolonParam_List referToParams optional
	  }

	  type record ServiceRoute {
		FieldName fieldName(SERVICE_ROUTE_E),
		RouteBody_List	routeBody
	  }

	  type record AcceptContact {
		  FieldName fieldName(ACCEPT_CONTACT_E),
		  AcRcValue_List acValues
	  }

	  type set of AcRcValue AcRcValue_List;

	  type record AcRcValue {
		  charstring wildcard("*"),
		  SemicolonParam_List acRcParams optional
	  }	  	  

	  type record ReferredBy {
		  FieldName fieldName(REFERRED_BY_E),
		  NameAddr nameAddr,
		  SemicolonParam_List referredbyIdParams optional
	  }
			
	  type record MinSE {
		FieldName fieldName(MIN_SE_E),
		DeltaSec deltaSec,
		SemicolonParam_List minSeParam optional
	  }

	  type record SessionExpires {
		FieldName fieldName(SESSION_EXPIRES_E),
		DeltaSec deltaSec,
		SemicolonParam_List seParam optional
	  }

	  type record HistoryInfo {
		  FieldName fieldName(HISTORY_INFO_E),
		  HistoryInfo_List historyInfoList
	  }

	  type record of HistoryInfoEntry HistoryInfo_List;

	  type record of integer IntegerList;

	  type record HistoryInfoEntry {
		  NameAddr nameAddr,
		  IntegerList hiIndex optional,
		  SemicolonParam_List hiExtention optional
	  }

	  type record of charstring CharstringList;

	  type record PEarlyMedia {
		  FieldName fieldName(P_EARLY_MEDIA_E),
		  CharstringList em_param
	  }

	  type record PAssertedService {
		  FieldName fieldName(P_ASSERTED_SERVICE_E),
		  PAssertedServiceValue pAssertedServiceValue
	  }


     type set MessageHeader
      {
        Accept				accept optional,
		AcceptContact		acceptContact optional,
        AcceptEncoding		acceptEncoding optional,
        AcceptLanguage		acceptLanguage optional,
        AlertInfo			alertInfo optional,
        Allow				allow optional,
		AllowEvents 		allowEvents optional,
        AuthenticationInfo	authenticationInfo optional, 
        Authorization		authorization optional, 
        CallId				callId optional, 
        CallInfo			callInfo optional,
        Contact				contact optional, 
        ContentDisposition	contentDisposition optional,
        ContentEncoding		contentEncoding optional,
        ContentLanguage		contentLanguage optional,
        ContentLength		contentLength optional, 
        ContentType			contentType optional,
        CSeq				cSeq optional, 
        Date				date optional,
        ErrorInfo 			errorInfo optional, 
		Event 				event optional, 
        Expires 			expires optional,
        From				fromField,
		HistoryInfo 		historyInfo optional, 
        InReplyTo 			inReplyTo optional, 
        MaxForwards			maxForwards optional, 
        MimeVersion			mimeVersion optional,
        MinExpires			minExpires optional, 
		MinSE 				minSE optional, 
        Organization		organization optional,
		PAccessNetworkInfo 	pAccessNetworkInfo optional,
		PAssertedID 		pAssertedID optional, 
		PAssertedService	pAssertedService optional,
		PAssociatedURI		pAssociatedURI optional, 
		Path 				path optional, 
		PCalledPartyID 		pCalledPartyID optional, 
		PChargingFunctionAddresses pChargingFunctionAddresses optional, 
		PChargingVector 	pChargingVector optional, 
		PEarlyMedia			pEarlyMedia	optional, 
		PMediaAuthorization pMediaAuthorization optional, 
		PPreferredID 		pPreferredID optional, 
        Priority 			priority optional,  
		Privacy 			privacy optional, 
        ProxyAuthenticate	proxyAuthenticate optional, 
        ProxyAuthorization	proxyAuthorization optional, 
        ProxyRequire		proxyRequire optional, 
		PVisitedNetworkID 	pVisitedNetworkID optional, 
		RAck 				rAck optional, 
		RSeq 				rSeq optional, 
		Reason 				reason optional, 
        RecordRoute			recordRoute optional,
		ReferredBy 			referredBy optional, 	
		ReferTo 			referTo optional, 
        ReplyTo				replyTo optional, 
        Require 			require optional,
        RetryAfter			retryAfter optional, 
        Route 				route optional, 
		SecurityClient 		securityClient optional, 
		SecurityServer 		securityServer optional, 
		SecurityVerify 		securityVerify optional, 
        Server				server optional, 
		ServiceRoute 		serviceRoute optional, 
		SessionExpires 		sessionExpires optional,
        Subject				subject optional, 
		SubscriptionState 	subscriptionState optional, 
        Supported 			supported optional,
        Timestamp 			timestamp optional,
        To					toField,
        Unsupported			unsupported optional, 
        UserAgent 			userAgent optional,
        Via					via,
        Warning				warning optional, 
        WwwAuthenticate		wwwAuthenticate optional, 
        UndefinedHeader_List	undefinedHeader_List optional
      }
      
 
      type record RequestLine
      {
        Method			method,
        SipUrl			requestUri,
        charstring		sipVersion
      }
      
       type record StatusLine
      {
        charstring		sipVersion,
        integer			statusCode,
        charstring		reasonPhrase
      }
      

    type record SipUserProfile
    {	
		integer		id,
		integer     currPort,
		charstring  currIpaddr,		
		integer     contactPort,
		charstring  contactIpaddr,
		charstring  bearerIpaddr,
		charstring  homeDomain,
		charstring  publUsername,
		charstring qop,
		charstring privUsername,
		charstring passwd,
		charstring registrarDomain
     }
    
 
      type record Request
      {
        RequestLine		requestLine,
        MessageHeader 	msgHeader,
		MessageBody		messageBody optional,
        Payload			payload	    optional
      } 
      
	  type record REGISTER_Request {
		RequestLine 	requestLine,
		MessageHeader 	msgHeader,
		MessageBody 	messageBody optional,
		Payload 		payload optional
	  }

	  type record INVITE_Request {
		RequestLine 	requestLine,
		MessageHeader 	msgHeader,
		MessageBody 	messageBody optional,
		Payload 		payload optional
	  }
	  
	  type record OPTIONS_Request {
		RequestLine 	requestLine,
		MessageHeader 	msgHeader,
		MessageBody 	messageBody optional,
		Payload 		payload optional
	  }

	  type record BYE_Request {
		RequestLine 	requestLine,
		MessageHeader 	msgHeader,
		MessageBody 	messageBody optional,
		Payload 		payload optional
	  }

	  type record CANCEL_Request {
		RequestLine 	requestLine,
		MessageHeader 	msgHeader,
		MessageBody 	messageBody optional,
		Payload 		payload optional
	  }
	  
	  type record ACK_Request {
		RequestLine 	requestLine,
		MessageHeader 	msgHeader,
		MessageBody 	messageBody optional,
		Payload 		payload optional
	  }

	  type record PRACK_Request {
		RequestLine 	requestLine,
		MessageHeader 	msgHeader,
		MessageBody 	messageBody optional,
		Payload 		payload optional
	  }

	  type record NOTIFY_Request {
		RequestLine 	requestLine,
		MessageHeader 	msgHeader,
		MessageBody 	messageBody optional,
		Payload 		payload optional
	  }

	  type record SUBSCRIBE_Request {
		RequestLine 	requestLine,
		MessageHeader 	msgHeader,
		MessageBody 	messageBody optional,
		Payload 		payload optional
	  }

	  type record PUBLISH_Request {
		RequestLine 	requestLine,
		MessageHeader 	msgHeader,
		MessageBody 	messageBody optional,
		Payload 		payload optional
	  }

	  type record UPDATE_Request {
		RequestLine 	requestLine,
		MessageHeader 	msgHeader,
		MessageBody 	messageBody optional,
		Payload 		payload optional
	  }

	  type record REFER_Request {
		RequestLine 	requestLine,
		MessageHeader 	msgHeader,
		MessageBody 	messageBody optional,
		Payload 		payload optional
	  }

	  type record MESSAGE_Request {
		RequestLine 	requestLine,
		MessageHeader 	msgHeader,
		MessageBody 	messageBody optional,
		Payload 		payload optional
	  }

	  type record INFO_Request {
		RequestLine 	requestLine,
		MessageHeader 	msgHeader,
		MessageBody 	messageBody optional,
		Payload 		payload optional
	  }
	  
  
      type record Response
      {
        StatusLine		statusLine,
        MessageHeader 	msgHeader,
		MessageBody		messageBody optional,
        Payload			payload	    optional
      } 
      type charstring Raw;


	  type union MessageBody{
		SDP_Message sdpMessageBody,
		XmlBody xmlBody,            
		MIME_Message mimeMessageBody,
		charstring sipfrag, 		
		charstring textplain		
	  }

    	
		type union MIME_Encapsulated_Parts {
		  SDP_Message 				sdpMessageBody,
		  XmlBody 					xmlBody       
		} 
		
		type record MIME_Encapsulated_Part {
		  charstring 				content_type,
		  charstring				content_disposition optional,
		  MIME_Encapsulated_Parts 	mime_encapsulated_part
		}

	    type record MIME_Message {
		  charstring boundary, 
		  MimeEncapsulatedList mimeEncapsulatedList
	    }
	  
	    type record of MIME_Encapsulated_Part MimeEncapsulatedList;

            type record SDP_attribute_cat {
                charstring attr_value
            }

            type record SDP_attribute_keywds {
                charstring attr_value
            }

            type record SDP_attribute_tool {
                charstring attr_value
            }

            type record SDP_attribute_ptime {
                charstring attr_value
            }

            type record SDP_attribute_recvonly {
            }

            type record SDP_attribute_sendrecv {
            }

            type record SDP_attribute_sendonly {
            }

			type record SDP_attribute_inactive {
			}

            type record SDP_attribute_orient {
                charstring attr_value
            }

            type record SDP_attribute_type {
                charstring attr_value
            }

            type record SDP_attribute_charset {
                charstring attr_value
            }

            type record SDP_attribute_sdplang {
                charstring attr_value
            }

            type record SDP_attribute_lang {
                charstring attr_value
            }

            type record SDP_attribute_framerate {
                charstring attr_value
            }

            type record SDP_attribute_quality {
                charstring attr_value
            }

            type record SDP_attribute_fmtp {
                charstring attr_value
            }

			type record SDP_attribute_curr {
				charstring preconditionType,
				charstring statusType,
				charstring direction
			}

			type record SDP_attribute_des {
				charstring preconditionType,
				charstring strength,
				charstring statusType,
				charstring direction
			}

			type record SDP_attribute_conf {
				charstring preconditionType,
				charstring statusType,
				charstring direction
			}

            type record SDP_attribute_rtpmap {
                charstring attr_value
            }

            type record SDP_attribute_rtcp {
                charstring attr_value
            }

            type record SDP_attribute_unknown {
                charstring name,
                charstring attr_value optional
            }


            type union SDP_attribute {
                SDP_attribute_cat             cat,
                SDP_attribute_keywds          keywds,
                SDP_attribute_tool            tool,
                SDP_attribute_ptime           ptime,
                SDP_attribute_recvonly        recvonly,
                SDP_attribute_sendrecv        sendrecv,
                SDP_attribute_sendonly        sendonly,
				        SDP_attribute_inactive		    inactive,
                SDP_attribute_orient          orient,
                SDP_attribute_type            sdp_type,
                SDP_attribute_charset         charset,
                SDP_attribute_sdplang         sdplang,
                SDP_attribute_lang            lang,
                SDP_attribute_framerate       framerate,
                SDP_attribute_quality         quality,
                SDP_attribute_fmtp            fmtp,
                SDP_attribute_curr            curr,
                SDP_attribute_des             des,
                SDP_attribute_conf            conf,
                SDP_attribute_rtpmap          rtpmap,
                SDP_attribute_rtcp            rtcp,
                SDP_attribute_unknown unknown
            }
 
      type set of SDP_attribute SDP_attribute_list;

      type record SDP_bandwidth {
        charstring          modifier,
        integer             bandwidth
      }

	  type set of SDP_bandwidth SDP_bandwidth_list;

      type record SDP_connection {
        charstring          net_type,
        charstring          addr_type,
		SDP_conn_addr		conn_addr
      }

      type record SDP_conn_addr {
	  	charstring addr,
		integer ttl optional,
		integer num_of_addr optional
	  }

      type set of SDP_connection SDP_connection_list;

      type record SDP_contact {
        charstring          addr_or_phone,
        charstring          disp_name optional
      }

      type SDP_contact SDP_contact_tel;

      type SDP_contact SDP_contact_email;

      type set of SDP_contact_email SDP_email_list;

      type record of charstring SDP_fmt_list ;

      type record SDP_key {
        charstring          method,
        charstring          key optional
      }

      type record SDP_media_desc {
        SDP_media_field     media_field,
        charstring          information optional,
        SDP_connection_list connections optional,
        SDP_bandwidth       bandwidth optional,
        SDP_key             key optional,
        SDP_attribute_list  attributes optional
      }

      type set of SDP_media_desc SDP_media_desc_list;

      type record SDP_media_port {
        integer             port_number,
        integer             num_of_ports optional
      }

      type record SDP_media_field {
        charstring          media,
        SDP_media_port      ports,
        charstring          transport,
        SDP_fmt_list        fmts
      }

      type record SDP_time{
        SDP_time_field      time_field,
        SDP_repeat_list     time_repeat optional
      }

      type record SDP_time_field{
        charstring   start_time, 
        charstring   stop_time 
      }

      type record SDP_repeat{
        SDP_typed_time      repeat_interval,
        SDP_typed_time      active,
        SDP_typed_time_list offsets
      }

      type set of SDP_repeat SDP_repeat_list;

      type record SDP_typed_time{
        integer        time,
        charstring     unit optional
      }

      type set of SDP_typed_time SDP_typed_time_list;

      type set of SDP_time SDP_time_list;

      type record SDP_timezone{
        charstring          adjustment_time,
        SDP_typed_time      offset
      }

      type set of SDP_timezone SDP_timezone_list;

      type record SDP_Origin{
        charstring          user_name,
        charstring          session_id,
        charstring          session_version, 
        charstring          net_type,
        charstring          addr_type,
        charstring          addr
      }

      type set of SDP_contact_tel SDP_phone_list;

      type record SDP_Message{
        integer             protocol_version,
        SDP_Origin          origin,
        charstring          session_name,
        charstring          information optional,
        charstring          uri optional,
        SDP_email_list      emails optional,
        SDP_phone_list      phone_numbers optional,
        SDP_connection      connection optional,
		SDP_bandwidth_list  bandwidth optional,
        SDP_time_list       times,
        SDP_timezone_list   timezone_adjustments optional,
                SDP_key             key optional,
SDP_attribute_list  attributes optional,
        SDP_media_desc_list media_list optional
      }

type charstring XmlBody;

    type port SipPort message {
      inout 
        Request,
        REGISTER_Request,
        INVITE_Request,
        OPTIONS_Request,
        BYE_Request,
        CANCEL_Request,
        ACK_Request,
        PRACK_Request,
        NOTIFY_Request,
        SUBSCRIBE_Request,
        PUBLISH_Request,
        UPDATE_Request,
        REFER_Request,
        MESSAGE_Request,
        INFO_Request,
        Response      
    };  
    
