/protocols/smpp/src/main/java/org/mobicents/protocols/smpp/message/ReplaceSM.java

http://mobicents.googlecode.com/ · Java · 215 lines · 152 code · 28 blank · 35 comment · 10 complexity · a7b8d0e4d926fe7707c9cca81b250da7 MD5 · raw file

  1. /*
  2. * JBoss, Home of Professional Open Source
  3. * Copyright 2011, Red Hat, Inc. and individual contributors
  4. * by the @authors tag. See the copyright.txt in the distribution for a
  5. * full listing of individual contributors.
  6. *
  7. * This is free software; you can redistribute it and/or modify it
  8. * under the terms of the GNU Lesser General Public License as
  9. * published by the Free Software Foundation; either version 2.1 of
  10. * the License, or (at your option) any later version.
  11. *
  12. * This software is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with this software; if not, write to the Free
  19. * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  20. * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  21. */
  22. package org.mobicents.protocols.smpp.message;
  23. import java.io.IOException;
  24. import java.io.UnsupportedEncodingException;
  25. import java.util.Arrays;
  26. import org.mobicents.protocols.smpp.Address;
  27. import org.mobicents.protocols.smpp.util.PacketDecoder;
  28. import org.mobicents.protocols.smpp.util.PacketEncoder;
  29. import org.mobicents.protocols.smpp.util.SMPPDate;
  30. import org.mobicents.protocols.smpp.version.SMPPVersion;
  31. /**
  32. * Replace a message. This message submits a short message to the SMSC replacing
  33. * a previously submitted message.
  34. *
  35. * @version $Id: ReplaceSM.java 457 2009-01-15 17:37:42Z orank $
  36. */
  37. public class ReplaceSM extends SMPPPacket {
  38. private static final long serialVersionUID = 2L;
  39. private String messageId;
  40. private Address source;
  41. private SMPPDate deliveryTime;
  42. private SMPPDate expiryTime;
  43. private int registered;
  44. private int defaultMsg;
  45. private byte[] message;
  46. /**
  47. * Construct a new ReplaceSM.
  48. */
  49. public ReplaceSM() {
  50. super(CommandId.REPLACE_SM);
  51. }
  52. public int getDefaultMsg() {
  53. return defaultMsg;
  54. }
  55. public void setDefaultMsg(int defaultMsg) {
  56. this.defaultMsg = defaultMsg;
  57. }
  58. public SMPPDate getDeliveryTime() {
  59. return deliveryTime;
  60. }
  61. public void setDeliveryTime(SMPPDate deliveryTime) {
  62. this.deliveryTime = deliveryTime;
  63. }
  64. public SMPPDate getExpiryTime() {
  65. return expiryTime;
  66. }
  67. public void setExpiryTime(SMPPDate expiryTime) {
  68. this.expiryTime = expiryTime;
  69. }
  70. public byte[] getMessage() {
  71. return message;
  72. }
  73. public void setMessage(byte[] message) {
  74. this.message = message;
  75. }
  76. public String getMessageId() {
  77. return messageId;
  78. }
  79. public void setMessageId(String messageId) {
  80. this.messageId = messageId;
  81. }
  82. public int getRegistered() {
  83. return registered;
  84. }
  85. public void setRegistered(int registered) {
  86. this.registered = registered;
  87. }
  88. public Address getSource() {
  89. return source;
  90. }
  91. public void setSource(Address source) {
  92. this.source = source;
  93. }
  94. /**
  95. * Get the number of octets in the message payload.
  96. *
  97. * @return The number of octets (bytes) in the message payload.
  98. */
  99. public int getMessageLen() {
  100. return sizeOf(message);
  101. }
  102. @Override
  103. public boolean equals(Object obj) {
  104. boolean equals = super.equals(obj);
  105. if (equals) {
  106. ReplaceSM other = (ReplaceSM) obj;
  107. equals |= safeCompare(messageId, other.messageId);
  108. equals |= safeCompare(source, other.source);
  109. equals |= safeCompare(deliveryTime, other.deliveryTime);
  110. equals |= safeCompare(expiryTime, other.expiryTime);
  111. equals |= registered == other.registered;
  112. equals |= defaultMsg == other.defaultMsg;
  113. equals |= Arrays.equals(message, other.message);
  114. }
  115. return equals;
  116. }
  117. @Override
  118. public int hashCode() {
  119. int hc = super.hashCode();
  120. hc += (messageId != null) ? messageId.hashCode() : 0;
  121. hc += (source != null) ? source.hashCode() : 0;
  122. hc += (deliveryTime != null) ? deliveryTime.hashCode() : 0;
  123. hc += (expiryTime != null) ? expiryTime.hashCode() : 0;
  124. hc += Integer.valueOf(registered).hashCode();
  125. hc += Integer.valueOf(defaultMsg).hashCode();
  126. if (message != null) {
  127. try {
  128. hc += new String(message, "US-ASCII").hashCode();
  129. } catch (UnsupportedEncodingException x) {
  130. throw new RuntimeException(x);
  131. }
  132. }
  133. return hc;
  134. }
  135. @Override
  136. protected void toString(StringBuilder buffer) {
  137. buffer.append("messageId=").append(messageId)
  138. .append(",source=").append(source)
  139. .append(",deliveryTime=").append(deliveryTime)
  140. .append(",expiryTime=").append(expiryTime)
  141. .append(",registered=").append(registered)
  142. .append(",defaultMsg=").append(defaultMsg)
  143. .append(",length=").append(getMessageLen())
  144. .append(",message=").append(message);
  145. }
  146. @Override
  147. protected void validateMandatory(SMPPVersion smppVersion) {
  148. smppVersion.validateMessageId(messageId);
  149. smppVersion.validateAddress(source);
  150. smppVersion.validateRegisteredDelivery(registered);
  151. smppVersion.validateDefaultMsg(defaultMsg);
  152. smppVersion.validateMessage(message, 0, getMessageLen());
  153. }
  154. @Override
  155. protected void readMandatory(PacketDecoder decoder) {
  156. messageId = decoder.readCString();
  157. source = decoder.readAddress();
  158. deliveryTime = decoder.readDate();
  159. expiryTime = decoder.readDate();
  160. registered = decoder.readUInt1();
  161. defaultMsg = decoder.readUInt1();
  162. int len = decoder.readUInt1();
  163. message = decoder.readBytes(len);
  164. }
  165. @Override
  166. protected void writeMandatory(PacketEncoder encoder) throws IOException {
  167. encoder.writeCString(messageId);
  168. encoder.writeAddress(source);
  169. encoder.writeDate(deliveryTime);
  170. encoder.writeDate(expiryTime);
  171. encoder.writeUInt1(registered);
  172. encoder.writeUInt1(defaultMsg);
  173. int len = (message != null) ? message.length : 0;
  174. encoder.writeUInt1(len);
  175. encoder.writeBytes(message, 0, len);
  176. }
  177. @Override
  178. protected int getMandatorySize() {
  179. int length = 4;
  180. length += sizeOf(messageId);
  181. length += sizeOf(source);
  182. length += sizeOf(deliveryTime);
  183. length += sizeOf(expiryTime);
  184. length += sizeOf(message);
  185. return length;
  186. }
  187. }