Package org.protocol.gtp.prime

Source Code of org.protocol.gtp.prime.GtpPrimeMessage

/**
*
*/
package org.protocol.gtp.prime;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;

import org.protocol.gtp.prime.iet.GtpPrimeInformationElementTLV;
import org.protocol.gtp.prime.iet.GtpPrimeInformationElementTV;

/**
* @author krychu
*
*/
public class GtpPrimeMessage {

  protected GtpPrimeHeader header;
  protected ArrayList<GtpPrimeInformationElement> iet;
 
  public GtpPrimeMessage() {
    header = new GtpPrimeHeader();
    iet = new ArrayList<GtpPrimeInformationElement>();
  }
 
  public GtpPrimeMessage(GtpPrimeHeader header, byte[] message) {
    this.header = header;
    decodeIets(message, 6, getPayloadSize());
  }
 
  private void decodeIets(byte[] message, int start, int end) {
           
    if ((start >= end) || (start >= message.length)) return;
    byte type = message[start];
   
    // TLV
    if (((type >> 7)&0x01) == 1) {
      GtpPrimeInformationElementTLV tlv = new GtpPrimeInformationElementTLV(message,start);
      addInformationElement(tlv);     
      start += tlv.getTotalSize();               
    } else {
      // TV
      addInformationElement(new GtpPrimeInformationElementTV((short)(type & 0x00FF),(short)(message[start+1] & 0x00FF)));
      start += 2;
    }
    if (start < end) decodeIets(message, start, end);
  }
 
  public byte[] toByteArray() {   
   
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    ByteArrayOutputStream out_iets = new ByteArrayOutputStream();
    try {
      for (GtpPrimeInformationElement g: iet) {
        out_iets.write(g.toByteArray());       
      }
      header.setLength((short)out_iets.size());
      out.write(header.toByteArray());
      out.write(out_iets.toByteArray());
    } catch (IOException ex) {
      ex.printStackTrace();
    }
   
    return out.toByteArray();
  }

  public GtpPrimeHeader getHeader() {
    return header;
  }

  public void setHeader(GtpPrimeHeader header) {
    this.header = header;
  }
 
  public void addInformationElement(GtpPrimeInformationElement el) {
    if (this.iet == null) this.iet = new ArrayList<GtpPrimeInformationElement>();
    this.iet.add(el);
  }
 
  public GtpPrimeInformationElement getInformationElement(short type) {
   
    GtpPrimeInformationElement tmp = null;
    for (GtpPrimeInformationElement g : iet) {
      if (g.getIEType() == type ) {
        tmp = g;
        break;
      }
    }
    return tmp;
  }

        public String toString() {
            StringBuilder b = new StringBuilder();
            b.append(this.header.toString());
            for (GtpPrimeInformationElement gtpie : iet)
               b.append(gtpie.toString());
            return b.toString();
       

 
  public int getPayloadSize() {
      return header.getLength();
  }

  public int getMessageSize() {
      return getPayloadSize() + header.getHeaderSize();
  }

  public int getTotalMessageSize() {
     int size = header.getHeaderSize();
     for (GtpPrimeInformationElement gtpie : iet)
    size += gtpie.getTotalSize();
     return size;
  }

}
TOP

Related Classes of org.protocol.gtp.prime.GtpPrimeMessage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.