/*
* 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.tools.traceparser;
import java.util.HashMap;
import java.util.concurrent.ScheduledExecutorService;
import org.mobicents.protocols.ss7.sccp.parameter.SccpAddress;
import org.mobicents.protocols.ss7.tcap.DialogImpl;
import org.mobicents.protocols.ss7.tcap.TCAPProviderImpl;
import org.mobicents.protocols.ss7.tcap.api.TCAPSendException;
import org.mobicents.protocols.ss7.tcap.api.tc.dialog.TRPseudoState;
import org.mobicents.protocols.ss7.tcap.api.tc.dialog.events.TCUserAbortRequest;
import org.mobicents.protocols.ss7.tcap.asn.comp.Component;
import org.mobicents.protocols.ss7.tcap.asn.comp.ComponentType;
import org.mobicents.protocols.ss7.tcap.asn.comp.Invoke;
import org.mobicents.protocols.ss7.tcap.asn.comp.Return;
import org.mobicents.protocols.ss7.tcap.asn.comp.TCAbortMessage;
import org.mobicents.protocols.ss7.tcap.asn.comp.TCBeginMessage;
import org.mobicents.protocols.ss7.tcap.asn.comp.TCContinueMessage;
import org.mobicents.protocols.ss7.tcap.asn.comp.TCEndMessage;
/**
*
* @author sergey vetyutnev
*
*/
public class DialogImplWrapper extends DialogImpl {
private int acnValue;
private int acnVersion;
protected int curOpcOrig;
protected int curOpc;
public DialogImplWrapper(SccpAddress localAddress, SccpAddress remoteAddress, Long origTransactionId, boolean structured,
ScheduledExecutorService executor, TCAPProviderImpl provider, int seqControl) {
super(localAddress, remoteAddress, origTransactionId, structured, executor, provider, seqControl, true);
}
public int getAcnValue() {
return acnValue;
}
public int getAcnVersion() {
return acnVersion;
}
public void setAcnValue(int v) {
acnValue = v;
}
public void setAcnVersion(int v) {
acnVersion = v;
}
public void SetStateActive() {
this.setState(TRPseudoState.Active);
}
private HashMap<Long, Invoke> invLst = new HashMap<Long, Invoke>();
@Override
protected Component[] processOperationsState(Component[] components) {
if (components == null)
return null;
for (Component c : components) {
// adding 1 to InvokeId: excluding 0 value
c.setInvokeId(c.getInvokeId() + 1);
boolean rev = false;
if (curOpc == this.curOpcOrig) {
if (c.getType() != ComponentType.Invoke)
rev = true;
} else {
if (c.getType() == ComponentType.Invoke)
rev = true;
}
if (rev) {
c.setInvokeId(-c.getInvokeId());
}
switch (c.getType()) {
case Invoke:
invLst.put(c.getInvokeId(), (Invoke) c);
break;
case ReturnResult:
case ReturnResultLast:
Return rr = (Return) c;
Invoke inv = invLst.get(c.getInvokeId());
if (rr.getOperationCode() == null) {
if (inv != null) {
rr.setOperationCode(inv.getOperationCode());
}
}
break;
}
}
return components;
}
@Override
public void processAbort(TCAbortMessage msg, SccpAddress localAddress2, SccpAddress remoteAddress2) {
super.processAbort(msg, localAddress2, remoteAddress2);
}
@Override
public void processEnd(TCEndMessage msg, SccpAddress localAddress2, SccpAddress remoteAddress2) {
super.processEnd(msg, localAddress2, remoteAddress2);
}
@Override
public void processContinue(TCContinueMessage msg, SccpAddress localAddress2, SccpAddress remoteAddress2) {
super.processContinue(msg, localAddress2, remoteAddress2);
}
@Override
public void processBegin(TCBeginMessage msg, SccpAddress localAddress2, SccpAddress remoteAddress2) {
super.processBegin(msg, localAddress2, remoteAddress2);
}
public void send(TCUserAbortRequest event) throws TCAPSendException {
}
}