Class SMSProtocolId

  • All Implemented Interfaces:
    DataObject, FastSerializable, Serializable

    public final class SMSProtocolId
    extends AbstractLazyEncodedNamedInteger<SMSProtocolId.EncodedValue>
    implements FastSerializable
    Class SMSProtocolId represents TP-PID protocol identifiers, which appear as one octet within SMSTPDUs.

    The API offered by this class is as if the type were defined in ASN.1 as follows.

     SMSProtocolId ::= CHOICE {
         applicationLayerProtocol ApplicationLayerProtocol,
         telematicDevice          TelematicDevice,
         transferLayerProtocol    TransferLayerProtocol,
         serviceCentreProtocol    ServiceCentreProtocol
     }
     
    The class takes care of encoding the field values into a byte-array and decoding field values from a byte-array, the encoded representation being as tabulated below.

    Data Encoding - based on 3GPP TS 23.040 V9.0.0 (2009-06) §9.2.3.9 pp65-67
    76543210
    Octet 0Tag discriminates...
    case 0Telematic interworking? discriminates...
    case 0000Application layer protocol
    case 1001Telematic device
    case 101Transfer layer protocol
    case 210Reserved
    case 311Service centre protocol

    Field names ending in ? are booleans: 1 for true, 0 for false.

    The tag is a discriminant for how the following six bits are decoded. The Telematic Interworking flag is a discriminant for how the following five bits are decoded. On encoding, each discriminant is automatically set according to which alternative is encoded. A SMSProtocolId contains exactly one of Application Layer Protocol, Telematic Device, Transfer Layer Protocol or Service Centre Protocol.

    See Also:
    Serialized Form
    • Constructor Detail

      • SMSProtocolId

        public SMSProtocolId()
        Constructs a new SMSProtocolId object with no fields set.
      • SMSProtocolId

        public SMSProtocolId​(byte[] data)
        Constructs a new SMSProtocolId object from network-encoded data. The data is not decoded and might not be decodable.
        Parameters:
        data - network-encoded data
        Throws:
        NullPointerException - if data is null
      • SMSProtocolId

        public SMSProtocolId​(byte[] data,
                             int start,
                             int len)
        Constructs a new SMSProtocolId object from part of network-encoded data. The part starts at index start and is len bytes long. The data is not decoded and might not be decodable.
        Parameters:
        data - network-encoded data
        start - starting offset of network-encoded data in byte array
        len - default length if not predictable
        Throws:
        NullPointerException - if data is null
        IllegalArgumentException - if len is negative
      • SMSProtocolId

        public SMSProtocolId​(DataInput in)
                      throws IOException
        Constructs a new SMSProtocolId object from data deserialized from a stream that was written by toStream(DataOutput).
        Parameters:
        in - the stream to read from
        Throws:
        EOFException - if reading is pre-empted by end-of-file
        IOException - if the data cannot be read
      • SMSProtocolId

        public SMSProtocolId​(SMSProtocolId.ApplicationLayerProtocol applicationLayerProtocol)
        Constructs a new SMSProtocolId object from the given ApplicationLayerProtocol.
        Parameters:
        applicationLayerProtocol - ApplicationLayerProtocol
        Throws:
        IllegalArgumentException - if any argument is not within its specified bounds
      • SMSProtocolId

        public SMSProtocolId​(SMSProtocolId.TelematicDevice telematicDevice)
        Constructs a new SMSProtocolId object from the given TelematicDevice.
        Parameters:
        telematicDevice - TelematicDevice
        Throws:
        IllegalArgumentException - if any argument is not within its specified bounds
      • SMSProtocolId

        public SMSProtocolId​(SMSProtocolId.TransferLayerProtocol transferLayerProtocol)
        Constructs a new SMSProtocolId object from the given TransferLayerProtocol.
        Parameters:
        transferLayerProtocol - TransferLayerProtocol
        Throws:
        IllegalArgumentException - if any argument is not within its specified bounds
      • SMSProtocolId

        public SMSProtocolId​(SMSProtocolId.ServiceCentreProtocol serviceCentreProtocol)
        Constructs a new SMSProtocolId object from the given ServiceCentreProtocol.
        Parameters:
        serviceCentreProtocol - ServiceCentreProtocol
        Throws:
        IllegalArgumentException - if any argument is not within its specified bounds
    • Method Detail

      • isApplicationLayerProtocolChosen

        public boolean isApplicationLayerProtocolChosen()
                                                 throws DecodeException
        Tests whether the choice is applicationLayerProtocol.
        Returns:
        true if chosen, false if not
        Throws:
        DecodeException - if encoded state cannot be decoded
      • isTelematicDeviceChosen

        public boolean isTelematicDeviceChosen()
                                        throws DecodeException
        Tests whether the choice is telematicDevice.
        Returns:
        true if chosen, false if not
        Throws:
        DecodeException - if encoded state cannot be decoded
      • isTransferLayerProtocolChosen

        public boolean isTransferLayerProtocolChosen()
                                              throws DecodeException
        Tests whether the choice is transferLayerProtocol.
        Returns:
        true if chosen, false if not
        Throws:
        DecodeException - if encoded state cannot be decoded
      • isServiceCentreProtocolChosen

        public boolean isServiceCentreProtocolChosen()
                                              throws DecodeException
        Tests whether the choice is serviceCentreProtocol.
        Returns:
        true if chosen, false if not
        Throws:
        DecodeException - if encoded state cannot be decoded
      • getApplicationLayerProtocol

        public SMSProtocolId.ApplicationLayerProtocol getApplicationLayerProtocol()
                                                                           throws DecodeException
        Gets the value of the application layer protocol.
        Returns:
        ApplicationLayerProtocol representation of the application layer protocol, if choice is the application layer protocol, else null
        Throws:
        DecodeException - if encoded state cannot be decoded
      • getTelematicDevice

        public SMSProtocolId.TelematicDevice getTelematicDevice()
                                                         throws DecodeException
        Gets the value of the telematic device.
        Returns:
        TelematicDevice representation of the telematic device, if choice is the telematic device, else null
        Throws:
        DecodeException - if encoded state cannot be decoded
      • getTransferLayerProtocol

        public SMSProtocolId.TransferLayerProtocol getTransferLayerProtocol()
                                                                     throws DecodeException
        Gets the value of the transfer layer protocol.
        Returns:
        TransferLayerProtocol representation of the transfer layer protocol, if choice is the transfer layer protocol, else null
        Throws:
        DecodeException - if encoded state cannot be decoded
      • getServiceCentreProtocol

        public SMSProtocolId.ServiceCentreProtocol getServiceCentreProtocol()
                                                                     throws DecodeException
        Gets the value of the service centre protocol.
        Returns:
        ServiceCentreProtocol representation of the service centre protocol, if choice is the service centre protocol, else null
        Throws:
        DecodeException - if encoded state cannot be decoded
      • copyOf

        public static SMSProtocolId copyOf​(SMSProtocolId from)
        Creates a new object of this type, cloning the values of common fields from the given object of any subclass of the same base type.
        Parameters:
        from - the object from which to copy
        Returns:
        SMSProtocolId
      • getFieldAccessors

        public static FieldAccessor[] getFieldAccessors()
        Gets a new array of the accessors for fields of this type.
        Returns:
        FieldAccessor[]
      • getFieldsMap

        public Map<String,​Object> getFieldsMap​(boolean withAbsents)
        Gets a Map from :discriminant-name to field-value. If choice is not set, returns a Map from : to AbstractFieldsObject.FIELD_UNINITIALISED. For a field of primitive type, the field-value is boxed. For a field of String type, the encoded form is used if the String cannot be decoded. For a type that represents an OCTET STRING that cannot be decoded, a map from "encodedValue:" to the byte array value is returned.
        Specified by:
        getFieldsMap in class AbstractFieldsObject
        Parameters:
        withAbsents - the value of this parameter is ignored
        Returns:
        Map from :discriminant-name to field-value
      • encodedIsInvalid

        protected boolean encodedIsInvalid()
        Determines whether the encoded form is invalid.
        Returns:
        boolean
      • getByteArrayForm

        public byte[] getByteArrayForm()
                                throws EncodeException
        Gets the byte array encoded form. The size of the array is the least of 1, 2, 4, or 8 according to the type's bounds. The most significant byte of the numeric value is in the lowest indexed byte of the array.
        Returns:
        byte array form
        Throws:
        EncodeException - if encoding fails
      • getContainedLength

        public static int getContainedLength​(byte[] data,
                                             int start,
                                             int len)
        Determines the length of the encoded value that commences at offset start in the given data. The value is not fully decoded and might not be decodable. If the encoded value ends with a filling field, then the given len is returned. If the encoded value is so currupt that its length cannot be determined, then 0 is returned.
        Parameters:
        data - network-encoded data
        start - index into data where value commences
        len - length in data to be considered
        Returns:
        length of encoded value, or 0 if not decodable
        Throws:
        NullPointerException - if data is null