/protocols/ss7/mtp/mtp-impl/src/main/java/org/mobicents/protocols/ss7/mtp/util/MTPUtility.java
http://mobicents.googlecode.com/ · Java · 134 lines · 38 code · 11 blank · 85 comment · 0 complexity · 4dd3ec0c2f28d241177788818a3ea35d MD5 · raw file
- /*
- * 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.mtp.util;
-
- /**
- * Small class to define methods of use to o
- *
- * @author baranowb
- *
- */
- public class MTPUtility {
-
- /**
- * Extract routing information from source[], it expects that source is
- * properly encoded routing label atleast(5bytes long, same as dest). It
- * copies data to <b>dest</b> and swamp <i>DPC</i> with <i>OPC</i>.
- *
- * @param source
- * @param dest
- */
- public static void copyBackRouteHeader(byte[] source, byte[] dest) {
- int thisPointCode = getFromSif_DPC(source, 1);
- int remotePointCode = getFromSif_OPC(source, 1);
- int sls = getFromSif_SLS(source, 1);
- int si = getFromSif_SI(source);
- int ssi = getFromSif_SSI(source);
- writeRoutingLabel(dest, si, ssi, sls, remotePointCode, thisPointCode);
- }
-
- /**
- * Retrieves DPC from SIF. SIF starts from byte 1 in MSU. For MSU
- * [SIO,DPC,OPC,SLS,Data], call would look as following: int dpc =
- * getFromSif_DPC(MSU,1);
- *
- * @param sif
- * - byte[] - either SIF or MSU
- * @param shift
- * - shift in passed byte[]. For MSU its 1. For SIF part of MSU
- * it will be 0;
- * @return
- */
- public static final int getFromSif_DPC(byte[] sif, int shift) {
- int dpc = (sif[0 + shift] & 0xff | ((sif[1 + shift] & 0x3f) << 8));
- return dpc;
- }
-
- /**
- * Retrieves OPC from SIF. SIF starts from byte 1 in MSU. For MSU
- * [SIO,DPC,OPC,SLS,Data], call would look as following: int opc =
- * getFromSif_OPC(MSU,1);
- *
- * @param sif
- * - byte[] - either SIF or MSU
- * @param shift
- * - shift in passed byte[]. For MSU its 1. For SIF part of MSU
- * it will be 0;
- * @return
- */
- public static final int getFromSif_OPC(byte[] sif, int shift) {
- int opc = ((sif[1 + shift] & 0xC0) >> 6) | ((sif[2 + shift] & 0xff) << 2) | ((sif[3 + shift] & 0x0f) << 10);
- return opc;
- }
-
- /**
- * Retrieves SLS from SIF. SIF starts from byte 1 in MSU. For MSU
- * [SIO,DPC,OPC,SLS,Data], call would look as following: int opc =
- * getFromSif_SLS(MSU,1);
- *
- * @param sif
- * - byte[] - either SIF or MSU
- * @param shift
- * - shift in passed byte[]. For MSU its 1. For SIF part of MSU
- * it will be 0;
- * @return
- */
- public static final int getFromSif_SLS(byte[] sif, int shift) {
- int sls = (sif[3 + shift] & 0xf0) >>> 4;
- return sls;
- }
-
- public static final int getFromSif_SI(byte[] data) {
-
- int serviceIndicator = data[0] & 0x0f;
- return serviceIndicator;
- }
-
- public static final int getFromSif_SSI(byte[] data) {
- // see Q.704.14.2
- int subserviceIndicator = (data[0] >> 4) & 0x0F;
- return subserviceIndicator;
- }
-
- /**
- * Encodes routing label into passed byte[]. It has to be at least 5 bytes
- * long!
- *
- * @param destination
- * @param si
- * @param ssi
- * @param sls
- * @param dpc
- * @param opc
- */
- public static void writeRoutingLabel(byte[] destination, int si, int ssi, int sls, int dpc, int opc) {
- // see Q.704.14.2
- destination[0] = (byte) (((ssi & 0x0F) << 4) | (si & 0x0F));
- destination[1] = (byte) dpc;
- destination[2] = (byte) (((dpc >> 8) & 0x3F) | ((opc & 0x03) << 6));
- destination[3] = (byte) (opc >> 2);
- destination[4] = (byte) (((opc >> 10) & 0x0F) | ((sls & 0x0F) << 4));
- // sif[4] = (byte) (((opc>> 10) & 0x0F) | ((0 & 0x0F) << 4));
- }
-
- }