public final class SMSDeliver extends SMSTPDUWithData implements FastSerializable
The API offered by this class is as if the type were specified in ASN.1 as follows.
SMSDeliver ::= SEQUENCE {
onlyHeader NULL OPTIONAL,
replyPath ReplyPath,
userDataHeaderIndicator UserDataHeaderIndicator,
statusReportIndication StatusReportIndication,
moreMessagesToSend MoreMessagesToSend,
loopPrevention BOOLEAN OPTIONAL,
originatingAddress SMSAddress,
protocolId SMSProtocolId,
dataCodingScheme SMSDataCodingScheme,
serviceCentreTimeStamp SMSTimeStamp,
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.1 pp50-53 | ||||||||
|---|---|---|---|---|---|---|---|---|
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 1 octet | Reply path | User data header indicator | Status report indication | 0 | Loop prevention? | More messages to send | Message type 00 | |
| 2-12 octets | Originating address | |||||||
| 1 octet | Protocol id | |||||||
| 1 octet | Data coding scheme | |||||||
| 7 octets | Service center time stamp | |||||||
| 1 octet | User data length | |||||||
| 0-141 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 |
SMSDeliver.MoreMessagesToSend
Enumeration of More Messages To Send constants.
|
static class |
SMSDeliver.ReplyPath
Enumeration of Reply Path constants.
|
static class |
SMSDeliver.StatusReportIndication
Enumeration of Status Report Indication constants.
|
SMSTPDUWithData.UserDataHeaderIndicatorSMSTPDU.TypeDataCodingScheme_value, OnlyHeader_present, OnlyHeader_value, ProtocolId_value, UserData_value, UserDataHeaderIndicator_value, UserDataLength_present, UserDataLength_valueisDecodedencodedFIELD_ABSENT, FIELD_UNINITIALISED| Constructor and Description |
|---|
SMSDeliver()
Constructs a new SMSDeliver object with no fields set.
|
SMSDeliver(byte[] data)
Constructs a new SMSDeliver object from network-encoded data.
|
SMSDeliver(byte[] data,
int start,
int len)
Constructs a new SMSDeliver object from part of network-encoded data.
|
SMSDeliver(DataInput in)
Constructs a new SMSDeliver 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.
|
SMSDeliver |
clone()
Constructs a copy of this object and everything reachable from it.
|
static SMSDeliver |
copyOf(SMSDeliver 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 SMSDeliver |
decodeRPUIHeaderDeliver(byte[] message)
Constructs a new SMSDeliver with no data (header only) from the given data.
|
static SMSDeliver |
decodeRPUIHeaderDeliver(byte[] message,
int start,
int len)
Constructs a new SMSDeliver 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[] |
encodeRPUIHeaderDeliver(SMSDeliver smsDeliver)
Encodes the given SMSDeliver 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.
|
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.
|
SMSDeliver.MoreMessagesToSend |
getMoreMessagesToSend()
Gets the value of whether there are no more messages to send.
|
SMSAddress |
getOriginatingAddress()
Gets the value of address of the originating SME.
|
SMSProtocolId |
getProtocolId()
Gets the value of identifies the above layer protocol.
|
SMSDeliver.ReplyPath |
getReplyPath()
Gets the value of whether reply path exists.
|
SMSTimeStamp |
getServiceCentreTimeStamp()
Gets the value of the time when the SC received the message.
|
SMSDeliver.StatusReportIndication |
getStatusReportIndication()
Gets the value of whether the SME has requested a status report.
|
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 |
hasLoopPrevention()
Tests whether the field LoopPrevention has a value.
|
boolean |
hasMoreMessagesToSend()
Tests whether the field MoreMessagesToSend has a value.
|
boolean |
hasOriginatingAddress()
Tests whether the field OriginatingAddress has a value.
|
boolean |
hasReplyPath()
Tests whether the field ReplyPath has a value.
|
boolean |
hasServiceCentreTimeStamp()
Tests whether the field ServiceCentreTimeStamp has a value.
|
boolean |
hasStatusReportIndication()
Tests whether the field StatusReportIndication has a value.
|
static SMSDeliver |
newInstanceOnlyHeader()
Factory method that creates an instance for representing only a header (no data).
|
SMSDeliver |
setDataCodingScheme(SMSDataCodingScheme value)
Sets the value of the coding scheme within the user data.
|
SMSDeliver |
setLoopPrevention(boolean value)
Sets the value of whether SMS applications should inhibit forwarding or automatic message generation that could cause infinite looping.
|
SMSDeliver |
setLoopPreventionPresent(boolean flag)
Sets the presence or absence of the field LoopPrevention.
|
SMSDeliver |
setMoreMessagesToSend(SMSDeliver.MoreMessagesToSend value)
Sets the value of whether there are no more messages to send.
|
SMSDeliver |
setOriginatingAddress(SMSAddress value)
Sets the value of address of the originating SME.
|
SMSDeliver |
setProtocolId(SMSProtocolId value)
Sets the value of identifies the above layer protocol.
|
void |
setReadOnly()
Sets this and all its fields to be immutable.
|
SMSDeliver |
setReplyPath(SMSDeliver.ReplyPath value)
Sets the value of whether reply path exists.
|
SMSDeliver |
setServiceCentreTimeStamp(SMSTimeStamp value)
Sets the value of the time when the SC received the message.
|
SMSDeliver |
setStatusReportIndication(SMSDeliver.StatusReportIndication value)
Sets the value of whether the SME has requested a status report.
|
SMSDeliver |
setUserData(byte[] value)
Sets the value of the user data.
|
SMSDeliver |
setUserDataHeaderIndicator(SMSTPDUWithData.UserDataHeaderIndicator value)
Sets the value of whether user data contains a header.
|
SMSDeliver |
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
SMSDeliver(DataInput). |
checkUserDataConstraints, getUserDataHeader, getUserDataString, hasDataCodingScheme, hasOnlyHeader, hasProtocolId, hasUserData, hasUserDataHeaderIndicator, hasUserDataLength, setOnlyHeaderPresent, setUserDataLengthPresent, setUserDataString, setUserDataString, setUserDataString, setUserDataStringdecodeRPAck, decodeRPAck, decodeRPError, decodeRPError, decodeRPMOData, decodeRPMOData, decodeRPMTData, decodeRPMTData, encodeRPAck, encodeRPError, encodeRPMOData, encodeRPMTDatacheckDecode, checkModifyAndDecodeequals, hashCode, toStringcheckModify, isReadOnlypublic SMSDeliver()
public SMSDeliver(byte[] data)
data - network-encoded dataNullPointerException - if data is nullpublic SMSDeliver(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 SMSDeliver(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
SMSDeliver(DataInput).toStream in interface FastSerializableout - the stream to write toIOException - if an I/O error occurspublic boolean hasMoreMessagesToSend()
throws DecodeException
DecodeException - if encoded state cannot be decodedpublic boolean hasLoopPrevention()
throws DecodeException
DecodeException - if encoded state cannot be decodedpublic SMSDeliver setLoopPreventionPresent(boolean flag) throws IllegalStateException
flag - whether the field should be marked as presentIllegalStateException - if this instance has been marked as read-onlypublic boolean hasStatusReportIndication()
throws DecodeException
DecodeException - if encoded state cannot be decodedpublic boolean hasReplyPath()
throws DecodeException
DecodeException - if encoded state cannot be decodedpublic boolean hasOriginatingAddress()
throws DecodeException
DecodeException - if encoded state cannot be decodedpublic boolean hasServiceCentreTimeStamp()
throws DecodeException
DecodeException - if encoded state cannot be decodedpublic void checkFieldsSet()
throws EncodeException
checkFieldsSet in class SMSTPDUWithDataEncodeException - if any mandatory field is not presentpublic SMSTPDUWithData.UserDataHeaderIndicator getUserDataHeaderIndicator() throws DecodeException
getUserDataHeaderIndicator in class SMSTPDUWithDataDecodeException - if encoded state cannot be decodedpublic SMSProtocolId getProtocolId() throws DecodeException
getProtocolId in class SMSTPDUWithDataDecodeException - if encoded state cannot be decodedpublic SMSDataCodingScheme getDataCodingScheme() throws DecodeException
getDataCodingScheme in class SMSTPDUWithDataDecodeException - if encoded state cannot be decodedpublic int getUserDataLength()
throws DecodeException
getUserDataLength in class SMSTPDUWithDataDecodeException - if encoded state cannot be decodedpublic byte[] getUserData()
throws DecodeException
getUserData in class SMSTPDUWithDataDecodeException - if encoded state cannot be decodedpublic SMSDeliver.MoreMessagesToSend getMoreMessagesToSend() throws DecodeException
DecodeException - if encoded state cannot be decodedpublic boolean getLoopPrevention()
throws DecodeException
DecodeException - if encoded state cannot be decodedpublic SMSDeliver.StatusReportIndication getStatusReportIndication() throws DecodeException
DecodeException - if encoded state cannot be decodedpublic SMSDeliver.ReplyPath getReplyPath() throws DecodeException
DecodeException - if encoded state cannot be decodedpublic SMSAddress getOriginatingAddress() throws DecodeException
DecodeException - if encoded state cannot be decodedpublic SMSTimeStamp getServiceCentreTimeStamp() throws DecodeException
DecodeException - if encoded state cannot be decodedpublic SMSDeliver setUserDataHeaderIndicator(SMSTPDUWithData.UserDataHeaderIndicator value) throws IllegalStateException
setUserDataHeaderIndicator in class SMSTPDUWithDatavalue - UserDataHeaderIndicator representation of whether user data contains a headerIllegalStateExceptionpublic SMSDeliver setProtocolId(SMSProtocolId value) throws IllegalStateException
setProtocolId in class SMSTPDUWithDatavalue - SMSProtocolId representation of identifies the above layer protocolIllegalStateExceptionpublic SMSDeliver setDataCodingScheme(SMSDataCodingScheme value) throws IllegalStateException
setDataCodingScheme in class SMSTPDUWithDatavalue - SMSDataCodingScheme representation of the coding scheme within the user dataIllegalStateExceptionpublic SMSDeliver setUserDataLength(int value) throws IllegalStateException
setUserDataLength in class SMSTPDUWithDatavalue - int representation of the length of the user dataIllegalStateExceptionpublic SMSDeliver setUserData(byte[] value) throws IllegalStateException
setUserData in class SMSTPDUWithDatavalue - byte[] representation of the user dataIllegalStateExceptionpublic SMSDeliver setMoreMessagesToSend(SMSDeliver.MoreMessagesToSend value) throws IllegalStateException
value - MoreMessagesToSend representation of whether there are no more messages to sendIllegalStateExceptionpublic SMSDeliver setLoopPrevention(boolean value) throws IllegalStateException
value - boolean representation of whether SMS applications should inhibit forwarding or automatic message generation that could cause infinite loopingIllegalStateExceptionpublic SMSDeliver setStatusReportIndication(SMSDeliver.StatusReportIndication value) throws IllegalStateException
value - StatusReportIndication representation of whether the SME has requested a status reportIllegalStateExceptionpublic SMSDeliver setReplyPath(SMSDeliver.ReplyPath value) throws IllegalStateException
value - ReplyPath representation of whether reply path existsIllegalStateExceptionpublic SMSDeliver setOriginatingAddress(SMSAddress value) throws IllegalStateException
value - SMSAddress representation of address of the originating SMEIllegalStateExceptionpublic SMSDeliver setServiceCentreTimeStamp(SMSTimeStamp value) throws IllegalStateException
value - SMSTimeStamp representation of the time when the SC received the messageIllegalStateExceptionpublic static SMSDeliver copyOf(SMSDeliver from)
from - the object from which to copypublic SMSDeliver clone()
clone in interface DataObjectclone in class AbstractDataObjectpublic void setReadOnly()
setReadOnly in interface DataObjectsetReadOnly in class SMSTPDUWithDatapublic static FieldAccessor[] getFieldAccessors()
public Map<String,Object> getFieldsMap(boolean withAbsents)
getFieldsMap in class AbstractFieldsObjectwithAbsents - whether to put absent optional fields into Mapprotected boolean encodedIsInvalid()
public byte[] getEncodedForm()
throws EncodeException
getEncodedForm in class SMSTPDUEncodeException - if encoding failspublic SMSTPDU.Type getType()
SMSTPDUpublic 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 SMSDeliver newInstanceOnlyHeader()
public static SMSDeliver decodeRPUIHeaderDeliver(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 SMSDeliver decodeRPUIHeaderDeliver(byte[] message)
decodeRPUIHeaderDeliver(message, 0, message.length)message - a bytearray containing the encoded headerNullPointerException - if message is nullpublic static byte[] encodeRPUIHeaderDeliver(SMSDeliver smsDeliver) throws EncodeException
smsDeliver - the pdu to encodeEncodeException - if smsDeliver is not only a header