public final class SMSStatusReport extends SMSTPDUWithData implements FastSerializable
The API offered by this class is as if the type were specified in ASN.1 as follows.
SMSStatusReport ::= SEQUENCE { onlyHeader NULL OPTIONAL, userDataHeaderIndicator UserDataHeaderIndicator, statusReportQualifier BOOLEAN, moreMessagesToSend MoreMessagesToSend, loopPrevention BOOLEAN OPTIONAL, messageReference INTEGER, recipientAddress SMSAddress, serviceCentreTimeStamp SMSTimeStamp, dischargeTime SMSTimeStamp, status INTEGER, protocolId SMSProtocolId OPTIONAL, dataCodingScheme SMSDataCodingScheme OPTIONAL, userDataLength INTEGER OPTIONAL, userData OCTET STRING OPTIONAL }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.2.3 pp60-61 | ||||||||
---|---|---|---|---|---|---|---|---|
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
1 octet | 0 | User data header indicator | Status report qualifier? | 0 | Loop prevention? | More messages to send | Message type 10 | |
1 octet | Message reference | |||||||
2-12 octets | Recipient address | |||||||
7 octets | Service center time stamp | |||||||
7 octets | Discharge time | |||||||
1 octet | Status | |||||||
0-1 octets | 0 | 0 | 0 | 0 | 0 | Has user data length? | Has data coding scheme? | Has protocol identifier? |
0-1 octets | Protocol id | |||||||
0-1 octets | Data coding scheme | |||||||
0-1 octets | User data length | |||||||
0-143 octets | User data |
Field loopPrevention is optional because that bit was spare prior to release 6 of 3GPP TS 23.040.
Modifier and Type | Class and Description |
---|---|
static class |
SMSStatusReport.MoreMessagesToSend
Enumeration of More Messages To Send constants.
|
SMSTPDUWithData.UserDataHeaderIndicator
SMSTPDU.Type
DataCodingScheme_value, OnlyHeader_present, OnlyHeader_value, ProtocolId_value, UserData_value, UserDataHeaderIndicator_value, UserDataLength_present, UserDataLength_value
isDecoded
encoded
FIELD_ABSENT, FIELD_UNINITIALISED
Constructor and Description |
---|
SMSStatusReport()
Constructs a new SMSStatusReport object with no fields set.
|
SMSStatusReport(byte[] data)
Constructs a new SMSStatusReport object from network-encoded data.
|
SMSStatusReport(byte[] data,
int start,
int len)
Constructs a new SMSStatusReport object from part of network-encoded data.
|
SMSStatusReport(DataInput in)
Constructs a new SMSStatusReport object from data deserialized from a stream that was written by
toStream(DataOutput) . |
Modifier and Type | Method and Description |
---|---|
void |
checkFieldsSet()
Checks that all mandatory fields are present.
|
SMSStatusReport |
clone()
Constructs a copy of this object and everything reachable from it.
|
static SMSStatusReport |
copyOf(SMSStatusReport 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.
|
protected void |
decode()
Computes the decoded form from the encoded form.
|
static SMSStatusReport |
decodeRPUIHeaderStatusReport(byte[] message)
Constructs a new SMSStatusReport with no data (header only) from the given data.
|
static SMSStatusReport |
decodeRPUIHeaderStatusReport(byte[] message,
int start,
int len)
Constructs a new SMSStatusReport with no data (header only) from the given data.
|
protected void |
encode()
Computes the encoded form from the decoded form.
|
protected boolean |
encodedIsInvalid()
Determines whether the encoded form is invalid.
|
static byte[] |
encodeRPUIHeaderStatusReport(SMSStatusReport smsStatusReport)
Encodes the given SMSStatusReport for sending as the payload of a SM-RP-UIHeader message.
|
int |
getContainedLength(byte[] data,
int start,
int len)
Determines the length of the encoded value that commences at offset
start in the given data . |
SMSDataCodingScheme |
getDataCodingScheme()
Gets the value of the coding scheme within the user data.
|
SMSTimeStamp |
getDischargeTime()
Gets the value of time associated with a particular TP-ST outcome.
|
byte[] |
getEncodedForm()
Gets the encoded form.
|
static FieldAccessor[] |
getFieldAccessors()
Gets a new array of the accessors for fields of this type.
|
Map<String,Object> |
getFieldsMap(boolean withAbsents)
Gets a Map from field-name to field-value for the fields of a sequence.
|
boolean |
getLoopPrevention()
Gets the value of whether SMS applications should inhibit forwarding or automatic message generation that could cause infinite looping.
|
int |
getMessageReference()
Gets the value of identifies the previously submitted SMSSubmit or SMSCommand.
|
SMSStatusReport.MoreMessagesToSend |
getMoreMessagesToSend()
Gets the value of whether there are no more messages to send.
|
SMSProtocolId |
getProtocolId()
Gets the value of identifies the above layer protocol.
|
SMSAddress |
getRecipientAddress()
Gets the value of recipient of the previously submitted mobile originated short message.
|
SMSTimeStamp |
getServiceCentreTimeStamp()
Gets the value of time when the SC received the previously sent SMSSUBMIT.
|
int |
getStatus()
Gets the value of status of the previously sent mobile originated short message.
|
boolean |
getStatusReportQualifier()
Gets the value of whether the previously submitted TPDU was a SMSSubmit or SMSCommand.
|
SMSTPDU.Type |
getType()
Return the message type of this PDU
|
byte[] |
getUserData()
Gets the value of the user data.
|
SMSTPDUWithData.UserDataHeaderIndicator |
getUserDataHeaderIndicator()
Gets the value of whether user data contains a header.
|
int |
getUserDataLength()
Gets the value of the length of the user data.
|
boolean |
hasDischargeTime()
Tests whether the field DischargeTime has a value.
|
boolean |
hasLoopPrevention()
Tests whether the field LoopPrevention has a value.
|
boolean |
hasMessageReference()
Tests whether the field MessageReference has a value.
|
boolean |
hasMoreMessagesToSend()
Tests whether the field MoreMessagesToSend has a value.
|
boolean |
hasRecipientAddress()
Tests whether the field RecipientAddress has a value.
|
boolean |
hasServiceCentreTimeStamp()
Tests whether the field ServiceCentreTimeStamp has a value.
|
boolean |
hasStatus()
Tests whether the field Status has a value.
|
boolean |
hasStatusReportQualifier()
Tests whether the field StatusReportQualifier has a value.
|
static SMSStatusReport |
newInstanceOnlyHeader()
Factory method that creates an instance for representing only a header (no data).
|
SMSStatusReport |
setDataCodingScheme(SMSDataCodingScheme value)
Sets the value of the coding scheme within the user data.
|
SMSStatusReport |
setDischargeTime(SMSTimeStamp value)
Sets the value of time associated with a particular TP-ST outcome.
|
SMSStatusReport |
setLoopPrevention(boolean value)
Sets the value of whether SMS applications should inhibit forwarding or automatic message generation that could cause infinite looping.
|
SMSStatusReport |
setLoopPreventionPresent(boolean flag)
Sets the presence or absence of the field LoopPrevention.
|
SMSStatusReport |
setMessageReference(int value)
Sets the value of identifies the previously submitted SMSSubmit or SMSCommand.
|
SMSStatusReport |
setMessageReferencePresent(boolean flag)
Sets the presence or absence of the field MessageReference.
|
SMSStatusReport |
setMoreMessagesToSend(SMSStatusReport.MoreMessagesToSend value)
Sets the value of whether there are no more messages to send.
|
SMSStatusReport |
setProtocolId(SMSProtocolId value)
Sets the value of identifies the above layer protocol.
|
void |
setReadOnly()
Sets this and all its fields to be immutable.
|
SMSStatusReport |
setRecipientAddress(SMSAddress value)
Sets the value of recipient of the previously submitted mobile originated short message.
|
SMSStatusReport |
setServiceCentreTimeStamp(SMSTimeStamp value)
Sets the value of time when the SC received the previously sent SMSSUBMIT.
|
SMSStatusReport |
setStatus(int value)
Sets the value of status of the previously sent mobile originated short message.
|
SMSStatusReport |
setStatusPresent(boolean flag)
Sets the presence or absence of the field Status.
|
SMSStatusReport |
setStatusReportQualifier(boolean value)
Sets the value of whether the previously submitted TPDU was a SMSSubmit or SMSCommand.
|
SMSStatusReport |
setStatusReportQualifierPresent(boolean flag)
Sets the presence or absence of the field StatusReportQualifier.
|
SMSStatusReport |
setUserData(byte[] value)
Sets the value of the user data.
|
SMSStatusReport |
setUserDataHeaderIndicator(SMSTPDUWithData.UserDataHeaderIndicator value)
Sets the value of whether user data contains a header.
|
SMSStatusReport |
setUserDataLength(int value)
Sets the value of the length of the user data.
|
void |
toStream(DataOutput out)
Serializes this object to a stream in a form suitable for reading by
SMSStatusReport(DataInput) . |
checkUserDataConstraints, getUserDataHeader, getUserDataString, hasDataCodingScheme, hasOnlyHeader, hasProtocolId, hasUserData, hasUserDataHeaderIndicator, hasUserDataLength, setOnlyHeaderPresent, setUserDataLengthPresent, setUserDataString, setUserDataString, setUserDataString, setUserDataString
decodeRPAck, decodeRPAck, decodeRPError, decodeRPError, decodeRPMOData, decodeRPMOData, decodeRPMTData, decodeRPMTData, encodeRPAck, encodeRPError, encodeRPMOData, encodeRPMTData
checkDecode, checkModifyAndDecode
equals, hashCode, toString
checkModify, isReadOnly
public SMSStatusReport()
public SMSStatusReport(byte[] data)
data
- network-encoded dataNullPointerException
- if data is nullpublic SMSStatusReport(byte[] data, int start, int len)
start
and is len
bytes long.
The data is not decoded and might not be decodable.data
- network-encoded datastart
- starting offset of network-encoded data in byte arraylen
- default length if not predictableNullPointerException
- if data is nullIllegalArgumentException
- if len is negativepublic SMSStatusReport(DataInput in) throws IOException
toStream(DataOutput)
.in
- the stream to read fromEOFException
- if reading is pre-empted by end-of-fileIOException
- if the data cannot be readpublic void toStream(DataOutput out) throws IOException
SMSStatusReport(DataInput)
.toStream
in interface FastSerializable
out
- the stream to write toIOException
- if an I/O error occurspublic boolean hasStatusReportQualifier() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic SMSStatusReport setStatusReportQualifierPresent(boolean flag) throws IllegalStateException
flag
- whether the field should be marked as presentIllegalStateException
- if this instance has been marked as read-onlypublic boolean hasMoreMessagesToSend() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic boolean hasLoopPrevention() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic SMSStatusReport setLoopPreventionPresent(boolean flag) throws IllegalStateException
flag
- whether the field should be marked as presentIllegalStateException
- if this instance has been marked as read-onlypublic boolean hasMessageReference() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic SMSStatusReport setMessageReferencePresent(boolean flag) throws IllegalStateException
flag
- whether the field should be marked as presentIllegalStateException
- if this instance has been marked as read-onlypublic boolean hasRecipientAddress() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic boolean hasServiceCentreTimeStamp() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic boolean hasDischargeTime() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic boolean hasStatus() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic SMSStatusReport setStatusPresent(boolean flag) throws IllegalStateException
flag
- whether the field should be marked as presentIllegalStateException
- if this instance has been marked as read-onlypublic void checkFieldsSet() throws EncodeException
checkFieldsSet
in class SMSTPDUWithData
EncodeException
- if any mandatory field is not presentpublic SMSTPDUWithData.UserDataHeaderIndicator getUserDataHeaderIndicator() throws DecodeException
getUserDataHeaderIndicator
in class SMSTPDUWithData
DecodeException
- if encoded state cannot be decodedpublic SMSProtocolId getProtocolId() throws DecodeException
getProtocolId
in class SMSTPDUWithData
DecodeException
- if encoded state cannot be decodedpublic SMSDataCodingScheme getDataCodingScheme() throws DecodeException
getDataCodingScheme
in class SMSTPDUWithData
DecodeException
- if encoded state cannot be decodedpublic int getUserDataLength() throws DecodeException
getUserDataLength
in class SMSTPDUWithData
DecodeException
- if encoded state cannot be decodedpublic byte[] getUserData() throws DecodeException
getUserData
in class SMSTPDUWithData
DecodeException
- if encoded state cannot be decodedpublic boolean getStatusReportQualifier() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic SMSStatusReport.MoreMessagesToSend getMoreMessagesToSend() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic boolean getLoopPrevention() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic int getMessageReference() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic SMSAddress getRecipientAddress() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic SMSTimeStamp getServiceCentreTimeStamp() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic SMSTimeStamp getDischargeTime() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic int getStatus() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic SMSStatusReport setUserDataHeaderIndicator(SMSTPDUWithData.UserDataHeaderIndicator value) throws IllegalStateException
setUserDataHeaderIndicator
in class SMSTPDUWithData
value
- UserDataHeaderIndicator representation of whether user data contains a headerIllegalStateException
public SMSStatusReport setProtocolId(SMSProtocolId value) throws IllegalStateException
setProtocolId
in class SMSTPDUWithData
value
- SMSProtocolId representation of identifies the above layer protocolIllegalStateException
public SMSStatusReport setDataCodingScheme(SMSDataCodingScheme value) throws IllegalStateException
setDataCodingScheme
in class SMSTPDUWithData
value
- SMSDataCodingScheme representation of the coding scheme within the user dataIllegalStateException
public SMSStatusReport setUserDataLength(int value) throws IllegalStateException
setUserDataLength
in class SMSTPDUWithData
value
- int representation of the length of the user dataIllegalStateException
public SMSStatusReport setUserData(byte[] value) throws IllegalStateException
setUserData
in class SMSTPDUWithData
value
- byte[] representation of the user dataIllegalStateException
public SMSStatusReport setStatusReportQualifier(boolean value) throws IllegalStateException
value
- boolean representation of whether the previously submitted TPDU was a SMSSubmit or SMSCommandIllegalStateException
public SMSStatusReport setMoreMessagesToSend(SMSStatusReport.MoreMessagesToSend value) throws IllegalStateException
value
- MoreMessagesToSend representation of whether there are no more messages to sendIllegalStateException
public SMSStatusReport setLoopPrevention(boolean value) throws IllegalStateException
value
- boolean representation of whether SMS applications should inhibit forwarding or automatic message generation that could cause infinite loopingIllegalStateException
public SMSStatusReport setMessageReference(int value) throws IllegalStateException
value
- int representation of identifies the previously submitted SMSSubmit or SMSCommandIllegalStateException
public SMSStatusReport setRecipientAddress(SMSAddress value) throws IllegalStateException
value
- SMSAddress representation of recipient of the previously submitted mobile originated short messageIllegalStateException
public SMSStatusReport setServiceCentreTimeStamp(SMSTimeStamp value) throws IllegalStateException
value
- SMSTimeStamp representation of time when the SC received the previously sent SMSSUBMITIllegalStateException
public SMSStatusReport setDischargeTime(SMSTimeStamp value) throws IllegalStateException
value
- SMSTimeStamp representation of time associated with a particular TP-ST outcomeIllegalStateException
public SMSStatusReport setStatus(int value) throws IllegalStateException
value
- int representation of status of the previously sent mobile originated short messageIllegalStateException
public static SMSStatusReport copyOf(SMSStatusReport from)
from
- the object from which to copypublic SMSStatusReport clone()
clone
in interface DataObject
clone
in class AbstractDataObject
public void setReadOnly()
setReadOnly
in interface DataObject
setReadOnly
in class SMSTPDUWithData
public static FieldAccessor[] getFieldAccessors()
public Map<String,Object> getFieldsMap(boolean withAbsents)
getFieldsMap
in class AbstractFieldsObject
withAbsents
- whether to put absent optional fields into Mapprotected boolean encodedIsInvalid()
public byte[] getEncodedForm() throws EncodeException
getEncodedForm
in class SMSTPDU
EncodeException
- if encoding failspublic SMSTPDU.Type getType()
SMSTPDU
public int getContainedLength(byte[] data, int start, int len)
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.data
- network-encoded datastart
- index into data where value commenceslen
- length in data to be consideredNullPointerException
- if data is nullprotected void encode() throws EncodeException
encode
in class AbstractLazyEncodedDataObject<byte[]>
EncodeException
- if encoding failsprotected void decode() throws DecodeException
decode
in class AbstractLazyEncodedDataObject<byte[]>
DecodeException
- if decoding failspublic static SMSStatusReport newInstanceOnlyHeader()
public static SMSStatusReport decodeRPUIHeaderStatusReport(byte[] message, int start, int len)
message
- a bytearray containing the encoded headerstart
- the offset within 'message' to begin decodinglen
- the number of valid bytes after 'offset' to decode (must be at least 1)NullPointerException
- if message is nullArrayIndexOutOfBoundsException
- if start or len are out of rangepublic static SMSStatusReport decodeRPUIHeaderStatusReport(byte[] message)
decodeRPUIHeaderStatusReport(message, 0, message.length)
message
- a bytearray containing the encoded headerNullPointerException
- if message is nullpublic static byte[] encodeRPUIHeaderStatusReport(SMSStatusReport smsStatusReport) throws EncodeException
smsStatusReport
- the pdu to encodeEncodeException
- if smsStatusReport is not only a header