Package cn.com.zjtelecom.smgp.message

Source Code of cn.com.zjtelecom.smgp.message.SubmitMessage

package cn.com.zjtelecom.smgp.message;

import java.util.Vector;

import cn.com.zjtelecom.smgp.bean.Submit;
import cn.com.zjtelecom.smgp.protocol.RequestId;
import cn.com.zjtelecom.smgp.protocol.Tlv;
import cn.com.zjtelecom.smgp.protocol.TlvId;
import cn.com.zjtelecom.smgp.protocol.TlvUtil;
import cn.com.zjtelecom.util.Hex;
import cn.com.zjtelecom.util.TypeConvert;

public class SubmitMessage extends Message {

  private Submit submit;

  public SubmitMessage(byte[] buffer) {
    this.sequence_Id = TypeConvert.byte2int(buffer, 4);
    this.submit = new Submit();
    submit.setMsgType(buffer[8]);
    submit.setNeedReport(buffer[9]);
    submit.setPriority(buffer[10]);
    submit.setServiceID(TypeConvert.getString(buffer, 11, 0, 10));
    submit.setFeetype(TypeConvert.getString(buffer, 21, 0, 2));
    submit.setFeeCode(TypeConvert.getString(buffer, 23, 0, 6));
    submit.setFixedFee(TypeConvert.getString(buffer, 29, 0, 6));
    submit.setMsgFormat(buffer[35]);
    submit.setValidTime(TypeConvert.getString(buffer, 36, 0, 17));
    submit.setAtTime(TypeConvert.getString(buffer, 53, 0, 17));
    submit.setSrcTermid(TypeConvert.getString(buffer, 70, 0, 21));
    submit.setChargeTermid(TypeConvert.getString(buffer, 91, 0, 21));
    submit.setDestTermIDCountOnly4Server(buffer[112]);

    int cur = 113;
    if (submit.getDestTermIDCount() == 1) {
      submit.setDestTermid(TypeConvert.getString(buffer, cur, 0, 21));
      cur = cur + 21;
    } else {
      String[] destTermidArray = new String[submit.getDestTermIDCount()];
      for (int i = 0; i < submit.getDestTermIDCount(); i++) {
        destTermidArray[i] = TypeConvert.getString(buffer, cur, 0, 21);
        cur = cur + 21;
      }
      submit.setDestTermIDArrayOnly4Server(destTermidArray);
    }
    submit.setMsgLength(buffer[cur] & 0xFF);
    cur++;

    byte[] message = new byte[submit.getMsgLength()];
    System.arraycopy(buffer, cur, message, 0, message.length);
    submit.setMsgContent(message);
    cur = cur + message.length;
    byte[] reserv = new byte[8];
    System.arraycopy(buffer, cur, reserv, 0, reserv.length);
    cur = cur + 8;
    // ����дtlv
    if (cur < buffer.length) {
      //System.out.println("����tlv�ֶ�");
      byte[] tlv = new byte[buffer.length - cur];
      System.arraycopy(buffer, cur, tlv, 0, tlv.length);
      Tlv[] otherTlv = TlvUtil.TlvAnalysis(tlv);
      submit.setOtherTlvArray(otherTlv);
      for (int i = 0; i < otherTlv.length; i++) {
        if (otherTlv[i].Tag == TlvId.LinkID) {
          submit.setLinkID(otherTlv[i].Value);
        } else if (otherTlv[i].Tag == TlvId.Mserviceid) {
          submit.setProductID(otherTlv[i].Value);
        }else if (otherTlv[i].Tag == TlvId.TP_udhi) {
          submit.setTP_udhi(Integer.parseInt(otherTlv[i].Value));
        }
      }

    }

  }

  public SubmitMessage(int msgtype, int needreport, int priority,
      String serviceid, String feetype, String feecode, String fixedfee,
      int msgformat, String validtime, String attime, String srctermid,
      String chargetermid, String[] desttermid, int msglength,
      byte[] msgcontent, byte[] reserve, Tlv[] tlvarray, int SequenceId) {
    this.sequence_Id = SequenceId;
    int tlvlength = 0;
    /*
     * for (int i = 0; i < tlvarray.length; i++) { tlvlength +=
     * tlvarray[i].Length + 4; }
     */
    for (int i = 0; i < tlvarray.length; i++) {
      tlvlength += tlvarray[i].TlvBuf.length;
    }

    int len = 126 + 21 * desttermid.length + msgcontent.length + tlvlength;
    buf = new byte[len];
    // System.out.println("len:"+len);
    TypeConvert.int2byte(len, buf, 0); // PacketLength
    TypeConvert.int2byte(RequestId.Submit, buf, 4); // RequestID
    TypeConvert.int2byte(this.sequence_Id, buf, 8); // sequence_Id
    buf[12] = (byte) msgtype;
    buf[13] = (byte) needreport;
    buf[14] = (byte) priority;
    System.arraycopy(serviceid.getBytes(), 0, buf, 15, serviceid.length());
    System.arraycopy(feetype.getBytes(), 0, buf, 25, feetype.length());
    System.arraycopy(feecode.getBytes(), 0, buf, 27, feecode.length());
    System.arraycopy(fixedfee.getBytes(), 0, buf, 33, fixedfee.length());
    buf[39] = (byte) msgformat;
    if (validtime != null && validtime.length() > 0)
      System.arraycopy(validtime.getBytes(), 0, buf, 40, 16);
    if (attime != null && attime.length() > 0)
      System.arraycopy(attime.getBytes(), 0, buf, 57, 16);
    System.arraycopy(srctermid.getBytes(), 0, buf, 74, srctermid.length());
    System.arraycopy(chargetermid.getBytes(), 0, buf, 95, chargetermid
        .length());
    buf[116] = (byte) desttermid.length;
    int i = 0;
    for (i = 0; i < desttermid.length; i++)
      System.arraycopy(desttermid[i].getBytes(), 0, buf, 117 + i * 21,
          desttermid[i].length());

    int loc = 117 + i * 21;
    // System.out.println("DEbug msglen:"+msgcontent.length);
    // System.out.println("msg:"+new String(msgcontent));
    buf[loc] = (byte) msgcontent.length;
    System.arraycopy(msgcontent, 0, buf, loc + 1, msgcontent.length);
    loc = loc + msgcontent.length + 1;
    if (reserve != null)
      System.arraycopy(reserve, 0, buf, loc, reserve.length);
    loc = loc + 8;
    // System.out.println("loc:"+loc);
    // System.out.print("tlv:");
    for (i = 0; i < tlvarray.length; i++) {
      // System.out.println("Tag:"+(tlvarray[i].Tag));
      // System.out.print("Tag:"+Hex.rhex(tlvarray[i].TlvBuf));
      System.arraycopy(tlvarray[i].TlvBuf, 0, buf, loc,
          tlvarray[i].TlvBuf.length);
      loc = loc + tlvarray[i].TlvBuf.length;
      // System.out.println("loc:" + loc);
    }
    // System.out.println();

  }

  public Submit getSubmit() {
    return this.submit;
  }

}
TOP

Related Classes of cn.com.zjtelecom.smgp.message.SubmitMessage

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.