import { AxdrOctetString } from "../asn1.axdr/AxdrOctetString"; import { Apdu } from "../axdr/Apdu"; import { ConnectMechanismInfo } from "../axdr/ConnectMechanismInfo"; import { Connect_Request } from "../axdr/Connect_Request"; import { FunctionConformance } from "../axdr/FunctionConformance"; import { M698pdu } from "../axdr/M698pdu"; import { PIID } from "../axdr/PIID"; import { ProtocolConformance } from "../axdr/ProtocolConformance"; import { SymmetrySecurity } from "../axdr/SymmetrySecurity"; import { Unsigned16 } from "../axdr/Unsigned16"; import { Unsigned32 } from "../axdr/Unsigned32"; import { Unsigned8 } from "../axdr/Unsigned8"; import { DataUtils } from "../DataUtils"; import { ConnectRequestOption } from "../opt/ConnectRequestOption"; import { LinkOption } from "../opt/LinkOption"; import { RequestOption } from "../opt/RequestOption"; import { buildLinkFrame } from "./BuildTools"; import { resultCode } from "../tools/DataTool"; export function buildConnectRequest(con_opt: ConnectRequestOption, link_opt: LinkOption, req_opt: RequestOption): [number, String] { let result: [number, String]; if (con_opt.piid == null || con_opt.wishAppProVer == null || con_opt.wishPro == null || con_opt.wishFunc == null || con_opt.wishMaxIdle == null || con_opt.wishSendMax == null || con_opt.wishRevMax == null || con_opt.wishRevMaxWin == null || con_opt.wishMaxHandApdu == null) { result = [resultCode.emptyError, "connect param is not allow empty"]; return result; } else { if (con_opt.piid.length != 2 || con_opt.wishAppProVer.length != 4 || con_opt.wishPro.length != 16 || con_opt.wishFunc.length != 32 || con_opt.wishSendMax.length != 4 || con_opt.wishRevMax.length != 4 || con_opt.wishRevMaxWin.length != 2 || con_opt.wishMaxHandApdu.length != 4 || con_opt.wishMaxIdle.length != 8) { result = [resultCode.illegalError, "param is illegal"]; return result; } } let m698pdu = new M698pdu(); let connect_request = new Connect_Request(); let piid = new PIID(); piid.setBitString(DataUtils.toBytes(con_opt.piid.toString())); let wver = new Unsigned16(); wver.set_dataCode(DataUtils.toBytes(con_opt.wishAppProVer.toString())); let wpro = new ProtocolConformance(); wpro.setBitString(DataUtils.toBytes(con_opt.wishPro.toString())); let wfun = new FunctionConformance(); wfun.setBitString(DataUtils.toBytes(con_opt.wishFunc.toString())); let wsendsize = new Unsigned16(); wsendsize.set_dataCode(DataUtils.toBytes(con_opt.wishSendMax.toString())); let wrecvsize = new Unsigned16(); wrecvsize.set_dataCode(DataUtils.toBytes(con_opt.wishRevMax.toString())); let wrecvwnd = new Unsigned8(); wrecvwnd.set_dataCode(DataUtils.toBytes(con_opt.wishRevMaxWin.toString())); let wmaxapdu = new Unsigned16(); wmaxapdu.set_dataCode(DataUtils.toBytes(con_opt.wishMaxHandApdu.toString())); let wmaxidle = new Unsigned32(); wmaxidle.set_dataCode(DataUtils.toBytes(con_opt.wishMaxIdle.toString())); let info = new ConnectMechanismInfo(); let security = new SymmetrySecurity(); let p1 = new AxdrOctetString(); p1.set_dataCode(DataUtils.toBytes(con_opt.sessionData.toString())); let s1 = new AxdrOctetString(); s1.set_dataCode(DataUtils.toBytes(con_opt.mac.toString())); security.set_all(p1, s1); info.setSymmetrySecurity(security); connect_request.set_all(piid, wver, wpro, wfun, wsendsize, wrecvsize, wrecvwnd, wmaxapdu, wmaxidle, info); m698pdu.setConnect_Request(connect_request); let apdu = new Apdu(m698pdu); let frame = buildLinkFrame(apdu, link_opt, req_opt); result = [resultCode.success, frame]; return result; }