package acse import ( "dim13.org/asn1/csta" "github.com/dim13/asn1" ) // 2.2.0.0.1 // A-ASSOCIATE Request // Application Constructed implicit 0 type AARQ struct { asn1.Tag `asn1:"application,tag:0"` ProtocolVersion asn1.BitString `asn1:"tag:0"` // 0 implicit BitString ApplicationContextName asn1.ObjectIdentifier `asn1:"tag:1,explicit"` // 1 UserInformation UserInformation `asn1:"tag:30,optional"` // 30 implicit } type UserInformation struct { External `asn1:"instance"` } // A-ASSOCIATE Result (Result == 0) // A-REJECT (Result == 1) // Application Constructed implicit 1 type AARE struct { asn1.Tag `asn1:"application,tag:1"` ProtocolVersion asn1.BitString `asn1:"tag:0"` // 0 implicit BitString ApplicationContextName asn1.ObjectIdentifier `asn1:"tag:1,explicit"` // 1 Result int `asn1:"tag:2,explicit"` // 2 ResultSourceDiagnostic AcseServiceUser `asn1:"tag:3,explicit"` // 3 UserInformation UserInformation `asn1:"tag:30,optional"` // 30 implicit } type AcseServiceUser struct { asn1.Tag `asn1:"tag:1"` Reason int } // A-RELEASE Request // Application Constructed implicit 2 type RLRQ struct { asn1.Tag `asn1:"application,tag:2"` } // A-RELEASE Result // Application Constructed implicit 3 type RLRE struct { asn1.Tag `asn1:"application,tag:3"` } // ABRT Source const ( ABRTServiceUser = iota ABRTServiceProvider ) // A-ABORT // Application Constructed implicit 4 type ABRT struct { asn1.Tag `asn1:"application,tag:4"` AbortSource int `asn1:"tag:0"` // 0 implicit } type External struct { DirectReference asn1.ObjectIdentifier `asn1:"optional"` Encoding csta.ACSEUserInformationForCSTA `asn1:"tag:0,optional"` } var Version1 = asn1.BitString{Bytes: []byte{0x80}, BitLength: 1} func Associate() ([]byte, error) { aarq := AARQ{ ProtocolVersion: Version1, ApplicationContextName: csta.CSTA, UserInformation: UserInformation{ External{ DirectReference: csta.OID, Encoding: csta.ACSEUserInformationForCSTA{ csta.NewDefinition{ CSTAVersion: csta.Version5, }, }, }, }, } return asn1.Marshal(aarq) } const ( AssociateResultAccepted = iota AssociateResultRejectedPermanent AssociateResultRejectedTransient ) func AssociateResult(b []byte) (int, error) { aare := AARE{} _, err := asn1.Unmarshal(b, &aare) if err != nil { return 0, err } return aare.Result, nil }