public final class SMSCommand extends SMSTPDU implements FastSerializable
The API offered by this class is as if the type were specified in ASN.1 as follows.
SMSCommand ::= SEQUENCE {
onlyHeader NULL OPTIONAL,
userDataHeaderIndicator UserDataHeaderIndicator,
statusReportRequest StatusReportRequest,
messageReference INTEGER,
protocolId SMSProtocolId,
commandType INTEGER,
messageNumber INTEGER,
destinationAddress SMSAddress,
commandData 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.4 pp62-63 | ||||||||
|---|---|---|---|---|---|---|---|---|
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 1 octet | 0 | User data header indicator | Status report request | 0 | 0 | 0 | Message type 10 | |
| 1 octet | Message reference | |||||||
| 1 octet | Protocol id | |||||||
| 1 octet | Command type | |||||||
| 1 octet | Message number | |||||||
| 2-12 octets | Destination address | |||||||
| 1 octet | Command data length | |||||||
| 0-156 octets | Command data | |||||||
Field onlyHeader, when present, causes the commandData field to be omitted on encoding and to be required to be absent on decoding; it doesn't prevent a value from being set for that field, that field still participates in the Map returned by getFieldsMap(), and hence equals(), hashCode() and toString() are still affected.
| Modifier and Type | Class and Description |
|---|---|
static class |
SMSCommand.StatusReportRequest
Enumeration of Status Report Request constants.
|
static class |
SMSCommand.UserDataHeaderIndicator
Enumeration of User Data Header Indicator constants.
|
SMSTPDU.TypeisDecodedencodedFIELD_ABSENT, FIELD_UNINITIALISED| Constructor and Description |
|---|
SMSCommand()
Constructs a new SMSCommand object with no fields set.
|
SMSCommand(byte[] data)
Constructs a new SMSCommand object from network-encoded data.
|
SMSCommand(byte[] data,
int start,
int len)
Constructs a new SMSCommand object from part of network-encoded data.
|
SMSCommand(DataInput in)
Constructs a new SMSCommand 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.
|
SMSCommand |
clone()
Constructs a copy of this object and everything reachable from it.
|
static SMSCommand |
copyOf(SMSCommand 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 SMSCommand |
decodeRPUIHeaderCommand(byte[] message)
Constructs a new SMSCommand with no data (header only) from the given data.
|
static SMSCommand |
decodeRPUIHeaderCommand(byte[] message,
int start,
int len)
Constructs a new SMSCommand 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[] |
encodeRPUIHeaderCommand(SMSCommand smsCommand)
Encodes the given SMSCommand for sending as the payload of a SM-RP-UIHeader message.
|
byte[] |
getCommandData()
Gets the value of the command data.
|
int |
getCommandType()
Gets the value of the operation to be performed on a SM.
|
int |
getContainedLength(byte[] data,
int start,
int len)
Determines the length of the encoded value that commences at offset
start in the given data. |
SMSAddress |
getDestinationAddress()
Gets the value of the destination address.
|
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 |
getMessageNumber()
Gets the value of indicates which SM in the SC to operate on.
|
int |
getMessageReference()
Gets the value of identifies the command.
|
SMSProtocolId |
getProtocolId()
Gets the value of identifies the above layer protocol.
|
SMSCommand.StatusReportRequest |
getStatusReportRequest()
Gets the value of whether the command is requesting a status report.
|
SMSTPDU.Type |
getType()
Return the message type of this PDU
|
SMSCommand.UserDataHeaderIndicator |
getUserDataHeaderIndicator()
Gets the value of whether command data contains a header.
|
boolean |
hasCommandData()
Tests whether the field CommandData has a value.
|
boolean |
hasCommandType()
Tests whether the field CommandType has a value.
|
boolean |
hasDestinationAddress()
Tests whether the field DestinationAddress has a value.
|
boolean |
hasMessageNumber()
Tests whether the field MessageNumber has a value.
|
boolean |
hasMessageReference()
Tests whether the field MessageReference has a value.
|
boolean |
hasOnlyHeader()
Tests whether the field OnlyHeader has a value.
|
boolean |
hasProtocolId()
Tests whether the field ProtocolId has a value.
|
boolean |
hasStatusReportRequest()
Tests whether the field StatusReportRequest has a value.
|
boolean |
hasUserDataHeaderIndicator()
Tests whether the field UserDataHeaderIndicator has a value.
|
static SMSCommand |
newInstanceOnlyHeader()
Factory method that creates an instance for representing only a header (no data).
|
SMSCommand |
setCommandData(byte[] value)
Sets the value of the command data.
|
SMSCommand |
setCommandType(int value)
Sets the value of the operation to be performed on a SM.
|
SMSCommand |
setCommandTypePresent(boolean flag)
Sets the presence or absence of the field CommandType.
|
SMSCommand |
setDestinationAddress(SMSAddress value)
Sets the value of the destination address.
|
SMSCommand |
setMessageNumber(int value)
Sets the value of indicates which SM in the SC to operate on.
|
SMSCommand |
setMessageNumberPresent(boolean flag)
Sets the presence or absence of the field MessageNumber.
|
SMSCommand |
setMessageReference(int value)
Sets the value of identifies the command.
|
SMSCommand |
setMessageReferencePresent(boolean flag)
Sets the presence or absence of the field MessageReference.
|
SMSCommand |
setOnlyHeaderPresent(boolean flag)
Sets the presence or absence of the field OnlyHeader.
|
SMSCommand |
setProtocolId(SMSProtocolId value)
Sets the value of identifies the above layer protocol.
|
void |
setReadOnly()
Sets this and all its fields to be immutable.
|
SMSCommand |
setStatusReportRequest(SMSCommand.StatusReportRequest value)
Sets the value of whether the command is requesting a status report.
|
SMSCommand |
setUserDataHeaderIndicator(SMSCommand.UserDataHeaderIndicator value)
Sets the value of whether command data contains a header.
|
void |
toStream(DataOutput out)
Serializes this object to a stream in a form suitable for reading by
SMSCommand(DataInput). |
decodeRPAck, decodeRPAck, decodeRPError, decodeRPError, decodeRPMOData, decodeRPMOData, decodeRPMTData, decodeRPMTData, encodeRPAck, encodeRPError, encodeRPMOData, encodeRPMTDatacheckDecode, checkModifyAndDecodeequals, hashCode, toStringcheckModify, isReadOnlypublic SMSCommand()
public SMSCommand(byte[] data)
data - network-encoded dataNullPointerException - if data is nullpublic SMSCommand(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 SMSCommand(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
SMSCommand(DataInput).toStream in interface FastSerializableout - the stream to write toIOException - if an I/O error occurspublic boolean hasOnlyHeader()
throws DecodeException
DecodeException - if encoded state cannot be decodedpublic SMSCommand setOnlyHeaderPresent(boolean flag) throws IllegalStateException
flag - whether the field should be marked as presentIllegalStateException - if this instance has been marked as read-onlypublic boolean hasUserDataHeaderIndicator()
throws DecodeException
DecodeException - if encoded state cannot be decodedpublic boolean hasStatusReportRequest()
throws DecodeException
DecodeException - if encoded state cannot be decodedpublic boolean hasMessageReference()
throws DecodeException
DecodeException - if encoded state cannot be decodedpublic SMSCommand setMessageReferencePresent(boolean flag) throws IllegalStateException
flag - whether the field should be marked as presentIllegalStateException - if this instance has been marked as read-onlypublic boolean hasProtocolId()
throws DecodeException
DecodeException - if encoded state cannot be decodedpublic boolean hasCommandType()
throws DecodeException
DecodeException - if encoded state cannot be decodedpublic SMSCommand setCommandTypePresent(boolean flag) throws IllegalStateException
flag - whether the field should be marked as presentIllegalStateException - if this instance has been marked as read-onlypublic boolean hasMessageNumber()
throws DecodeException
DecodeException - if encoded state cannot be decodedpublic SMSCommand setMessageNumberPresent(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 hasCommandData()
throws DecodeException
DecodeException - if encoded state cannot be decodedpublic void checkFieldsSet()
throws EncodeException
checkFieldsSet in class SMSTPDUEncodeException - if any mandatory field is not presentpublic SMSCommand.UserDataHeaderIndicator getUserDataHeaderIndicator() throws DecodeException
DecodeException - if encoded state cannot be decodedpublic SMSCommand.StatusReportRequest getStatusReportRequest() throws DecodeException
DecodeException - if encoded state cannot be decodedpublic int getMessageReference()
throws DecodeException
DecodeException - if encoded state cannot be decodedpublic SMSProtocolId getProtocolId() throws DecodeException
DecodeException - if encoded state cannot be decodedpublic int getCommandType()
throws DecodeException
DecodeException - if encoded state cannot be decodedpublic int getMessageNumber()
throws DecodeException
DecodeException - if encoded state cannot be decodedpublic SMSAddress getDestinationAddress() throws DecodeException
DecodeException - if encoded state cannot be decodedpublic byte[] getCommandData()
throws DecodeException
DecodeException - if encoded state cannot be decodedpublic SMSCommand setUserDataHeaderIndicator(SMSCommand.UserDataHeaderIndicator value) throws IllegalStateException
value - UserDataHeaderIndicator representation of whether command data contains a headerIllegalStateExceptionpublic SMSCommand setStatusReportRequest(SMSCommand.StatusReportRequest value) throws IllegalStateException
value - StatusReportRequest representation of whether the command is requesting a status reportIllegalStateExceptionpublic SMSCommand setMessageReference(int value) throws IllegalStateException
value - int representation of identifies the commandIllegalStateExceptionpublic SMSCommand setProtocolId(SMSProtocolId value) throws IllegalStateException
value - SMSProtocolId representation of identifies the above layer protocolIllegalStateExceptionpublic SMSCommand setCommandType(int value) throws IllegalStateException
value - int representation of the operation to be performed on a SMIllegalStateExceptionpublic SMSCommand setMessageNumber(int value) throws IllegalStateException
value - int representation of indicates which SM in the SC to operate onIllegalStateExceptionpublic SMSCommand setDestinationAddress(SMSAddress value) throws IllegalStateException
value - SMSAddress representation of the destination addressIllegalStateExceptionpublic SMSCommand setCommandData(byte[] value) throws IllegalStateException
value - byte[] representation of the command dataIllegalStateExceptionpublic static SMSCommand copyOf(SMSCommand from)
from - the object from which to copypublic SMSCommand clone()
clone in interface DataObjectclone in class AbstractDataObjectpublic void setReadOnly()
setReadOnly in interface DataObjectsetReadOnly in class AbstractDataObjectpublic 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 SMSCommand newInstanceOnlyHeader()
public static SMSCommand decodeRPUIHeaderCommand(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 SMSCommand decodeRPUIHeaderCommand(byte[] message)
decodeRPUIHeaderCommand(message, 0, message.length)message - a bytearray containing the encoded headerNullPointerException - if message is nullpublic static byte[] encodeRPUIHeaderCommand(SMSCommand smsCommand) throws EncodeException
smsCommand - the pdu to encodeEncodeException - if smsCommand is not only a header