All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.restcomm.protocols.ss7.m3ua.impl.TransitionState Maven / Gradle / Ivy

/*
 * JBoss, Home of Professional Open Source
 * Copyright 2011, Red Hat, Inc. and individual contributors
 * by the @authors tag. See the copyright.txt in the distribution for a
 * full listing of individual contributors.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */

package org.restcomm.protocols.ss7.m3ua.impl;

import java.util.HashMap;

import org.restcomm.protocols.ss7.m3ua.message.M3UAMessage;
import org.restcomm.protocols.ss7.m3ua.message.MessageClass;
import org.restcomm.protocols.ss7.m3ua.message.MessageType;
import org.restcomm.protocols.ss7.m3ua.message.mgmt.Notify;
import org.restcomm.protocols.ss7.m3ua.parameter.ErrorCode;
import org.restcomm.protocols.ss7.m3ua.parameter.Status;

/**
 *
 * @author amit bhayani
 *
 */
public class TransitionState {
    public static final String COMM_UP = "commup";
    public static final String COMM_DOWN = "commdown";
    public static final String PAYLOAD = "payload";

    public static final String DUNA = "duna";
    public static final String DAVA = "dava";
    public static final String DAUD = "daud";
    public static final String SCON = "scon";
    public static final String DUPU = "dupu";
    public static final String DRST = "drst";

    public static final String ASP_UP_SENT = "aspupsent";
    public static final String ASP_UP = "aspup";
    public static final String ASP_UP_ACK = "aspupack";

    public static final String ASP_DOWN_SENT = "aspdownsent";
    public static final String ASP_DOWN = "aspdown";
    public static final String ASP_DOWN_ACK = "aspdownack";

    public static final String HEARTBEAT = "heartbeat";
    public static final String HEARTBEAT_ACK = "heartbeatack";

    public static final String ASP_INACTIVE_SENT = "aspinactivesent";
    public static final String ASP_INACTIVE = "aspinactive";
    public static final String ASP_INACTIVE_ACK = "aspinactiveack";

    public static final String ASP_ACTIVE = "aspactive";
    public static final String ASP_ACTIVE_SENT = "aspactivesent";
    public static final String ASP_ACTIVE_ACK = "aspactiveack";

    public static final String AS_DOWN = "asdown";
    public static final String AS_INACTIVE = "asinactive";

    public static final String AS_STATE_CHANGE_RESERVE = "ntfyreserve";
    public static final String AS_STATE_CHANGE_INACTIVE = "ntfyasinactive";
    public static final String AS_STATE_CHANGE_ACTIVE = "ntfyasactive";
    public static final String AS_STATE_CHANGE_PENDING = "ntfyaspending";

    public static final String OTHER_INSUFFICIENT_ASP = "ntfyinsuffasp";
    public static final String OTHER_ALTERNATE_ASP_ACTIVE = "ntfyaltaspact";
    public static final String OTHER_ALTERNATE_ASP_FAILURE = "ntfyaltaspfail";

    public static final String INVALID_RC = "invalidrc";

    private static HashMap> transContainer = new HashMap>();

    static {

        // Transfer
        HashMap trfrTransCont = new HashMap();
        trfrTransCont.put(MessageType.PAYLOAD, PAYLOAD);

        transContainer.put(MessageClass.TRANSFER_MESSAGES, trfrTransCont);

        // SSNM
        HashMap ssnmTransCont = new HashMap();
        ssnmTransCont.put(MessageType.DESTINATION_UNAVAILABLE, DUNA);
        ssnmTransCont.put(MessageType.DESTINATION_AVAILABLE, DAVA);
        ssnmTransCont.put(MessageType.DESTINATION_STATE_AUDIT, DAUD);
        ssnmTransCont.put(MessageType.SIGNALING_CONGESTION, SCON);
        ssnmTransCont.put(MessageType.DESTINATION_USER_PART_UNAVAILABLE, DUPU);
        ssnmTransCont.put(MessageType.DESTINATION_RESTRICTED, DRST);

        transContainer.put(MessageClass.SIGNALING_NETWORK_MANAGEMENT, ssnmTransCont);

        // ASPSM
        HashMap aspsmTransCont = new HashMap();
        aspsmTransCont.put(MessageType.ASP_UP, ASP_UP);
        aspsmTransCont.put(MessageType.ASP_UP_ACK, ASP_UP_ACK);
        aspsmTransCont.put(MessageType.ASP_DOWN, ASP_DOWN);
        aspsmTransCont.put(MessageType.ASP_DOWN_ACK, ASP_DOWN_ACK);
        aspsmTransCont.put(MessageType.HEARTBEAT, HEARTBEAT);
        aspsmTransCont.put(MessageType.HEARTBEAT_ACK, HEARTBEAT_ACK);

        transContainer.put(MessageClass.ASP_STATE_MAINTENANCE, aspsmTransCont);

        // ASPTM
        HashMap asptmTransCont = new HashMap();
        asptmTransCont.put(MessageType.ASP_ACTIVE, ASP_ACTIVE);
        asptmTransCont.put(MessageType.ASP_ACTIVE_ACK, ASP_ACTIVE_ACK);
        asptmTransCont.put(MessageType.ASP_INACTIVE, ASP_INACTIVE);
        asptmTransCont.put(MessageType.ASP_INACTIVE_ACK, ASP_INACTIVE_ACK);

        transContainer.put(MessageClass.ASP_TRAFFIC_MAINTENANCE, asptmTransCont);

        // MGMT
        HashMap mgmtTransCont = new HashMap();

        // NTFY
        mgmtTransCont.put((Status.STATUS_AS_State_Change << 16 | Status.INFO_Reserved), AS_STATE_CHANGE_RESERVE);
        mgmtTransCont.put((Status.STATUS_AS_State_Change << 16 | Status.INFO_AS_INACTIVE), AS_STATE_CHANGE_INACTIVE);
        mgmtTransCont.put((Status.STATUS_AS_State_Change << 16 | Status.INFO_AS_ACTIVE), AS_STATE_CHANGE_ACTIVE);
        mgmtTransCont.put((Status.STATUS_AS_State_Change << 16 | Status.INFO_AS_PENDING), AS_STATE_CHANGE_PENDING);

        mgmtTransCont.put((Status.STATUS_Other << 16 | Status.INFO_Insufficient_ASP_Resources_Active), OTHER_INSUFFICIENT_ASP);
        mgmtTransCont.put((Status.STATUS_Other << 16 | Status.INFO_Alternate_ASP_Active), OTHER_ALTERNATE_ASP_ACTIVE);
        mgmtTransCont.put((Status.STATUS_Other << 16 | Status.INFO_Alternate_ASP_Failure), OTHER_ALTERNATE_ASP_FAILURE);
        // Err cde
        mgmtTransCont.put(ErrorCode.Invalid_Routing_Context, INVALID_RC);

        transContainer.put(MessageClass.MANAGEMENT, mgmtTransCont);
    }

    public static String getTransition(M3UAMessage message) {
        switch (message.getMessageClass()) {
            case MessageClass.MANAGEMENT:
                switch (message.getMessageType()) {
                    case MessageType.ERROR:
                    case MessageType.NOTIFY:
                        Status status = ((Notify) message).getStatus();
                        return transContainer.get(message.getMessageClass()).get((status.getType() << 16 | status.getInfo()));
                }
            default:
                return transContainer.get(message.getMessageClass()).get(message.getMessageType());
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy