/* * 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.mobicents.protocols.ss7.sccp.impl; import java.util.ArrayList; import java.util.List; import org.mobicents.protocols.ss7.mtp.Mtp3StatusCause; import org.mobicents.protocols.ss7.sccp.SccpProtocolVersion; import org.mobicents.protocols.ss7.sccp.impl.congestion.SccpCongestionControl; import org.mobicents.protocols.ss7.sccp.impl.mgmt.Mtp3PrimitiveMessage; import org.mobicents.protocols.ss7.sccp.impl.mgmt.SccpMgmtMessage; import org.mobicents.protocols.ss7.sccp.message.SccpDataMessage; import org.mobicents.protocols.ss7.sccp.message.SccpMessage; /** * @author baranowb * */ public class SccpManagementProxy extends SccpManagement { private int seq = 0; // seq, to mark messages, so we get them correctly // separate lists, thats better private List<SccpMgmtMessage> mgmtMessages = new ArrayList<SccpMgmtMessage>(); private List<Mtp3PrimitiveMessage> mtp3Messages = new ArrayList<Mtp3PrimitiveMessage>(); private boolean encounteredError = false; private SccpStackImpl sccpStackImpl; /** * @param sccpProviderImpl * @param sccpStackImpl */ public SccpManagementProxy(String name, SccpProviderImpl sccpProviderImpl, SccpStackImpl sccpStackImpl) { super(name, sccpProviderImpl, sccpStackImpl); this.sccpStackImpl = sccpStackImpl; } // =----------------= some getters public int getSeq() { return seq; } public boolean isEncounteredError() { return encounteredError; } public List<SccpMgmtMessage> getMgmtMessages() { return mgmtMessages; } public List<Mtp3PrimitiveMessage> getMtp3Messages() { return mtp3Messages; } // =----------------= deletage to intercept. public SccpRoutingControl getSccpRoutingControl() { return super.getSccpRoutingControl(); } public SccpCongestionControl getSccpCongestionControl() { return super.getSccpCongestionControl(); } public void setSccpRoutingControl(SccpRoutingControl sccpRoutingControl) { super.setSccpRoutingControl(sccpRoutingControl); } public void setSccpCongestionControl(SccpCongestionControl sccpCongestionControl) { super.setSccpCongestionControl(sccpCongestionControl); } @Override public void onManagementMessage(SccpDataMessage message) { byte[] data = message.getData(); int messgType = data[0]; int affectedSsn = data[1]; int affectedPc; int subsystemMultiplicity; if (sccpStackImpl.getSccpProtocolVersion() == SccpProtocolVersion.ANSI) { affectedPc = (data[2] & 0xff) | ((data[3] & 0xff) << 8) | ((data[4] & 0xff) << 16); subsystemMultiplicity = data[5] & 0xff; } else { affectedPc = (data[2] & 0xff) | ((data[3] & 0xff) << 8); subsystemMultiplicity = data[4] & 0xff; } SccpMgmtMessage mgmtMessage = new SccpMgmtMessage(seq++, messgType, affectedSsn, affectedPc, subsystemMultiplicity); mgmtMessages.add(mgmtMessage); super.onManagementMessage(message); } @Override protected void recdMsgForProhibitedSsn(SccpMessage msg, int ssn) { super.recdMsgForProhibitedSsn(msg, ssn); } public void start() { super.start(); } public void stop() { super.stop(); } @Override protected void handleMtp3Pause(int affectedPc) { super.handleMtp3Pause(affectedPc); Mtp3PrimitiveMessage prim = new Mtp3PrimitiveMessage(seq++, MTP3_PAUSE, affectedPc); mtp3Messages.add(prim); } @Override protected void handleMtp3Resume(int affectedPc) { super.handleMtp3Resume(affectedPc); Mtp3PrimitiveMessage prim = new Mtp3PrimitiveMessage(seq++, MTP3_RESUME, affectedPc); mtp3Messages.add(prim); } @Override protected void handleMtp3Status(Mtp3StatusCause cause, int affectedPc, int congStatus) { super.handleMtp3Status(cause, affectedPc, congStatus); int status = 0; int unavailabiltyCause = 0; switch (cause) { case SignallingNetworkCongested: status = 2; break; case UserPartUnavailability_Unknown: unavailabiltyCause = 0; status = 1; break; case UserPartUnavailability_UnequippedRemoteUser: unavailabiltyCause = 1; status = 1; break; case UserPartUnavailability_InaccessibleRemoteUser: unavailabiltyCause = 2; status = 1; break; } Mtp3PrimitiveMessage prim = new Mtp3PrimitiveMessage(seq++, MTP3_STATUS, affectedPc, status, congStatus, unavailabiltyCause); mtp3Messages.add(prim); } }