Package com.fineqt.fpb.lib.api.util.buffer

Examples of com.fineqt.fpb.lib.api.util.buffer.IReadWritableBitBuffer


    @Override
    public int encode(EncodeContext cxt, PValue value, int parentLength,
        PTypeConstraintStorage constraint, ByteOrder byteOrder, PFpbTypeEVAttrs priorityAttrs)
        throws EncodeException {
      if (cxt.withEncodeAction()) {
          IReadWritableBitBuffer buffer = cxt.getBuffer();
        //Header开始位置
        int startOffset = buffer.position();
        int result = super.encode(cxt, value, parentLength, constraint, byteOrder,
            priorityAttrs);
        //Header结束位置
        int curPosition = cxt.getBuffer().position();
        try {
          //取得Header数据
          assert startOffset % FpbConstants.OCTET_BITS == 0;
          assert curPosition % FpbConstants.OCTET_BITS == 0;
          int byteLen = (curPosition - startOffset) / FpbConstants.OCTET_BITS;
          byte[] headerData = new byte[byteLen];
          buffer.position(startOffset);
          buffer.getByte(headerData);
          //计算Checksum
          byte[] checksum = FpbUtils.internetChecksum(headerData);
          buffer.position(startOffset + CHECKSUM_FIELD_OFFSET);
          buffer.putByte(checksum);
        } catch (BitBufferException e) {
          throw new EncodeException(targetTypeMeta,
              MetaException.CODE.BIT_BUFFER_EXCEPTION_ERROR, e);
        }
        //恢复Position
        buffer.position(curPosition);
        return result;
      } else {
        return super.encode(cxt, value, parentLength, constraint, byteOrder,
            priorityAttrs);
      }
View Full Code Here


    @Override
    public int encode(EncodeContext cxt, PValue value, int parentLength,
        PTypeConstraintStorage constraint, ByteOrder byteOrder, PFpbTypeEVAttrs priorityAttrs)
        throws EncodeException {
      if (cxt.withEncodeAction()) {
          IReadWritableBitBuffer buffer = cxt.getBuffer();
        //Header开始位置
        int startOffset = buffer.position();
        int result = super.encode(cxt, value, parentLength, constraint, byteOrder,
            priorityAttrs);
        //Header结束位置
        int curPosition = cxt.getBuffer().position();
        try {
          assert startOffset % FpbConstants.OCTET_BITS == 0;
          assert curPosition % FpbConstants.OCTET_BITS == 0;
          int icmpPrtlBytes = (curPosition - startOffset) / FpbConstants.OCTET_BITS;
          byte[] pseudoBlock = new byte[PSEUDO_HEADER_BYTES + icmpPrtlBytes];
          //填充虚头部数据
          fillPseudoHeader(cxt, pseudoBlock, icmpPrtlBytes);

          //取得Icmp协议的数据并填充
          buffer.position(startOffset);
          buffer.getByte(pseudoBlock, PSEUDO_HEADER_BYTES,  icmpPrtlBytes);
          //计算Checksum
          byte[] checksum = FpbUtils.internetChecksum(pseudoBlock);
          buffer.position(startOffset + ICMP_CHECKSUM_FIELD_OFFSET);
          buffer.putByte(checksum);
        } catch (BitBufferException e) {
          throw new EncodeException(targetTypeMeta,
              MetaException.CODE.BIT_BUFFER_EXCEPTION_ERROR, e);
        }
        //恢复Position
        buffer.position(curPosition);
        return result;
      } else {
        return super.encode(cxt, value, parentLength, constraint, byteOrder,
            priorityAttrs);
      }
View Full Code Here

    @Override
    public int encode(EncodeContext cxt, PValue value, int parentLength,
        PTypeConstraintStorage constraint, ByteOrder byteOrder, PFpbTypeEVAttrs priorityAttrs)
        throws EncodeException {
      if (cxt.withEncodeAction()) {
        IReadWritableBitBuffer buffer = cxt.getBuffer();
        //Header开始位置
        int startOffset = buffer.position();
        int result = super.encode(cxt, value, parentLength, constraint, byteOrder,
            priorityAttrs);
        //Header结束位置
        int curPosition = cxt.getBuffer().position();
        try {
          //取得Header数据
          assert startOffset % FpbConstants.OCTET_BITS == 0;
          assert curPosition % FpbConstants.OCTET_BITS == 0;
          int byteLen = (curPosition - startOffset) / FpbConstants.OCTET_BITS;
          byte[] headerData = new byte[byteLen];
          buffer.position(startOffset);
          buffer.getByte(headerData);
          //计算Checksum
          byte[] checksum = FpbUtils.internetChecksum(headerData);
          buffer.position(startOffset + CHECKSUM_FIELD_OFFSET);
          buffer.putByte(checksum);
        } catch (BitBufferException e) {
          throw new EncodeException(targetTypeMeta,
              MetaException.CODE.BIT_BUFFER_EXCEPTION_ERROR, e);
        }
        //回复Position
        buffer.position(curPosition);
        return result;
      } else {
        return super.encode(cxt, value, parentLength, constraint, byteOrder,
            priorityAttrs);
      }
View Full Code Here

    @Override
    public int encode(EncodeContext cxt, PValue value, int parentLength,
        PTypeConstraintStorage constraint, ByteOrder byteOrder, PFpbTypeEVAttrs priorityAttrs)
        throws EncodeException {
      if (cxt.withEncodeAction()) {
          IReadWritableBitBuffer buffer = cxt.getBuffer();
        //Segment开始位置
        int startOffset = buffer.position();
        int result = super.encode(cxt, value, parentLength, constraint, byteOrder,
            priorityAttrs);
        //Segment结束位置
        int curPosition = cxt.getBuffer().position();
        try {
          assert startOffset % FpbConstants.OCTET_BITS == 0;
          assert curPosition % FpbConstants.OCTET_BITS == 0;
          IRecordSetValue ipHeader;
          byte[] pseudoBlock;
          int upperPrtlBytes = (curPosition - startOffset) / FpbConstants.OCTET_BITS;
          //取得IPV4 Header
          ipHeader = (IRecordSetValue)cxt.getFieldStackMap().peekField(
              Ipv4TypeEVExtFactory.HEADER_FIELD);
          if (ipHeader != null) {
            pseudoBlock = createV4PseudoHeader(cxt, (IContainerValue)value,
                ipHeader, upperPrtlBytes, startOffset);
          } else {
            //取得IPV6 Header
            ipHeader = (IRecordSetValue)cxt.getFieldStackMap().peekField(
                Ipv6TypeEVExtFactory.HEADER_FIELD);
            if (ipHeader != null) {
              pseudoBlock = createV6PseudoHeader(cxt, (IContainerValue)value,
                  ipHeader, upperPrtlBytes, startOffset);
            } else {
              throw new EncodeException(targetTypeMeta,
                  MetaException.CODE.LOWER_LAYER_PROTOCOL_WRONG_ERROR,
                  "Ipv4Protocol or Ipv6Protocol");
            }
          }
          //计算Checksum
          byte[] checksum = FpbUtils.internetChecksum(pseudoBlock);
          if (isUdp) {
            buffer.position(startOffset + UDP_CHECKSUM_FIELD_OFFSET);
            //UDP的特殊处理0x0000->0xFFFF
            if (checksum[0] == 0 && checksum[1] == 0) {
              checksum[0] = (byte)0xFF;
              checksum[1] = (byte)0xFF;
            }
          } else {
            buffer.position(startOffset + TCP_CHECKSUM_FIELD_OFFSET);
          }
          buffer.putByte(checksum);
        } catch (BitBufferException e) {
          throw new EncodeException(targetTypeMeta,
              MetaException.CODE.BIT_BUFFER_EXCEPTION_ERROR, e);
        }
        //恢复Position
        buffer.position(curPosition);
        return result;
      } else {
        return super.encode(cxt, value, parentLength, constraint, byteOrder,
            priorityAttrs);
      }
View Full Code Here

          Ipv4TypeEVExtFactory.IPV4_HEADER_PROTOCOL);
      pseudoBuffer.put((byte)iValue.getInteger());
      //segment length
      pseudoBuffer.putShort((short)upperPrtlBytes);
      //取得UDP数据并填充
      IReadWritableBitBuffer encodeBuffer = cxt.getBuffer();
      encodeBuffer.position(startOffset);
      encodeBuffer.getByte(pseudoBlock, V4_PSEUDO_HEADER_BYTES,  upperPrtlBytes);
      return pseudoBlock;
    }
View Full Code Here

        pseudoBuffer.put(UDP_NEXT_HEADER);
      } else {
        pseudoBuffer.put(TCP_NEXT_HEADER);
      }
      //取得Segment数据并填充
      IReadWritableBitBuffer encodeBuffer = cxt.getBuffer();
      encodeBuffer.position(startOffset);
      encodeBuffer.getByte(pseudoBlock, V6_PSEUDO_HEADER_BYTES,  upperPrtlBytes);
      return pseudoBlock;
    }
View Full Code Here

TOP

Related Classes of com.fineqt.fpb.lib.api.util.buffer.IReadWritableBitBuffer

Copyright © 2018 www.massapicom. 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.