public final class SMSSubmit extends SMSTPDUWithData implements FastSerializable
The API offered by this class is as if the type were specified in ASN.1 as follows.
SMSSubmit ::= SEQUENCE { onlyHeader NULL OPTIONAL, replyPath ReplyPath, userDataHeaderIndicator UserDataHeaderIndicator, statusReportRequest StatusReportRequest, rejectDuplicates BOOLEAN, messageReference INTEGER, destinationAddress SMSAddress, protocolId SMSProtocolId, dataCodingScheme SMSDataCodingScheme, validityPeriod ValidityPeriod 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.2 pp55-58 | ||||||||
---|---|---|---|---|---|---|---|---|
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
1 octet | Reply path | User data header indicator | Status report request | Validity period format | Reject duplicates? | Message type 01 | ||
1 octet | Message reference | |||||||
2-12 octets | Destination address | |||||||
1 octet | Protocol id | |||||||
1 octet | Data coding scheme | |||||||
0,1,7 octets | Validity period | |||||||
1 octet | User data length | |||||||
0-140 octets | User data |
Modifier and Type | Class and Description |
---|---|
static class |
SMSSubmit.ReplyPath
Enumeration of Reply Path constants.
|
static class |
SMSSubmit.StatusReportRequest
Enumeration of Status Report Request constants.
|
static class |
SMSSubmit.ValidityPeriod
Representation of a ValidityPeriod.
|
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 |
---|
SMSSubmit()
Constructs a new SMSSubmit object with no fields set.
|
SMSSubmit(byte[] data)
Constructs a new SMSSubmit object from network-encoded data.
|
SMSSubmit(byte[] data,
int start,
int len)
Constructs a new SMSSubmit object from part of network-encoded data.
|
SMSSubmit(DataInput in)
Constructs a new SMSSubmit 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.
|
SMSSubmit |
clone()
Constructs a copy of this object and everything reachable from it.
|
static SMSSubmit |
copyOf(SMSSubmit 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 SMSSubmit |
decodeRPUIHeaderSubmit(byte[] message)
Constructs a new SMSSubmit with no data (header only) from the given data.
|
static SMSSubmit |
decodeRPUIHeaderSubmit(byte[] message,
int start,
int len)
Constructs a new SMSSubmit 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[] |
encodeRPUIHeaderSubmit(SMSSubmit smsSubmit)
Encodes the given SMSSubmit 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.
|
SMSAddress |
getDestinationAddress()
Gets the value of the address of the destination SME.
|
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.
|
int |
getMessageReference()
Gets the value of identifies the SMSSubmit.
|
SMSProtocolId |
getProtocolId()
Gets the value of identifies the above layer protocol.
|
boolean |
getRejectDuplicates()
Gets the value of whether the SC shall accept an SMSSubmit for an SM still held in the SC which has the same TP-MR and the same TP-DA as a previously submitted SM from the same OA.
|
SMSSubmit.ReplyPath |
getReplyPath()
Gets the value of the request for reply path.
|
SMSSubmit.StatusReportRequest |
getStatusReportRequest()
Gets the value of whether the MS is requesting 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.
|
SMSSubmit.ValidityPeriod |
getValidityPeriod()
Gets the value of the time from where the message is no longer valid.
|
boolean |
hasDestinationAddress()
Tests whether the field DestinationAddress has a value.
|
boolean |
hasMessageReference()
Tests whether the field MessageReference has a value.
|
boolean |
hasRejectDuplicates()
Tests whether the field RejectDuplicates has a value.
|
boolean |
hasReplyPath()
Tests whether the field ReplyPath has a value.
|
boolean |
hasStatusReportRequest()
Tests whether the field StatusReportRequest has a value.
|
boolean |
hasValidityPeriod()
Tests whether the field ValidityPeriod has a value.
|
static SMSSubmit |
newInstanceOnlyHeader()
Factory method that creates an instance for representing only a header (no data).
|
SMSSubmit |
setDataCodingScheme(SMSDataCodingScheme value)
Sets the value of the coding scheme within the user data.
|
SMSSubmit |
setDestinationAddress(SMSAddress value)
Sets the value of the address of the destination SME.
|
SMSSubmit |
setMessageReference(int value)
Sets the value of identifies the SMSSubmit.
|
SMSSubmit |
setMessageReferencePresent(boolean flag)
Sets the presence or absence of the field MessageReference.
|
SMSSubmit |
setProtocolId(SMSProtocolId value)
Sets the value of identifies the above layer protocol.
|
void |
setReadOnly()
Sets this and all its fields to be immutable.
|
SMSSubmit |
setRejectDuplicates(boolean value)
Sets the value of whether the SC shall accept an SMSSubmit for an SM still held in the SC which has the same TP-MR and the same TP-DA as a previously submitted SM from the same OA.
|
SMSSubmit |
setRejectDuplicatesPresent(boolean flag)
Sets the presence or absence of the field RejectDuplicates.
|
SMSSubmit |
setReplyPath(SMSSubmit.ReplyPath value)
Sets the value of the request for reply path.
|
SMSSubmit |
setStatusReportRequest(SMSSubmit.StatusReportRequest value)
Sets the value of whether the MS is requesting a status report.
|
SMSSubmit |
setUserData(byte[] value)
Sets the value of the user data.
|
SMSSubmit |
setUserDataHeaderIndicator(SMSTPDUWithData.UserDataHeaderIndicator value)
Sets the value of whether user data contains a header.
|
SMSSubmit |
setUserDataLength(int value)
Sets the value of the length of the user data.
|
SMSSubmit |
setValidityPeriod(SMSSubmit.ValidityPeriod value)
Sets the value of the time from where the message is no longer valid.
|
void |
toStream(DataOutput out)
Serializes this object to a stream in a form suitable for reading by
SMSSubmit(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 SMSSubmit()
public SMSSubmit(byte[] data)
data
- network-encoded dataNullPointerException
- if data is nullpublic SMSSubmit(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 SMSSubmit(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
SMSSubmit(DataInput)
.toStream
in interface FastSerializable
out
- the stream to write toIOException
- if an I/O error occurspublic boolean hasRejectDuplicates() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic SMSSubmit setRejectDuplicatesPresent(boolean flag) throws IllegalStateException
flag
- whether the field should be marked as presentIllegalStateException
- if this instance has been marked as read-onlypublic boolean hasStatusReportRequest() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic boolean hasReplyPath() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic boolean hasMessageReference() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic SMSSubmit setMessageReferencePresent(boolean flag) throws IllegalStateException
flag
- whether the field should be marked as presentIllegalStateException
- if this instance has been marked as read-onlypublic boolean hasDestinationAddress() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic boolean hasValidityPeriod() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic 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 getRejectDuplicates() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic SMSSubmit.StatusReportRequest getStatusReportRequest() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic SMSSubmit.ReplyPath getReplyPath() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic int getMessageReference() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic SMSAddress getDestinationAddress() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic SMSSubmit.ValidityPeriod getValidityPeriod() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic SMSSubmit setUserDataHeaderIndicator(SMSTPDUWithData.UserDataHeaderIndicator value) throws IllegalStateException
setUserDataHeaderIndicator
in class SMSTPDUWithData
value
- UserDataHeaderIndicator representation of whether user data contains a headerIllegalStateException
public SMSSubmit setProtocolId(SMSProtocolId value) throws IllegalStateException
setProtocolId
in class SMSTPDUWithData
value
- SMSProtocolId representation of identifies the above layer protocolIllegalStateException
public SMSSubmit setDataCodingScheme(SMSDataCodingScheme value) throws IllegalStateException
setDataCodingScheme
in class SMSTPDUWithData
value
- SMSDataCodingScheme representation of the coding scheme within the user dataIllegalStateException
public SMSSubmit setUserDataLength(int value) throws IllegalStateException
setUserDataLength
in class SMSTPDUWithData
value
- int representation of the length of the user dataIllegalStateException
public SMSSubmit setUserData(byte[] value) throws IllegalStateException
setUserData
in class SMSTPDUWithData
value
- byte[] representation of the user dataIllegalStateException
public SMSSubmit setRejectDuplicates(boolean value) throws IllegalStateException
value
- boolean representation of whether the SC shall accept an SMSSubmit for an SM still held in the SC which has the same TP-MR and the same TP-DA as a previously submitted SM from the same OAIllegalStateException
public SMSSubmit setStatusReportRequest(SMSSubmit.StatusReportRequest value) throws IllegalStateException
value
- StatusReportRequest representation of whether the MS is requesting a status reportIllegalStateException
public SMSSubmit setReplyPath(SMSSubmit.ReplyPath value) throws IllegalStateException
value
- ReplyPath representation of the request for reply pathIllegalStateException
public SMSSubmit setMessageReference(int value) throws IllegalStateException
value
- int representation of identifies the SMSSubmitIllegalStateException
public SMSSubmit setDestinationAddress(SMSAddress value) throws IllegalStateException
value
- SMSAddress representation of the address of the destination SMEIllegalStateException
public SMSSubmit setValidityPeriod(SMSSubmit.ValidityPeriod value) throws IllegalStateException
value
- ValidityPeriod representation of the time from where the message is no longer validIllegalStateException
public static SMSSubmit copyOf(SMSSubmit from)
from
- the object from which to copypublic SMSSubmit 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 SMSSubmit newInstanceOnlyHeader()
public static SMSSubmit decodeRPUIHeaderSubmit(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 SMSSubmit decodeRPUIHeaderSubmit(byte[] message)
decodeRPUIHeaderSubmit(message, 0, message.length)
message
- a bytearray containing the encoded headerNullPointerException
- if message is nullpublic static byte[] encodeRPUIHeaderSubmit(SMSSubmit smsSubmit) throws EncodeException
smsSubmit
- the pdu to encodeEncodeException
- if smsSubmit is not only a header