/protocols/ss7/m3ua/impl/src/main/java/org/mobicents/protocols/ss7/m3ua/impl/TransitionState.java

http://mobicents.googlecode.com/ · Java · 157 lines · 95 code · 29 blank · 33 comment · 2 complexity · 4f48c236174db7063424a3809ce6d12b 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.ss7.m3ua.impl;
  23. import java.util.HashMap;
  24. import org.mobicents.protocols.ss7.m3ua.message.M3UAMessage;
  25. import org.mobicents.protocols.ss7.m3ua.message.MessageClass;
  26. import org.mobicents.protocols.ss7.m3ua.message.MessageType;
  27. import org.mobicents.protocols.ss7.m3ua.message.mgmt.Notify;
  28. import org.mobicents.protocols.ss7.m3ua.parameter.ErrorCode;
  29. import org.mobicents.protocols.ss7.m3ua.parameter.Status;
  30. /**
  31. *
  32. * @author amit bhayani
  33. *
  34. */
  35. public class TransitionState {
  36. public static final String COMM_UP = "commup";
  37. public static final String COMM_DOWN = "commdown";
  38. public static final String PAYLOAD = "payload";
  39. public static final String DUNA = "duna";
  40. public static final String DAVA = "dava";
  41. public static final String DAUD = "daud";
  42. public static final String SCON = "scon";
  43. public static final String DUPU = "dupu";
  44. public static final String DRST = "drst";
  45. public static final String ASP_UP_SENT = "aspupsent";
  46. public static final String ASP_UP = "aspup";
  47. public static final String ASP_UP_ACK = "aspupack";
  48. public static final String ASP_DOWN_SENT = "aspdownsent";
  49. public static final String ASP_DOWN = "aspdown";
  50. public static final String ASP_DOWN_ACK = "aspdownack";
  51. public static final String HEARTBEAT = "heartbeat";
  52. public static final String HEARTBEAT_ACK = "heartbeatack";
  53. public static final String ASP_INACTIVE_SENT = "aspinactivesent";
  54. public static final String ASP_INACTIVE = "aspinactive";
  55. public static final String ASP_INACTIVE_ACK = "aspinactiveack";
  56. public static final String ASP_ACTIVE = "aspactive";
  57. public static final String ASP_ACTIVE_SENT = "aspactivesent";
  58. public static final String ASP_ACTIVE_ACK = "aspactiveack";
  59. public static final String AS_DOWN = "asdown";
  60. public static final String AS_INACTIVE = "asinactive";
  61. public static final String AS_STATE_CHANGE_RESERVE = "ntfyreserve";
  62. public static final String AS_STATE_CHANGE_INACTIVE = "ntfyasinactive";
  63. public static final String AS_STATE_CHANGE_ACTIVE = "ntfyasactive";
  64. public static final String AS_STATE_CHANGE_PENDING = "ntfyaspending";
  65. public static final String OTHER_INSUFFICIENT_ASP = "ntfyinsuffasp";
  66. public static final String OTHER_ALTERNATE_ASP_ACTIVE = "ntfyaltaspact";
  67. public static final String OTHER_ALTERNATE_ASP_FAILURE = "ntfyaltaspfail";
  68. public static final String INVALID_RC = "invalidrc";
  69. private static HashMap<Integer, HashMap<Integer, String>> transContainer = new HashMap<Integer, HashMap<Integer, String>>();
  70. static {
  71. // Transfer
  72. HashMap<Integer, String> trfrTransCont = new HashMap<Integer, String>();
  73. trfrTransCont.put(MessageType.PAYLOAD, PAYLOAD);
  74. transContainer.put(MessageClass.TRANSFER_MESSAGES, trfrTransCont);
  75. // SSNM
  76. HashMap<Integer, String> ssnmTransCont = new HashMap<Integer, String>();
  77. ssnmTransCont.put(MessageType.DESTINATION_UNAVAILABLE, DUNA);
  78. ssnmTransCont.put(MessageType.DESTINATION_AVAILABLE, DAVA);
  79. ssnmTransCont.put(MessageType.DESTINATION_STATE_AUDIT, DAUD);
  80. ssnmTransCont.put(MessageType.SIGNALING_CONGESTION, SCON);
  81. ssnmTransCont.put(MessageType.DESTINATION_USER_PART_UNAVAILABLE, DUPU);
  82. ssnmTransCont.put(MessageType.DESTINATION_RESTRICTED, DRST);
  83. transContainer.put(MessageClass.SIGNALING_NETWORK_MANAGEMENT, ssnmTransCont);
  84. // ASPSM
  85. HashMap<Integer, String> aspsmTransCont = new HashMap<Integer, String>();
  86. aspsmTransCont.put(MessageType.ASP_UP, ASP_UP);
  87. aspsmTransCont.put(MessageType.ASP_UP_ACK, ASP_UP_ACK);
  88. aspsmTransCont.put(MessageType.ASP_DOWN, ASP_DOWN);
  89. aspsmTransCont.put(MessageType.ASP_DOWN_ACK, ASP_DOWN_ACK);
  90. aspsmTransCont.put(MessageType.HEARTBEAT, HEARTBEAT);
  91. aspsmTransCont.put(MessageType.HEARTBEAT_ACK, HEARTBEAT_ACK);
  92. transContainer.put(MessageClass.ASP_STATE_MAINTENANCE, aspsmTransCont);
  93. // ASPTM
  94. HashMap<Integer, String> asptmTransCont = new HashMap<Integer, String>();
  95. asptmTransCont.put(MessageType.ASP_ACTIVE, ASP_ACTIVE);
  96. asptmTransCont.put(MessageType.ASP_ACTIVE_ACK, ASP_ACTIVE_ACK);
  97. asptmTransCont.put(MessageType.ASP_INACTIVE, ASP_INACTIVE);
  98. asptmTransCont.put(MessageType.ASP_INACTIVE_ACK, ASP_INACTIVE_ACK);
  99. transContainer.put(MessageClass.ASP_TRAFFIC_MAINTENANCE, asptmTransCont);
  100. // MGMT
  101. HashMap<Integer, String> mgmtTransCont = new HashMap<Integer, String>();
  102. // NTFY
  103. mgmtTransCont.put((Status.STATUS_AS_State_Change << 16 | Status.INFO_Reserved), AS_STATE_CHANGE_RESERVE);
  104. mgmtTransCont.put((Status.STATUS_AS_State_Change << 16 | Status.INFO_AS_INACTIVE), AS_STATE_CHANGE_INACTIVE);
  105. mgmtTransCont.put((Status.STATUS_AS_State_Change << 16 | Status.INFO_AS_ACTIVE), AS_STATE_CHANGE_ACTIVE);
  106. mgmtTransCont.put((Status.STATUS_AS_State_Change << 16 | Status.INFO_AS_PENDING), AS_STATE_CHANGE_PENDING);
  107. mgmtTransCont.put((Status.STATUS_Other << 16 | Status.INFO_Insufficient_ASP_Resources_Active),
  108. OTHER_INSUFFICIENT_ASP);
  109. mgmtTransCont.put((Status.STATUS_Other << 16 | Status.INFO_Alternate_ASP_Active), OTHER_ALTERNATE_ASP_ACTIVE);
  110. mgmtTransCont.put((Status.STATUS_Other << 16 | Status.INFO_Alternate_ASP_Failure), OTHER_ALTERNATE_ASP_FAILURE);
  111. // Err cde
  112. mgmtTransCont.put(ErrorCode.Invalid_Routing_Context, INVALID_RC);
  113. transContainer.put(MessageClass.MANAGEMENT, mgmtTransCont);
  114. }
  115. public static String getTransition(M3UAMessage message) {
  116. switch (message.getMessageClass()) {
  117. case MessageClass.MANAGEMENT:
  118. switch (message.getMessageType()) {
  119. case MessageType.ERROR:
  120. case MessageType.NOTIFY:
  121. Status status = ((Notify) message).getStatus();
  122. return transContainer.get(message.getMessageClass()).get((status.getType() << 16 | status.getInfo()));
  123. }
  124. default:
  125. return transContainer.get(message.getMessageClass()).get(message.getMessageType());
  126. }
  127. }
  128. }