.TITLE SIP_TBL.MAR .IDENT /X-1/ ;++ ; FACILITY: StarLet SIP server (Session Initation Protocol under OpenVMS) ; ; FUNCTIONAL DESCRIPTION: ; ; This module contains a parser table used by LIB$TPARSE routine to ; performs parameters parsing and extracting a selected number of fields. ; ; ENVIRONMENT: OpenVMS ; ; AUTHOR: Ruslan R. Laishev, CREATION-DATE: 27-APR-2009 ; ; Example of SIP message: ; ; REGISTER sip:dtv1.deltatel.ru SIP/2.0 ; Via: SIP/2.0/UDP 172.16.1.24:5487;branch=z9hG4bK-d8754z-200cd651ac16bc60-1---d8754z-;rport ; Max-Forwards: 70 ; Contact: ; To: "Ruslan R. Laishev" ; From: "Ruslan R. Laishev";tag=25184b1f ; Call-ID: OTMzN2I4MTc1MDBhMTViYjZlMTVjZGZlMjM5ODEyODY. ; CSeq: 10 REGISTER ; Expires: 3600 ; Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO ; User-Agent: X-Lite release 1100l stamp 47546 ; Content-Length: 0 ; ; ; MODIFIED BY: ; ; 20-JAN-2010 RRL Added reconition of the Allow: INFO, MESSAGE ... ; 28-JAN-2010 RRL Added PUBLISH ; ; ; ;-- ; .PSECT IMPURE,WRT,NOEXE $TPADEF ;TParse stuff .LIBRARY /SIPDEF.MLB/ .EXTRN _SIP_PARSEMSG .EXTRN _SIP_PARSEFLD .EXTRN _SIP_SUBFLD .EXTRN _SIP_PARSEFLDVAL .EXTRN _SIP_ORARG SEPA = 59 ; It's just ";" CR = 10 ; CR LF = 13 ; LF MINUS = 45 ; - QUOTE = 34 ; " EQUAL = 61 ; = COMMA = 44 ; , COLON = 58 ; : .SBTTL Parser State Table $SIPDEF $INIT_STATE UFD_STATE,UFD_KEY $STATE START ; ; SIP Methods ; $TRAN 'SIP',FLDS, _SIP_PARSEMSG,,,SIP$MT_STATUS $TRAN 'INVITE',FLDS, _SIP_PARSEMSG,,,SIP$MT_INVITE $TRAN 'REINVITE',FLDS, _SIP_PARSEMSG,,,SIP$MT_REINVITE $TRAN 'REGISTER',FLDS, _SIP_PARSEMSG,,,SIP$MT_REGISTER $TRAN 'ACK',FLDS, _SIP_PARSEMSG,,,SIP$MT_ACK $TRAN 'CANCEL',FLDS, _SIP_PARSEMSG,,,SIP$MT_CANCEL $TRAN 'BYE',FLDS, _SIP_PARSEMSG,,,SIP$MT_BYE $TRAN 'OPTIONS',FLDS, _SIP_PARSEMSG,,,SIP$MT_OPTIONS $TRAN 'INFO',FLDS, _SIP_PARSEMSG,,,SIP$MT_INFO $TRAN 'NOTIFY',FLDS, _SIP_PARSEMSG,,,SIP$MT_NOTIFY $TRAN 'SUBSCRIBE',FLDS, _SIP_PARSEMSG,,,SIP$MT_SUBSCRIBE $TRAN 'UNSUBSCRIBE',FLDS, _SIP_PARSEMSG,,,SIP$MT_UNSUBSCRIBE $TRAN 'UPDATE',FLDS, _SIP_PARSEMSG,,,SIP$MT_UPDATE $TRAN 'MESSAGE',FLDS, _SIP_PARSEMSG,,,SIP$MT_MESSAGE $TRAN 'REFER',FLDS, _SIP_PARSEMSG,,,SIP$MT_REFER $TRAN 'PACK',FLDS, _SIP_PARSEMSG,,,SIP$MT_PACK $TRAN 'PUBLISH',FLDS, _SIP_PARSEMSG,,,SIP$MT_PUBLISH $TRAN CR, START $TRAN LF, START $TRAN TPA$_EOS, TPA$_EXIT $TRAN TPA$_ANY, TPA$_FAIL ; ; An incoming message type has been recognized, now ; we recongnizing fields ; $STATE FLDS $TRAN TPA$_EOS, TPA$_EXIT $TRAN CR, FLDS $TRAN LF, FLDS $TRAN 'Via',ARGV, _SIP_PARSEFLD,,,SIP$FLD_VIA $TRAN 'Contact',ARGS, _SIP_PARSEFLD,,,SIP$FLD_CONTACT $TRAN 'To',ARGS, _SIP_PARSEFLD,,,SIP$FLD_TO $TRAN 'From',ARGS, _SIP_PARSEFLD,,,SIP$FLD_FROM $TRAN 'CSeq',ARGS, _SIP_PARSEFLD,,,SIP$FLD_CSEQ $TRAN 'Expires',ARGS, _SIP_PARSEFLD,,,SIP$FLD_EXPIRES $TRAN 'Allow',ALLOW, _SIP_PARSEFLD,,,SIP$FLD_ALLOW $TRAN 'Subject',ARGS, _SIP_PARSEFLD,,,SIP$FLD_SUBJECT $TRAN 'Event',ARGS, _SIP_PARSEFLD,,,SIP$FLD_EVENT $TRAN 'Accept',ARGS, _SIP_PARSEFLD,,,SIP$FLD_ACCEPT $TRAN 'Authorization',ARGA, _SIP_PARSEFLD,,,SIP$FLD_AUTHORIZATION $TRAN 'User',FLDS2 ; User-Agent $TRAN 'Max',FLDS2 ; Max-Forwards $TRAN 'Content',FLDS2 ; Content-Length/Encoding $TRAN 'Call',FLDS2 ; Call-ID/Info $TRAN 'WWW',FLDS2 ; WWW-Authenticate $TRAN 'subscription',FLDS2 ; Subscription-State $TRAN 'Subscription',FLDS2 ; Subscription-State $TRAN TPA$_SYMBOL,ARGS, _SIP_PARSEFLD,,,SIP$FLD_UNDEF $STATE FLDS2 $TRAN MINUS,FLDS3 $TRAN TPA$_ANY, TPA$_FAIL $STATE FLDS3 $TRAN 'state',ARGS, _SIP_PARSEFLD,,,SIP$FLD_SUBSTATE $TRAN 'State',ARGS, _SIP_PARSEFLD,,,SIP$FLD_SUBSTATE $TRAN 'Agent',FLDS, _SIP_PARSEFLD,,,SIP$FLD_USERAGENT $TRAN 'Forwards',FLDS, _SIP_PARSEFLD,,,SIP$FLD_MAXFORWD $TRAN 'Length',FLDS, _SIP_PARSEFLD,,,SIP$FLD_CONTLEN $TRAN 'Encoding',FLDS, _SIP_PARSEFLD,,,SIP$FLD_ENCODING $TRAN 'Type',FLDS, _SIP_PARSEFLD,,,SIP$FLD_TYPE $TRAN 'ID',FLDS, _SIP_PARSEFLD,,,SIP$FLD_CALLID $TRAN 'Info',FLDS, _SIP_PARSEFLD,,,SIP$FLD_CALLINFO $TRAN 'Authenticate',FLDS, _SIP_PARSEFLD,,,SIP$FLD_WWWAUTH $TRAN TPA$_SYMBOL,ARGS, _SIP_PARSEFLD,,,SIP$FLD_UNDEF $TRAN TPA$_EOS, TPA$_EXIT ; ; Parsing Via ; Via: SIP/2.0/UDP 172.16.0.4:5060;branch=z9hG4bK-d88538e1771bcac7a892fbe19c6aa6d2,SIP/2.0/UDP ; 172.16.1.24:5060;branch=z9hG4bK-d8754z- ; $STATE ARGV $TRAN TPA$_EOS, TPA$_EXIT $TRAN CR, FLDS $TRAN LF, FLDS $TRAN SEPA, ARGV $TRAN COMMA, ARGV, _SIP_PARSEFLD,,,SIP$FLD_VIA $TRAN 'branch',ARGV, _SIP_PARSEARG,,,SIP$ARG_BRANCH $TRAN 'rport',ARGV, _SIP_PARSEARG,,,SIP$ARG_RPORT $TRAN 'rinstance',ARGV, _SIP_PARSEARG,,,SIP$ARG_RINSTANCE $TRAN 'tag',ARGV, _SIP_PARSEARG,,,SIP$ARG_TAG $TRAN 'expires',ARGV, _SIP_PARSEARG,,,SIP$ARG_EXPIRES $TRAN 'received',ARGV, _SIP_PARSEARG,,,SIP$ARG_RECEIVED $TRAN 'line',ARGV, _SIP_PARSEARG,,,SIP$ARG_LINE $TRAN TPA$_SYMBOL,ARGV, _SIP_PARSEARG,,,SIP$ARG_UNDEF $TRAN TPA$_ANY, TPA$_FAIL ; ; Arguments/tags/parameters of a Field ; $STATE ARGS $TRAN TPA$_EOS, TPA$_EXIT $TRAN SEPA, ARGS $TRAN CR, FLDS $TRAN LF, FLDS $TRAN 'branch',ARGS, _SIP_PARSEARG,,,SIP$ARG_BRANCH $TRAN 'rport',ARGS, _SIP_PARSEARG,,,SIP$ARG_RPORT $TRAN 'rinstance',ARGS, _SIP_PARSEARG,,,SIP$ARG_RINSTANCE $TRAN 'tag',ARGS, _SIP_PARSEARG,,,SIP$ARG_TAG $TRAN 'expires',ARGS, _SIP_PARSEARG,,,SIP$ARG_EXPIRES $TRAN 'received',ARGS, _SIP_PARSEARG,,,SIP$ARG_RECEIVED $TRAN 'active',ARGS, _SIP_PARSEARG,,,SIP$ARG_ACTIVE $TRAN 'transport',ARGS, _SIP_PARSEARG,,,SIP$ARG_TRANSPORT $TRAN 'line',ARGV, _SIP_PARSEARG,,,SIP$ARG_LINE $TRAN TPA$_SYMBOL,ARGS, _SIP_PARSEARG,,,SIP$ARG_UNDEF $TRAN TPA$_ANY, FLDS ; ; Special parsing of Authorization arguments ; $STATE ARGA $TRAN TPA$_EOS, TPA$_EXIT $TRAN CR, FLDS $TRAN LF, FLDS $TRAN COMMA, ARGA $TRAN TPA$_BLANK,ARGA $TRAN 'Digest',ARGA, _SIP_PARSEARG,,,SIP$ARG_DIGEST $TRAN 'nonce',ARGA, _SIP_PARSEARG,,,SIP$ARG_NONCE $TRAN 'username',ARGA, _SIP_PARSEARG,,,SIP$ARG_USERNAME $TRAN 'realm',ARGA, _SIP_PARSEARG,,,SIP$ARG_REALM $TRAN 'uri',ARGA, _SIP_PARSEARG,,,SIP$ARG_URI $TRAN 'response',ARGA, _SIP_PARSEARG,,,SIP$ARG_RESPONSE $TRAN 'cnonce',ARGA, _SIP_PARSEARG,,,SIP$ARG_CNONCE $TRAN 'nc',ARGA, _SIP_PARSEARG,,,SIP$ARG_NC $TRAN 'qop',ARGA, _SIP_PARSEARG,,,SIP$ARG_QOP $TRAN 'algorithm',ARGA, _SIP_PARSEARG,,,SIP$ARG_ALGORITHM $TRAN TPA$_SYMBOL,ARGA, _SIP_PARSEARG,,,SIP$ARG_UNDEF $TRAN TPA$_ANY, FLDS ; ; Special handling: ; Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO ; $STATE ALLOW $TRAN TPA$_EOS, TPA$_EXIT $TRAN CR, FLDS $TRAN LF, FLDS $TRAN TPA$_BLANK, ALLOW $TRAN 'INVITE',ALLOW, _SIP_ORARG,,,SIP$MT_INVITE $TRAN 'REINVITE',ALLOW, _SIP_ORARG,,,SIP$MT_REINVITE $TRAN 'REGISTER',ALLOW, _SIP_ORARG,,,SIP$MT_REGISTER $TRAN 'ACK',ALLOW, _SIP_ORARG,,,SIP$MT_ACK $TRAN 'CANCEL',ALLOW, _SIP_ORARG,,,SIP$MT_CANCEL $TRAN 'BYE',ALLOW, _SIP_ORARG,,,SIP$MT_BYE $TRAN 'OPTIONS',ALLOW, _SIP_ORARG,,,SIP$MT_OPTIONS $TRAN 'INFO',ALLOW, _SIP_ORARG,,,SIP$MT_INFO $TRAN 'NOTIFY',ALLOW, _SIP_ORARG,,,SIP$MT_NOTIFY $TRAN 'SUBSCRIBE',ALLOW, _SIP_ORARG,,,SIP$MT_SUBSCRIBE $TRAN 'UNSUBSCRIBE',ALLOW, _SIP_ORARG,,,SIP$MT_UNSUBSCRIBE $TRAN 'UPDATE',ALLOW, _SIP_ORARG,,,SIP$MT_UPDATE $TRAN 'MESSAGE',ALLOW, _SIP_ORARG,,,SIP$MT_MESSAGE $TRAN 'REFER',ALLOW, _SIP_ORARG,,,SIP$MT_REFER $TRAN 'PACK',ALLOW, _SIP_ORARG,,,SIP$MT_PACK $TRAN TPA$_ANY, ALLOW $END_STATE .END