Is it possible to use Q2 server to keep persistent socket connection with Hsm an proceess async calling.?Appreciate any direction from experts
--
--
jPOS is licensed under AGPL - free for community usage for your open-source project. Licenses are also available for commercial usage. Please support jPOS, contact: sa...@jpos.org
---
You received this message because you are subscribed to the Google Groups "jPOS Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jpos-users+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAKV%2BfV2a79sCz%2BkXu493p00P-8S6GPi-Ah5c_HP1BP7vC-v%3D3g%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAAgSK%3Dn5K0zVthTXc%3Dq5zsySqcjDM-6Mo4bh7tjiARrzp5AMKg%40mail.gmail.com.
Is it possible to use Q2 server to keep persistent socket connection with Hsm an proceess async calling.?Appreciate any direction from experts
--
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAPazefBcHNX0ezAUPF86Zj1fDsOXi%3DkS_L8dVY0-T-k3ZXGYmQ%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAKV%2BfV3xf69OgAaF44d8fcVvgx8Fzy%2BeqHc3XwUaZsUSiyNBdw%40mail.gmail.com.

To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/41195d3b-7583-4170-b1b3-597f9905cddfn%40googlegroups.com.

--
--
jPOS is licensed under AGPL - free for community usage for your open-source project. Licenses are also available for commercial usage. Please support jPOS, contact: sa...@jpos.org
---
You received this message because you are subscribed to the Google Groups "jPOS Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jpos-users+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/30dd82f5-9093-4f9b-80c0-36a77e01087d%40pm.me.
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAKV%2BfV2XMuSBRfUJy05c5Qx5xFFnSn1sm7q5UgDibqpsVfeS-g%40mail.gmail.com.
BTW, you will still need to implement the FSD schema for talking to the HSM.
package org.example;
import org.jpos.util.FSDMsg;
public class Main1 {
public static void main(String [] args) throws Exception {
ThalesAdaptor adaptor = new ThalesAdaptor("xx.xx.xx.xx", 1700);
adaptor.connect();
FSDMsg req = adaptor.diagnostics();
req.dump(System.out, " ");
FSDMsg resp = adaptor.command(req);
resp.dump(System.out, " ");
resp.dump(System.out, " ");
}
}
package org.example;
import org.jpos.iso.FSDISOMsg;
import org.jpos.iso.channel.FSDChannel;
import org.jpos.iso.packager.FSDPackager;
import org.jpos.util.FSDMsg;
public class ThalesAdaptor {
private FSDChannel channel;
public ThalesAdaptor(String host, int port) {
channel = new FSDChannel();
channel.setHost(host, port);
channel.setPackager(new FSDPackager());
}
public void connect() throws Exception {
channel.connect();
}
private FSDMsg createRequest(String command) {
FSDMsg req = new FSDMsg("file:cfg/hsm-");
if (command != null)
req.set("command", command);
return req;
}
private FSDMsg createResponse(String response) {
FSDMsg resp = new FSDMsg("file:cfg/hsm-resp-");
if (response != null)
resp.set("response", response);
return resp;
}
public FSDMsg diagnostics() {
return createRequest("NC");
}
public FSDMsg generateDoubleLengthKey() {
FSDMsg req = createRequest("A0");
req.set("mode", "0");
req.set("key-type", "001");
req.set("key-scheme-lmk", "U");
return req;
}
public FSDMsg command(FSDMsg request) throws Exception {
StringBuffer sbuffer = new StringBuffer(request.get("command"));
sbuffer.setCharAt(1, (char) (sbuffer.charAt(1) + 1));
FSDMsg resp = createResponse(sbuffer.toString());
FSDISOMsg msg = new FSDISOMsg(request); // NEW
msg.setHeader(new byte[] { (byte) 1, (byte) 2, (byte) 3, (byte) 4});
channel.send(msg);
byte [] buffer = new byte [1024];
byte [] buffer2 = new byte[1024];
//channel.getBytes(buffer);
FSDISOMsg rep = new FSDISOMsg(resp); // NEW
rep.merge(channel.receive()); // NEW
// message length (network byte order) and header account for the
// first 6 received bytes. remove them for the actual message
//System.arraycopy(buffer, 6, buffer2, 0, buffer.length - 6);
//resp.unpack(buffer2);
// return resp;
return rep.getFSDMsg(); // NEW
}
}

<?xml version="1.0" encoding="UTF-8"?>
<schema>
<field id="command" type="A" length="2" key="true" />
</s
<?xml version="1.0" encoding="UTF-8"?>
<schema>
<field id="response" type="A" length="2" key="true" />
<field id="error" type="A" length="2" />
</s
<?xml version="1.0" encoding="UTF-8"?>
<schema id='NC'>
</s
<?xml version="1.0" encoding="UTF-8"?>
<schema id='ND'>
<field id="lmk-check-value" type="A" length="16" />
<field id="firmware-number" type="A" length="9" />
</s
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.jpos</groupId>
<artifactId>jpos</artifactId>
<version>2.1.9</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.12</version>
</dependency>
</dependencies>

To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAACHDe02RuZeyPywRGZ7-LJz01Vya36jvCQYRdasgXYmRQ%3DMjg%40mail.gmail.com.
I can’t see how FSDMsg.pack()
can return a null.
Could you share that project (that I guess is just a POC without sensitive info) as a packaged file or, better yet, through git? So you make us easier to help you than having to create the project and every single file to reproduce?
Andrés Alcarraz
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAKV%2BfV0-ONCzyDGf3j9X%2BWqRXgt3ZO-ROUoidCHgvL%2BLRjGz%2BA%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/afd6b2cf-618a-42d5-a94f-733025042d8e%40gmail.com.
Did you change these two lines at all :-
FSDMsg req = new FSDMsg("file:cfg/hsm-");
FSDMsg resp = new FSDMsg("file:cfg/hsm-resp-"); If so, what to? I think these should be the correct URL form for a file:// and need to resolve relative to the current runtime directory location. Check the documentation.
--
Mark
Did you change these two lines at all :-
FSDMsg req = new FSDMsg("file:cfg/hsm-");
FSDMsg resp = new FSDMsg("file:cfg/hsm-resp-"); If so, what to? I think these should be the correct URL form for a file:// and need to resolve relative to the current runtime directory location. Check the documentation.
--
Mark
private FSDMsg createRequest(String command) {
FSDMsg req = new FSDMsg("file://cfg/hsm-");
if (command != null)
req.set("command", command);
return req;
}
private FSDMsg createResponse(String response) {
FSDMsg resp = new FSDMsg("file://cfg/hsm-resp-");
if (response != null)
resp.set("response", response);
return resp;
}
--
--
jPOS is licensed under AGPL - free for community usage for your open-source project. Licenses are also available for commercial usage. Please support jPOS, contact: sa...@jpos.org
---
You received this message because you are subscribed to the Google Groups "jPOS Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jpos-users+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/017f0c94-c426-4bfa-b1ad-95afc9f60bed%40pm.me.
--
--
jPOS is licensed under AGPL - free for community usage for your open-source project. Licenses are also available for commercial usage. Please support jPOS, contact: sa...@jpos.org
---
You received this message because you are subscribed to the Google Groups "jPOS Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jpos-users+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/017f0c94-c426-4bfa-b1ad-95afc9f60bed%40pm.me.
Hi Alcarraz ,
Thanks
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAKV%2BfV2a79sCz%2BkXu493p00P-8S6GPi-Ah5c_HP1BP7vC-v%3D3g%40mail.gmail.com.
--
--
jPOS is licensed under AGPL - free for community usage for your open-source project. Licenses are also available for commercial usage. Please support jPOS, contact: sa...@jpos.org
---
You received this message because you are subscribed to the Google Groups "jPOS Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jpos-users+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAPazefBcHNX0ezAUPF86Zj1fDsOXi%3DkS_L8dVY0-T-k3ZXGYmQ%40mail.gmail.com.
--
--
jPOS is licensed under AGPL - free for community usage for your open-source project. Licenses are also available for commercial usage. Please support jPOS, contact: sa...@jpos.org
---
You received this message because you are subscribed to the Google Groups "jPOS Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jpos-users+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAKV%2BfV3xf69OgAaF44d8fcVvgx8Fzy%2BeqHc3XwUaZsUSiyNBdw%40mail.gmail.com.
--
--
jPOS is licensed under AGPL - free for community usage for your open-source project. Licenses are also available for commercial usage. Please support jPOS, contact: sa...@jpos.org
---
You received this message because you are subscribed to the Google Groups "jPOS Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jpos-users+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/41195d3b-7583-4170-b1b3-597f9905cddfn%40googlegroups.com.
--
--
jPOS is licensed under AGPL - free for community usage for your open-source project. Licenses are also available for commercial usage. Please support jPOS, contact: sa...@jpos.org
---
You received this message because you are subscribed to the Google Groups "jPOS Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jpos-users+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAKV%2BfV2XMuSBRfUJy05c5Qx5xFFnSn1sm7q5UgDibqpsVfeS-g%40mail.gmail.com.
--
--
jPOS is licensed under AGPL - free for community usage for your open-source project. Licenses are also available for commercial usage. Please support jPOS, contact: sa...@jpos.org
---
You received this message because you are subscribed to the Google Groups "jPOS Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jpos-users+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAACHDe02RuZeyPywRGZ7-LJz01Vya36jvCQYRdasgXYmRQ%3DMjg%40mail.gmail.com.
--
--
jPOS is licensed under AGPL - free for community usage for your open-source project. Licenses are also available for commercial usage. Please support jPOS, contact: sa...@jpos.org
---
You received this message because you are subscribed to the Google Groups "jPOS Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jpos-users+...@googlegroups.com.
<div title="MDH:SSBjYW4ndCBzZWUgaG93IGBGU0RNc2cucGFjaygpYCBjYW4gcmV0dXJuIGEgYG51bGxgLjxicj48 YnI+Q291bGQgeW91IHNoYXJlIHRoYXQgcHJvamVjdCAodGhhdCBJIGd1ZXNzIGlzIGp1c3QgYSBQ T0Mgd2l0aG91dCBzZW5zaXRpdmUgaW5mbykgYXMgYSBwYWNrYWdlZCBmaWxlIG9yLCBiZXR0ZXIg eWV0LCB0aHJvdWdoIGdpdD8gU28geW91IG1ha2UgdXMgZWFzaWVyIHRvIGhlbHAgeW91IHRoYW4g aGF2aW5nIHRvIGNyZWF0ZSB0aGUgcHJvamVjdCBhbmQgZXZlcnkgc2luZ2xlIGZpbGUgdG8gcmVw cm9kdWNlPzxicj48YnI+PGJyPjxwcmUgY2xhc3M9Im1vei1zaWduYXR1cmUiIGNvbHM9IjcyIj5B bmRyw6lzIEFsY2FycmF6PC9wcmU+PGRpdiBjbGFzcz0ibW96LWNpdGUtcHJlZml4Ij5PbiAxNi85 LzI0IDIwOjIwLCBLYXBpbGFzaGFudGhhIFJhamFwYWtzaGEgd3JvdGU6PGJyPjwvZGl2PjxibG9j a3F1b3RlIHR5cGU9ImNpdGUiIGNpdGU9Im1pZDpDQUtWK2ZWMC1PTkN6eURHZjNqOVgrV3FSWGd0 M1pPLVJPVW9pZENIZ3ZMK0xSakd6K0FAbWFpbC5nbWFpbC5jb20iPgo8bWV0YSBodHRwLWVxdWl2 PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgIj48ZGl2IGRpcj0ibHRyIj48ZGl2 IGRpcj0ibHRyIj48ZGl2IGRpcj0ibHRyIj48ZGl2IGRpcj0ibHRyIj48ZGl2IGRpcj0ibHRyIj48 ZGl2IGRpcj0ibHRyIj48ZGl2IGRpcj0ibHRyIj48ZGl2IGRpcj0ibHRyIj48ZGl2IGRpcj0ibHRy Ij48ZGl2IGRpcj0ibHRyIj5JIHRyaWVkIGJlbG93Jm5ic3A7PGRpdj48YnI+PC9kaXY+PGRpdj48 ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOnJnYigzMCwzMSwzNCk7Y29sb3I6cmdiKDE4OCwx OTAsMTk2KSI+PHByZSBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7SmV0QnJhaW5zIE1vbm8mcXVv dDssbW9ub3NwYWNlO2ZvbnQtc2l6ZTo5LjhwdCI+PHNwYW4gc3R5bGU9ImNvbG9yOnJnYigyMDcs MTQyLDEwOSkiPnBhY2thZ2UgPC9zcGFuPm9yZy5leGFtcGxlOzxicj48YnI+PHNwYW4gc3R5bGU9 ImNvbG9yOnJnYigyMDcsMTQyLDEwOSkiPmltcG9ydCA8L3NwYW4+b3JnLmpwb3MudXRpbC5GU0RN c2c7PGJyPjxicj48c3BhbiBzdHlsZT0iY29sb3I6cmdiKDIwNywxNDIsMTA5KSI+cHVibGljIGNs YXNzIDwvc3Bhbj5NYWluMSB7PGJyPjxicj48YnI+ICAgIDxzcGFuIHN0eWxlPSJjb2xvcjpyZ2Io MjA3LDE0MiwxMDkpIj5wdWJsaWMgc3RhdGljIHZvaWQgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xv cjpyZ2IoODYsMTY4LDI0NSkiPm1haW48L3NwYW4+KFN0cmluZyBbXSBhcmdzKSA8c3BhbiBzdHls ZT0iY29sb3I6cmdiKDIwNywxNDIsMTA5KSI+dGhyb3dzIDwvc3Bhbj5FeGNlcHRpb24gezxicj4g ICAgICAgIFRoYWxlc0FkYXB0b3IgYWRhcHRvciA9IDxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMjA3 LDE0MiwxMDkpIj5uZXcgPC9zcGFuPlRoYWxlc0FkYXB0b3IoPHNwYW4gc3R5bGU9ImNvbG9yOnJn YigxMDYsMTcxLDExNSkiPiJ4eC54eC54eC54eCI8L3NwYW4+LCA8c3BhbiBzdHlsZT0iY29sb3I6 cmdiKDQyLDE3MiwxODQpIj4xNzAwPC9zcGFuPik7PGJyPiAgICAgICAgYWRhcHRvci5jb25uZWN0 KCk7PGJyPiAgICAgICAgRlNETXNnIHJlcSA9IGFkYXB0b3IuZGlhZ25vc3RpY3MoKTs8YnI+ICAg ICAgICByZXEuZHVtcChTeXN0ZW0uPHNwYW4gc3R5bGU9ImNvbG9yOnJnYigxOTksMTI1LDE4Nyk7 Zm9udC1zdHlsZTppdGFsaWMiPm91dDwvc3Bhbj4sIDxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMTA2 LDE3MSwxMTUpIj4iICI8L3NwYW4+KTs8YnI+ICAgICAgICBGU0RNc2cgcmVzcCA9IGFkYXB0b3Iu Y29tbWFuZChyZXEpOzxicj4gICAgICAgIHJlc3AuZHVtcChTeXN0ZW0uPHNwYW4gc3R5bGU9ImNv bG9yOnJnYigxOTksMTI1LDE4Nyk7Zm9udC1zdHlsZTppdGFsaWMiPm91dDwvc3Bhbj4sIDxzcGFu IHN0eWxlPSJjb2xvcjpyZ2IoMTA2LDE3MSwxMTUpIj4iICI8L3NwYW4+KTs8YnI+ICAgICAgICBy ZXNwLmR1bXAoU3lzdGVtLjxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMTk5LDEyNSwxODcpO2ZvbnQt c3R5bGU6aXRhbGljIj5vdXQ8L3NwYW4+LCA8c3BhbiBzdHlsZT0iY29sb3I6cmdiKDEwNiwxNzEs MTE1KSI+IiAiPC9zcGFuPik7PGJyPiAgICB9PGJyPn08L3ByZT48L2Rpdj48L2Rpdj48ZGl2Pjxi cj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PjxkaXYgc3R5bGU9ImJh Y2tncm91bmQtY29sb3I6cmdiKDMwLDMxLDM0KTtjb2xvcjpyZ2IoMTg4LDE5MCwxOTYpIj48cHJl IHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtKZXRCcmFpbnMgTW9ubyZxdW90Oyxtb25vc3BhY2U7 Zm9udC1zaXplOjkuOHB0Ij48c3BhbiBzdHlsZT0iY29sb3I6cmdiKDIwNywxNDIsMTA5KSI+cGFj a2FnZSA8L3NwYW4+b3JnLmV4YW1wbGU7PGJyPjxicj48c3BhbiBzdHlsZT0iY29sb3I6cmdiKDIw NywxNDIsMTA5KSI+aW1wb3J0IDwvc3Bhbj5vcmcuanBvcy5pc28uRlNESVNPTXNnOzxicj48c3Bh biBzdHlsZT0iY29sb3I6cmdiKDIwNywxNDIsMTA5KSI+aW1wb3J0IDwvc3Bhbj5vcmcuanBvcy5p c28uY2hhbm5lbC5GU0RDaGFubmVsOzxicj48c3BhbiBzdHlsZT0iY29sb3I6cmdiKDIwNywxNDIs MTA5KSI+aW1wb3J0IDwvc3Bhbj5vcmcuanBvcy5pc28ucGFja2FnZXIuRlNEUGFja2FnZXI7PGJy PjxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMjA3LDE0MiwxMDkpIj5pbXBvcnQgPC9zcGFuPm9yZy5q cG9zLnV0aWwuRlNETXNnOzxicj48YnI+PHNwYW4gc3R5bGU9ImNvbG9yOnJnYigyMDcsMTQyLDEw OSkiPnB1YmxpYyBjbGFzcyA8L3NwYW4+VGhhbGVzQWRhcHRvciB7PGJyPiAgICA8c3BhbiBzdHls ZT0iY29sb3I6cmdiKDIwNywxNDIsMTA5KSI+cHJpdmF0ZSA8L3NwYW4+RlNEQ2hhbm5lbCA8c3Bh biBzdHlsZT0iY29sb3I6cmdiKDE5OSwxMjUsMTg3KSI+Y2hhbm5lbDwvc3Bhbj47PGJyPjxicj4g ICAgPHNwYW4gc3R5bGU9ImNvbG9yOnJnYigyMDcsMTQyLDEwOSkiPnB1YmxpYyA8L3NwYW4+PHNw YW4gc3R5bGU9ImNvbG9yOnJnYig4NiwxNjgsMjQ1KSI+VGhhbGVzQWRhcHRvcjwvc3Bhbj4oU3Ry aW5nIGhvc3QsIDxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMjA3LDE0MiwxMDkpIj5pbnQgPC9zcGFu PnBvcnQpIHs8YnI+ICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6cmdiKDE5OSwxMjUsMTg3KSI+ Y2hhbm5lbCA8L3NwYW4+PSA8c3BhbiBzdHlsZT0iY29sb3I6cmdiKDIwNywxNDIsMTA5KSI+bmV3 IDwvc3Bhbj5GU0RDaGFubmVsKCk7PGJyPiAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOnJnYigx OTksMTI1LDE4NykiPmNoYW5uZWw8L3NwYW4+LnNldEhvc3QoaG9zdCwgcG9ydCk7PGJyPiAgICAg ICAgPHNwYW4gc3R5bGU9ImNvbG9yOnJnYigxOTksMTI1LDE4NykiPmNoYW5uZWw8L3NwYW4+LnNl dFBhY2thZ2VyKDxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMjA3LDE0MiwxMDkpIj5uZXcgPC9zcGFu PkZTRFBhY2thZ2VyKCkpOzxicj4gICAgfTxicj48YnI+ICAgIDxzcGFuIHN0eWxlPSJjb2xvcjpy Z2IoMjA3LDE0MiwxMDkpIj5wdWJsaWMgdm9pZCA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOnJn Yig4NiwxNjgsMjQ1KSI+Y29ubmVjdDwvc3Bhbj4oKSA8c3BhbiBzdHlsZT0iY29sb3I6cmdiKDIw NywxNDIsMTA5KSI+dGhyb3dzIDwvc3Bhbj5FeGNlcHRpb24gezxicj4gICAgICAgIDxzcGFuIHN0 eWxlPSJjb2xvcjpyZ2IoMTk5LDEyNSwxODcpIj5jaGFubmVsPC9zcGFuPi5jb25uZWN0KCk7PGJy PiAgICB9PGJyPjxicj4gICAgPHNwYW4gc3R5bGU9ImNvbG9yOnJnYigyMDcsMTQyLDEwOSkiPnBy aXZhdGUgPC9zcGFuPkZTRE1zZyA8c3BhbiBzdHlsZT0iY29sb3I6cmdiKDg2LDE2OCwyNDUpIj5j cmVhdGVSZXF1ZXN0PC9zcGFuPihTdHJpbmcgY29tbWFuZCkgezxicj4gICAgICAgIEZTRE1zZyBy ZXEgPSA8c3BhbiBzdHlsZT0iY29sb3I6cmdiKDIwNywxNDIsMTA5KSI+bmV3IDwvc3Bhbj5GU0RN c2coPHNwYW4gc3R5bGU9ImNvbG9yOnJnYigxMDYsMTcxLDExNSkiPiJmaWxlOmNmZy9oc20tIjwv c3Bhbj4pOzxicj48YnI+ICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6cmdiKDIwNywxNDIsMTA5 KSI+aWYgPC9zcGFuPihjb21tYW5kICE9IDxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMjA3LDE0Miwx MDkpIj5udWxsPC9zcGFuPik8YnI+ICAgICAgICAgICAgcmVxLnNldCg8c3BhbiBzdHlsZT0iY29s b3I6cmdiKDEwNiwxNzEsMTE1KSI+ImNvbW1hbmQiPC9zcGFuPiwgY29tbWFuZCk7PGJyPjxicj4g ICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMjA3LDE0MiwxMDkpIj5yZXR1cm4gPC9zcGFu PnJlcTs8YnI+ICAgIH08YnI+PGJyPiAgICA8c3BhbiBzdHlsZT0iY29sb3I6cmdiKDIwNywxNDIs MTA5KSI+cHJpdmF0ZSA8L3NwYW4+RlNETXNnIDxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoODYsMTY4 LDI0NSkiPmNyZWF0ZVJlc3BvbnNlPC9zcGFuPihTdHJpbmcgcmVzcG9uc2UpIHs8YnI+ICAgICAg ICBGU0RNc2cgcmVzcCA9IDxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMjA3LDE0MiwxMDkpIj5uZXcg PC9zcGFuPkZTRE1zZyg8c3BhbiBzdHlsZT0iY29sb3I6cmdiKDEwNiwxNzEsMTE1KSI+ImZpbGU6 Y2ZnL2hzbS1yZXNwLSI8L3NwYW4+KTs8YnI+PGJyPiAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9y OnJnYigyMDcsMTQyLDEwOSkiPmlmIDwvc3Bhbj4ocmVzcG9uc2UgIT0gPHNwYW4gc3R5bGU9ImNv bG9yOnJnYigyMDcsMTQyLDEwOSkiPm51bGw8L3NwYW4+KTxicj4gICAgICAgICAgICByZXNwLnNl dCg8c3BhbiBzdHlsZT0iY29sb3I6cmdiKDEwNiwxNzEsMTE1KSI+InJlc3BvbnNlIjwvc3Bhbj4s IHJlc3BvbnNlKTs8YnI+PGJyPiAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOnJnYigyMDcsMTQy LDEwOSkiPnJldHVybiA8L3NwYW4+cmVzcDs8YnI+ICAgIH08YnI+PGJyPiAgICA8c3BhbiBzdHls ZT0iY29sb3I6cmdiKDIwNywxNDIsMTA5KSI+cHVibGljIDwvc3Bhbj5GU0RNc2cgPHNwYW4gc3R5 bGU9ImNvbG9yOnJnYig4NiwxNjgsMjQ1KSI+ZGlhZ25vc3RpY3M8L3NwYW4+KCkgezxicj4gICAg ICAgIDxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMjA3LDE0MiwxMDkpIj5yZXR1cm4gPC9zcGFuPmNy ZWF0ZVJlcXVlc3QoPHNwYW4gc3R5bGU9ImNvbG9yOnJnYigxMDYsMTcxLDExNSkiPiJOQyI8L3Nw YW4+KTs8YnI+ICAgIH08YnI+PGJyPiAgICA8c3BhbiBzdHlsZT0iY29sb3I6cmdiKDIwNywxNDIs MTA5KSI+cHVibGljIDwvc3Bhbj5GU0RNc2cgPHNwYW4gc3R5bGU9ImNvbG9yOnJnYig4NiwxNjgs MjQ1KSI+Z2VuZXJhdGVEb3VibGVMZW5ndGhLZXk8L3NwYW4+KCkgezxicj4gICAgICAgIEZTRE1z ZyByZXEgPSBjcmVhdGVSZXF1ZXN0KDxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMTA2LDE3MSwxMTUp Ij4iQTAiPC9zcGFuPik7PGJyPiAgICAgICAgcmVxLnNldCg8c3BhbiBzdHlsZT0iY29sb3I6cmdi KDEwNiwxNzEsMTE1KSI+Im1vZGUiPC9zcGFuPiwgPHNwYW4gc3R5bGU9ImNvbG9yOnJnYigxMDYs MTcxLDExNSkiPiIwIjwvc3Bhbj4pOzxicj4gICAgICAgIHJlcS5zZXQoPHNwYW4gc3R5bGU9ImNv bG9yOnJnYigxMDYsMTcxLDExNSkiPiJrZXktdHlwZSI8L3NwYW4+LCA8c3BhbiBzdHlsZT0iY29s b3I6cmdiKDEwNiwxNzEsMTE1KSI+IjAwMSI8L3NwYW4+KTs8YnI+ICAgICAgICByZXEuc2V0KDxz cGFuIHN0eWxlPSJjb2xvcjpyZ2IoMTA2LDE3MSwxMTUpIj4ia2V5LXNjaGVtZS1sbWsiPC9zcGFu PiwgPHNwYW4gc3R5bGU9ImNvbG9yOnJnYigxMDYsMTcxLDExNSkiPiJVIjwvc3Bhbj4pOzxicj48 YnI+ICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6cmdiKDIwNywxNDIsMTA5KSI+cmV0dXJuIDwv c3Bhbj5yZXE7PGJyPiAgICB9PGJyPjxicj4gICAgPHNwYW4gc3R5bGU9ImNvbG9yOnJnYigyMDcs MTQyLDEwOSkiPnB1YmxpYyA8L3NwYW4+RlNETXNnIDxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoODYs MTY4LDI0NSkiPmNvbW1hbmQ8L3NwYW4+KEZTRE1zZyByZXF1ZXN0KSA8c3BhbiBzdHlsZT0iY29s b3I6cmdiKDIwNywxNDIsMTA5KSI+dGhyb3dzIDwvc3Bhbj5FeGNlcHRpb24gezxicj4gICAgICAg IFN0cmluZ0J1ZmZlciBzYnVmZmVyID0gPHNwYW4gc3R5bGU9ImNvbG9yOnJnYigyMDcsMTQyLDEw OSkiPm5ldyA8L3NwYW4+U3RyaW5nQnVmZmVyKHJlcXVlc3QuZ2V0KDxzcGFuIHN0eWxlPSJjb2xv cjpyZ2IoMTA2LDE3MSwxMTUpIj4iY29tbWFuZCI8L3NwYW4+KSk7PGJyPiAgICAgICAgc2J1ZmZl ci5zZXRDaGFyQXQoPHNwYW4gc3R5bGU9ImNvbG9yOnJnYig0MiwxNzIsMTg0KSI+MTwvc3Bhbj4s ICg8c3BhbiBzdHlsZT0iY29sb3I6cmdiKDIwNywxNDIsMTA5KSI+Y2hhcjwvc3Bhbj4pIChzYnVm ZmVyLmNoYXJBdCg8c3BhbiBzdHlsZT0iY29sb3I6cmdiKDQyLDE3MiwxODQpIj4xPC9zcGFuPikg KyA8c3BhbiBzdHlsZT0iY29sb3I6cmdiKDQyLDE3MiwxODQpIj4xPC9zcGFuPikpOzxicj4gICAg ICAgIEZTRE1zZyByZXNwID0gY3JlYXRlUmVzcG9uc2Uoc2J1ZmZlci50b1N0cmluZygpKTs8YnI+ PGJyPiAgICAgICAgRlNESVNPTXNnIG1zZyA9IDxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMjA3LDE0 MiwxMDkpIj5uZXcgPC9zcGFuPkZTRElTT01zZyhyZXF1ZXN0KTsgPHNwYW4gc3R5bGU9ImNvbG9y OnJnYigxMjIsMTI2LDEzMykiPi8vIE5FVzxicj48L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOnJn YigxMjIsMTI2LDEzMykiPiAgICAgICAgPC9zcGFuPm1zZy5zZXRIZWFkZXIoPHNwYW4gc3R5bGU9 ImNvbG9yOnJnYigyMDcsMTQyLDEwOSkiPm5ldyBieXRlPC9zcGFuPltdIHsgKDxzcGFuIHN0eWxl PSJjb2xvcjpyZ2IoMjA3LDE0MiwxMDkpIj5ieXRlPC9zcGFuPikgPHNwYW4gc3R5bGU9ImNvbG9y OnJnYig0MiwxNzIsMTg0KSI+MTwvc3Bhbj4sICg8c3BhbiBzdHlsZT0iY29sb3I6cmdiKDIwNywx NDIsMTA5KSI+Ynl0ZTwvc3Bhbj4pIDxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoNDIsMTcyLDE4NCki PjI8L3NwYW4+LCAoPHNwYW4gc3R5bGU9ImNvbG9yOnJnYigyMDcsMTQyLDEwOSkiPmJ5dGU8L3Nw YW4+KSA8c3BhbiBzdHlsZT0iY29sb3I6cmdiKDQyLDE3MiwxODQpIj4zPC9zcGFuPiwgKDxzcGFu IHN0eWxlPSJjb2xvcjpyZ2IoMjA3LDE0MiwxMDkpIj5ieXRlPC9zcGFuPikgPHNwYW4gc3R5bGU9 ImNvbG9yOnJnYig0MiwxNzIsMTg0KSI+NDwvc3Bhbj59KTs8YnI+PGJyPiAgICAgICAgPHNwYW4g c3R5bGU9ImNvbG9yOnJnYigxOTksMTI1LDE4NykiPmNoYW5uZWw8L3NwYW4+LnNlbmQobXNnKTs8 YnI+PGJyPiAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOnJnYigyMDcsMTQyLDEwOSkiPmJ5dGUg PC9zcGFuPltdIGJ1ZmZlciA9IDxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMjA3LDE0MiwxMDkpIj5u ZXcgYnl0ZSA8L3NwYW4+WzxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoNDIsMTcyLDE4NCkiPjEwMjQ8 L3NwYW4+XTs8YnI+ICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6cmdiKDIwNywxNDIsMTA5KSI+ Ynl0ZSA8L3NwYW4+W10gYnVmZmVyMiA9IDxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMjA3LDE0Miwx MDkpIj5uZXcgYnl0ZTwvc3Bhbj5bPHNwYW4gc3R5bGU9ImNvbG9yOnJnYig0MiwxNzIsMTg0KSI+ MTAyNDwvc3Bhbj5dOzxicj48YnI+ICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6cmdiKDEyMiwx MjYsMTMzKSI+Ly9jaGFubmVsLmdldEJ5dGVzKGJ1ZmZlcik7PGJyPjwvc3Bhbj48c3BhbiBzdHls ZT0iY29sb3I6cmdiKDEyMiwxMjYsMTMzKSI+ICAgICAgICA8L3NwYW4+RlNESVNPTXNnIHJlcCA9 IDxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMjA3LDE0MiwxMDkpIj5uZXcgPC9zcGFuPkZTRElTT01z ZyhyZXNwKTsgPHNwYW4gc3R5bGU9ImNvbG9yOnJnYigxMjIsMTI2LDEzMykiPi8vIE5FVzxicj48 L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOnJnYigxMjIsMTI2LDEzMykiPiAgICAgICAgPC9zcGFu PnJlcC5tZXJnZSg8c3BhbiBzdHlsZT0iY29sb3I6cmdiKDE5OSwxMjUsMTg3KSI+Y2hhbm5lbDwv c3Bhbj4ucmVjZWl2ZSgpKTsgPHNwYW4gc3R5bGU9ImNvbG9yOnJnYigxMjIsMTI2LDEzMykiPi8v IE5FVzxicj48L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOnJnYigxMjIsMTI2LDEzMykiPjxicj48 L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOnJnYigxMjIsMTI2LDEzMykiPiAgICAgICAgLy8gbWVz c2FnZSBsZW5ndGggKG5ldHdvcmsgYnl0ZSBvcmRlcikgYW5kIGhlYWRlciBhY2NvdW50IGZvciB0 aGU8YnI+PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMTIyLDEyNiwxMzMpIj4gICAgICAg IC8vIGZpcnN0IDYgcmVjZWl2ZWQgYnl0ZXMuIHJlbW92ZSB0aGVtIGZvciB0aGUgYWN0dWFsIG1l c3NhZ2U8YnI+PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMTIyLDEyNiwxMzMpIj4gICAg ICAgIC8vU3lzdGVtLmFycmF5Y29weShidWZmZXIsIDYsIGJ1ZmZlcjIsIDAsIGJ1ZmZlci5sZW5n dGggLSA2KTs8YnI+PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMTIyLDEyNiwxMzMpIj48 YnI+PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMTIyLDEyNiwxMzMpIj4gICAgICAgIC8v cmVzcC51bnBhY2soYnVmZmVyMik7PGJyPjwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6cmdiKDEy MiwxMjYsMTMzKSI+PGJyPjwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6cmdiKDEyMiwxMjYsMTMz KSI+ICAgICAgICAvLyByZXR1cm4gcmVzcDs8YnI+PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjpy Z2IoMTIyLDEyNiwxMzMpIj48YnI+PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMTIyLDEy NiwxMzMpIj4gICAgICAgIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6cmdiKDIwNywxNDIsMTA5 KSI+cmV0dXJuIDwvc3Bhbj5yZXAuZ2V0RlNETXNnKCk7IDxzcGFuIHN0eWxlPSJjb2xvcjpyZ2Io MTIyLDEyNiwxMzMpIj4vLyBORVc8YnI+PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMTIy LDEyNiwxMzMpIj4gICAgPC9zcGFuPn08YnI+fTwvcHJlPjwvZGl2PjwvZGl2PjxkaXY+PGJyPjwv ZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+UHJvamVjdCBmb2xkZXJzJm5i c3A7PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj48aW1nIHNyYz0iZGF0YTppbWFnZS9wbmc7Zmls ZW5hbWU9aW1hZ2UucG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBVXNBQUFIL0NB WUFBQURlN1AvOUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFKY0Vo WmN3QUFFblFBQUJKMEFkNW1IM2dBQUpDS1NVUkJWSGhlN04wSGZOUmtId2Z3WCs2NkI5MTdVd3Aw c1dtQnNwVzlGVlNtREJIWklLQ0lNa1NHeW9heVh0bWppQ0NDS0h0VlFKQ3l5bWhwUzNkTDk5NHpi M0tYMnV0T2dRTEYvOWRQcEhueUpKZmM1WDczWk53OWpMTnJDeGFFRUVLcUpSSCtKWVFRVWcwS1Mw SUlFWUhDa2hCQ1JLalRjNVpObXpyQ3hhVVpsS1JTb1FRb0xDckMxYXZlaUl1TEZVb0lJZVROSnpV Mk1WMGkvUDFTdWJkcmh6bWZ6NE9HcGliMDlmVmhhR1FrRyt3YTJxRkhqNTd3ZS93WXFhbXBRdTNh MFduVUR1N09kdERLalVSQ2xsQW9ZRmwxTkhScmoyYjJlc2lQamtVbXl3aFQ1Q1RhTm1qbDdnNzN0 cTZ3TWRRQ214NkhsTnl5bnhjbHk3ZFF6VUJrY3E1UVdoYkxMZGZVdVJOYU43V0JFUkx3TEsxUW1G SjNWSFRNWWFSUmdNemN1bitzdXZZbWJRc3JWWVl5VzRSaWxOMVhTTzI5VGZ0b2VYVVdsc09IajBS WVdCajI3Tm1OMjdkdi96djhjL01tckN5dE1HRGdRUGo3K3lFbEpVV1lRenlYRVQvZ203SHZRaS9z RjF3SktSWktTMWpqdlNYTE1hRzNCZUwrT0llQVBQa2JnR1dWMFhqZ2ZDeGYrQmtHZFd1SFZpMWJ3 NzFqTi9UdTB4bDJ1VTl3TXlBSnhZeThic255TzdaU3dyMFR0NUZZMlp0SXVSMm1ybCtBRWQwN29W SDJWZnpoVzd2dGtHcVl3NzVKRXpSczFCU05HdG5BMUZnZjZtd1cwdE56LzEyUDhpVEd6bWpiU0JY eEVZa29LRmVuZ1owN1d0Z3BJelVtcGNJMC9nUEV1a1U3Tk5iS3dMT1V5c1AvVmF0cVcvalh5Y3kx QTVxK29uVmxXVDAwNmRRWnJpYUZpSTVLUVNGVVhzbmp2K3J0ck03TFhKZm4zVWRMc0t3VUprNGVj TkxMeExQa0hLSDA1WkE5dnBNZExLMnM1WU9GT1F4MGRhREI1Q0E5TXc5c0ZldFVvczdPV1dwcWFD QWpJMTBZSzFWY1hJd0RCdzhpSUNBUVM1WjhoLzM3dlNvTVArM1loY21UcDBKRlJWbVk2OFZwdFp1 T2J5WjJnRVYrRU01NWJjWDZkZHZ4eStsYmlDb3lSL3RQdnNGa053MmhwZ0tqYnVqcnBpS01sTldn V3grNGF3a2p0Y0N5TE5STm04T3RYWE5ZTkFBeTQ4TVFHaExKdFc3VlljN3RKTzdOTGFEQzFhbE1m bElDc2pRTVlLQW1GQ2hRVXRXRWxxWmFGVzBqS1pRMXRhR3BwaVNNdjM1VmJ3c0RGUTF0YUtpVm5y cXBXNWxJQ0k5QVZCVDM1cGFOdjZySGY5WGJLY2RxMk1QOW5TNW9wSzI0ajcyOGRYbitmYlFFQXlW dVhiVFVLbi9mdlFqWjQ2c1dJalUyQm5IY0VKK1lobnhsUFZnMzQ5NTNUUTBocmVKOVYrSzFYT0Jo MldMOC9QTWhiTjI2QmR1MmJhMHdIRDU4R0U3T0xoZzQ4RDFoamhmRGYxcTE2dHdCK2t3bUxtLzhF aHU5L3NDRmk3OWozK1p2TVdmcjM4aVJHS0JqMTVhUWxIdXlHRVliSG4yNlFyTmNPY3Nhb1Zldmxs Q3Q0Wk9vVXFwV2FPSmtCaWJ1SHY3NTJ3ZFBub1lnTWp3WWdRK3U0OGI5Q0JRYnVjTEpxcEk5alpl VmlPUzhCdEF6ZkhrZklxL05HN0l0REZPQWxQREhDSHlXV1dQTDR1MGdBU1BodHJPdTN2bHYrajVh a0lybzRLY0lDd2xHNkZOLytOKzlobHRQVXJtM3BTT3NOSVU2VlpEWTJka0xmMWJFVHhzeGFvd3c5 bkx4TGF5UWtCQUVCd2RYR0I0OWZJaTdkMjZqQ1hlWStuSklvS1loLzZSU1VpNzc2WmwxZFNPbVQv NE1jL1k4S1BPSng3SnBTRTR1Z2txclh1aGhKQlNXc08rTEhrMGt5RS9QUUY0Tm4wYUsrRzNXdDNP QVFYRU1BdjFqa0Z2dU16WS9JUURCc2JuUU1qRCt0M1dwcEdVQkd5c0RZVHdWeVltRjBOTTNCRk9M eDYwTXk2akJzR0VMdFBIb2hzN2Qza0dIZHEzUjBGQlZtRnBLcW1tSnhpM2JvMzJYZDlHcG93ZWFO VGFIcGxUKzJQemhtM256TG1odHB3OGQyNVpvMC9GZGRHdG1McDlXNC9MRmJ3c0xEWmczNjRqMmJS elFRRkw2MkRyV0xtalJnVnQrOXg3bzNNa0RMdlpHL3o1dnBldW1BMDBUWjdUMjZJN09YYnVnYlN0 bm1HbVc3Z01sOWR3YTZRa2xGZFgwV0pVUisvenlMU2tOVTBjMGMrdUNUdDI2b1YwYlo1aHFsajBD RUwrdHV0QzBjRVl6OXk3Y1kzYUJlNnNtTUZUNDNOV3djWU5IR3h2dTJWU0RSZk91Nk5DeEZjeFVG TGZoeGRlbHR2dW9zcTRkbk5wMGhBZjNISFZzM3dhTmpDcHZVVmEzSC9LZTV6WGk4WitQMmRIUGtN cG9vVUVEaWNKeldYR2Zsb3lmTUZFV2l1WHhaZnkwdE5RMG9lVFZLaW9xZ3BKUzlZY0ZFaFVOcUt1 cGx4azAxTldnWEs2QndMY2U3bDY3alN4b29kT3NEVmd5YVFnOEhBeTVYWVlGVTV5SnVLZ29SQ1pr b3FoTXl5SU5mMSsrandKSlUvVHMwMUFvNDE4VXJwWGE1eDJZSXh2L1hMN0YvYjgyMUtHanA0Yjgy Q2drRnBkYlNRN0RGQ0wrc1RldStVWWluMXNYL3JHTW03aWlVVk5uV0hDZmVneFhscHljRE1iQUFM ckNQTStEMzM5MEc3bWptWTBtTXFNRDRmZlFIOUVaYXR6aFNBdFlxcFh1WEl5V1BWcTdPOEdnS0JI aFR4NGhJRHdSRXRObWFOdlNGbXF5blpBN1pGTFZnTGFGSzVvYUZ5QXg3QW1lUkthSVdyN1liV0Va ZFc3bmRVZFRuU3lFUEF4Q092ZTg4Y3ZYYWR3T3JSc2JRWm9jZ2FlUEhpRTBKZ2ZhdHEzUXdsNWJt Rk8rYm54UXVqcW9jYTFIcmhYaEg0NDBpUWtjM2QxaHJWR3luZko2YWlxVjcydmlIcXNzc2M4dlQ2 TGJCRTRXTExkKzNITVhHSVZzTlVzNHQyb01IVVplcnpiYnFtWG1Ba2ZUSWlUenIwTlFMUEsxN2RD c2hUMDArSVZ3OGhLNEk1alFST1NqQU1uYzR3VUdoQ0pWZnU1QjVtV3NTMjMyVVlsZVU3UnR3eTAv UHc2aGZvL3hORG9MZW82dHVkZEdxQ0NvYVQ4VTl4eFZReUlCLytvWHk1Nm55dmRwV1RVZm4xdXlV RlFNekpLZzVLZjkrY2NKb2ZUTjAycXlGNDRjUFZwdVdJVUJaaFdES1BIQ09pemJmd3NKVW5PMEdm QUp2bHEzRjE0SE5tUEo1SUZ3MXEzc2pTSkY5dCtuOFU4V1lQVnVYN2dJTFJxb2RVRHZ6dnBBOGxX Y3VwTXZlNUxGMDRJR3R5Tms1MlFLNDlWam1DTEVCVHhBRUxlRFJBbFgvWXNTRTVHdVpBaDlFZnRB MWJSZ1lLU0JnaGh1UndpTFJtTGlNNFE5dW8wSGZwRklGKzRlWUZsVldEUzFoMXJTSTl6MkRjU3p1 RmpFUndiZzN1MUFaT3M0d002bzlEbVdJZzZQYnoxRUdQZWhFNVBDbjVTdmVmbThtcmFGNVQ1Y3pK cTV3MUVuRFk5OTdpRXVUNWpBUFdKK1VoaWVQdlRCWGYrbmVCWWZnNGlnZXdpT0w0YTJvU0dVaFhE Z0tXdXlpUGE1alpDb0dDVEVoU0hnemkyRTV6YUFYU1B6R3M5UnlZbC9yRkxpdHA4bmxTWWg2STQv SXVQaWtCQWRoSWVQSXBDblpnTGpCa0tGV2p5K0VyZXNRRzVaVWR5eTRxTUM4TUEvRHNYYXBqQVNX cGRGMlVsSVNNcENJWXFRa3hxTHhJUVU1Q2lzejh0YUZ6SDdLTXVxd2NyQkZpckpmcmdqN0YreEVm NjQ4eUFCRW9YV3NMajk4SGxlSXptK1FkTEExaEk2M0pGa2VtcHB2Zkw3Tkw4ZWt0OVBISk9GNG5n aE1CV0RrcDlXMXdvS3VVKzVsQ1RFY3hzWUcvdnMzK0hnd1gzWXNzVlRxRlc1OUlnSDhQWDFMVGNF SUw3Y3JVQThoc25BbzErV1l1TEgwN0ZpKzFGY3ZCMkNiRTFidE9rM0NkOTdmb3QrbHVWamovdTBL YnFKMDM4bEFmcGQwTGU5L0JYVTc5NEwvTFdncUl0LzRnRi8va2RXS3BhVVd3LzVSUzZ4aWpLZklT SXl1ZlRxWVVFQ2tqSTFvRzlZeVFVcDBYS1FtVmtBRmRNbWFHeHBDQTN1U0l0aDhwRE1QZS9wSllF azBZY2UxelJJU1VxRk1wZndHdXA4cTEwZG1td0cwdk9Wb2EydExsVGsxcEY3L1RMTFBCTWlscyty ZGx2VVllcnFEaWZkZFBqNTNFV2N3a1ZhL2tNa056a1NFWEdaS0dhVW9LeXVEUjFETXpSUTVWNTNE VTB1cWhTa1J1R1o0cnhzSnA1RnAwTkpUNzlzdlNyVTZySCtKWEw3T1VVcEtkd3hUT2x6VjV5V3dU MlhhbEJUbDVmVjV2SDVaYVVyTEtzd1BaMDc4dUdXSlhKWGVXbnJJbVlmWmJqRFhDNkVFNlBsUjFF bGlyblhLMDd4ZGtBUisyR3RYaU1WUTlnNnVxQXBkN1RXeExrbFdyVHZqTGEyNmtoLzZvZEloZjJr d2o0dE1aQ2Y1bFVNekZjZWxFbUpVRGZ2Q3ZNdVA4SzY1OVovQjR1dTY4Q2E5Z2NqcmZxcVdPQnZp L0QxMXd2S0RBc1dlT0phc2xDaEVrVVpvZmo3NUc2c1d6SWRINCtkaGJXbmdwQ24wd0xqUCs0TXBU S2ZRRkt1ZFY0TTMxTVhFUTBOdVBmcUJtM1dGTDE2TllkU2NRRE9uUTdtcWloeHRXb2pBemxjdzB0 RFhjemJ0SElNazRPa3BHeG9HM0NISE9VL01iblhWdUhsTFVPeG5OKzU0cDdjUVhDeUJDWk4ycUo5 dDU3bzJLNDFIQ3dhbEM2VFA2WEI4TGR4ZEVXSFR0MFVocmF3NU40ODZocWwyeUEvZkNrbGF2bWM2 clpGMmR3WmpzYXFZTGhESk81alhTZ3RKZEcwUU9OV25kRGxuWjdvM0xFRFdqcmJRN2ZNK1RlNXd0 emNjcWRYZ0Z5dWpGVlJoNUFCTlJMN1dDWEViait2dUxqYy9ZaHNNV1FmcFFyVnhENStaY3ZpWDNt Um0vblMxcVhhZmJRRUYzanEzQWRJZm9XR1RRNXk4b1UvZVNMM1EvR3ZrUlNxM0dPcmNJT3F0Qmk1 aVJIY2g3RTM3b1NtbHJuQVYzNmZocHBhNlRXeGtzQjhWVUhKNDI4dGFtRGJBMllkRmlBdm0vc1VT d2o2ZDhoS2pZWnU0L2RoMnZaem9mYnpZeVdOMFdmaXAxeXJzaHVzRlo2RW9yU251TGo5SkI1emU0 UktRd2VVbnBua1NhREVuOXNPUFkwTEFjVlFhZDZiTy96dWgzZnRHZVRmTzRmejhiSXFwVStnS05u SXpDaUNtcEVSOTJsWDhZWGtWMDNIcGlXYU5UYXI5c1IwT3ZjQlU2aGpDQU9GQjg4cktPQVNSZzJx bGI0enVIS3VZWnlmVjlxc1lmSlRFUGJnR3E1ZHZvUmJkeDRqT3BPL2Rha2RYQ3lGWTZEOGZPUnho MnZQN3AzRjVRdm5LZ3pYL0JMazlhcFE0L0lGbFcwTGo4ME14ZDNyUG9ndU1FVFRGZzdRRXM2Yjhm aDdJeDNhTklPcE5CRlA3MS9EWHhmT3dQdXZxM2djVS9FZVFhbUtTb1VMRGNwOFdXRSs4cXQraXY5 Vm04ZFNKSGI3YS9LOGoxOFhhck11VmIydS84clA0L1l2RlNoVmFBdXBRbFh4UXJxSS9iQld6MUYr SEFMdSt1REJ2ZHQ0OE1BWEFVK0RFWnRXVUNZb0s1V1hYL2E5em9ma3F3cEtYbUZCUHJSdDNrWFNV NjcxZG5jM1loOGQrWGVJZVhCSVZ0YkE5aDJoOWdzb0tvQlptNEVZT0hRc1BtaGZldHBaOWkyY2Jo M2d3RDBMYkV3MG9vUnlPUWwvM3BmN2xFekEyWFA4aFo1RytHaG1YNWh3amZPYlp5OGprMzl5dVpa bFZmdENaZmhaRWtKRGthVnVpeWEyMmhWdVZaSm8ycUtSdlNrMGlqTEtISnBVa0p5RVpIQ0hKd29Y Y0xOVDAxQW9OWVM1U2NVcnJpb21WakNVRmlFdFRYN2ZLOHNvUTRzN1RORlRZN25HUXg0eWtxTVI4 dEFYVWRsU2JwbkNDYXJDTkdUbWNPUDZPaWptbnI4aXJ0WEJENFg4VlVkRGJhaFVzM3FpbGwraWtt M2hGYVluSVQwM0dRSDNBcENwMFFqTm5ZeExXLzVxZW1pZ1VvQjQ3dERwV1ZJR0NyalhrWDh0dFRS TFR3MlVZUFJNWUtUUS9HZFpGUmdiNjRETlNPUGErU0xVNHJGSzFHcjdhL0ljajE4emJ0K3VJUnNx Vlp0MXFlSjEvVmRoT3JkL1NXQm9iRnoyZmFET3ZWNktSKzlpOXNNNmVZN0tLVXF0WmNQb0pTc3Va aUZSMFVaUmZ1VVhQSXJ5c3lCUmZ2NUQxaElNRTRxVGgyOGlIUWJvOHRWdTdQVmNpYS9tZllrbGEz Wmh5MHgzYUJjL3c1Ky9YRUoybVlEaURyR0ZOMW42RmZtRkhsV3VLWTdFdjNEcXB0QkNreksxUEF6 bnRqbmpLZnhEdVVNVWh3NXdjM1dBbWJFQmRIUU5ZV0xqakRadVRhR2RIUUsvVVBuYm1OK0hHdGg3 d01PakdZeVVGSFlvTmhISmFVclFOOUFSQ3JqbEpnWWdNQkV3Y200UDE0WVcwTmZSaHBhT0FVenRX cUtOaXltWTVDY0lpUzlaaGpZc25WcWdlYk1tTU5SUzVUN2R0V0ZnWlFNanRTS2twc29mbXovSEd4 WVVDNmxsTTI1NXh0RGlQdTVWTkExZzRleUdGczJhd2FMYUMwdzFMLzlmbFd5TElqWXJGQThleDBG aTNod3UxaHJ5Vm1KZU9ySUtsYUZ2YVFNOURXV3U5YWdCQTd0V2NEQ3UrR29VRit2QXZxVUR0eDVx WE1OYkI2Wk4ycUNSZmo2ZWhVUlUrUzJTTWtROFZzWFhxUmJiWDVOYWJLc29PVm5JWmxWaFlHaTo view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAKV%2BfV0-ONCzyDGf3j9X%2BWqRXgt3ZO-ROUoidCHgvL%2BLRjGz%2BA%40mail.gmail.com.
Properties props = new Properties ();
props.put ("basepath", "file:cfg/hsm-");
props.put ("host", "localhost");
props.put ("port", "1700");
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAACHDe2hxzNqnaw%2B%2BYCdSE9G6QNrKumef-5T20m_kPFbTWk%3D0g%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAKV%2BfV02Uz_pajiXWBQ3ppd0__wmc-15miDG48QkjJZTZG177g%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAKV%2BfV02Uz_pajiXWBQ3ppd0__wmc-15miDG48QkjJZTZG177g%40mail.gmail.com.
<?xml version="1.0" encoding="UTF-8"?>
<schema>
<field id="command" type="A" length="2" key="true" />
</sc<?xml version="1.0" encoding="UTF-8"?>
<schema id='NC'>
</schema><?xml version="1.0" encoding="UTF-8"?>
<schema id='ND'>
<field id="error" type="A" length="2" />
<field id="lmk-check-value" type="A" length="16" />
<field id="firmware-number" type="A" length="9" />
</schema>
channel = new FSDChannel();
Properties props = new Properties ();
props.put ("schema", "file:cfg/hsm-");
props.put ("host", "localhost");
props.put ("port", "1700");
Configuration c = new SimpleConfiguration (props);
channel.setConfiguration(c);
channel.setPackager(new FSDPackager());
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAPazefBLVkAKrw2nAPamUdUUPpF-MZEhB7tR-fQ62CxDLpd9Kw%40mail.gmail.com.
When you see a Nested:java.io.FileNotFoundException: cfg\hsm-null.xml
it implies while parsing the message it did not find the command specific schema file.
So if you sent NC and got back a ND it will look for the hsm-ND.xml file.
Your schema does not include the 4 digit 1234 that you are getting. So its seeing 12 and looking for the xml schema hsm-12.xml and it cannot find it.
Include the header definition as the first field of the base file.
-chhil
<?xml version="1.0" encoding="UTF-8"?>
<schema>
<field id="header" type="N" length="4"/>
<field id="command" type="A" length="2" key="false" />
</schema>
<?xml version="1.0" encoding="UTF-8"?>
<schema>
<field id="header" type="N" length="4"/>
<field id="command" type="A" length="2" key="true" />
</s
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAPazefC94gRBFP7ew0HPv_0cZo21%2B9fBHZh29aoEWt7BASHESg%40mail.gmail.com.
FSDMsg m = new FSDMsg("file:/blah/jpostest/hsm-");
m.set("command", "NC");
System.out.println(m.pack());
m = new FSDMsg("file:/blah/jpostest/hsm-");
String resp = "1234ND00336065001064661126151500-0"; // See output, firmware gets cut. Need to adjust size.
m.unpack(resp.getBytes());
m.dump(System.out, "");
Output
0000NC
<fsdmsg schema='file:/blah/jpostest/hsm-base'>
stan: '1234'
command: 'ND'
error: '00'
lmk-check-value: '3360650010646611'
firmware-number: '26151500-'
</fsdmsg>
hsm-base.xml
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAKV%2BfV1y2FdD3O4DFbFeg14oEsgFON6x4kVD0dSS3p%3DaBVdoKA%40mail.gmail.com.
byte [] buffer = new byte [100];
byte [] buffer2 = new byte [100];
FSDISOMsg rep = new FSDISOMsg(resp);
// ISOMsg m = channel.receive();
channel.getBytes(buffer);
System.out.println(ISOUtil.hexdump(buffer));
System.arraycopy(buffer, 2, buffer2, 0, buffer.length - 2);
// System.out.println(ISOUtil.hexdump(buffer2));
resp.unpack(buffer2);
channel.receive();To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAPazefA1QHY0UstPOd2hcLD-b3e6SipPOoUPxo-cT%2Bf4ZiCQNg%40mail.gmail.com.
<?xml version="1.0" encoding="UTF-8"?>
<schema id='NC'>
</schema>
<?xml version="1.0" encoding="UTF-8"?>
<schema id='ND'>
<field id="error" type="A" length="2" />
<field id="lmk-check-value" type="A" length="16" />
<field id="firmware-number" type="A" length="9" />
</schema>
Venon Mapfunde(PMP,Msc Software Engineering,Bsc Computer Science & Mathematics) Tel:+263 775 091 262 Email:taka...@gmail.com Skype: venon.mapfunde
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAKV%2BfV2rv2ZVY8RPfDtNuocNfn9T71-Nc_mr2jLw_80LSbWP%3DQ%40mail.gmail.com.
channel.receive()Without manually copy because it's not returning FSDmsg
Thanks
FSDISOMsg response = (FSDISOMsg)channel.receive()
if (response != null) {
return ResponseEntity.ok(response.getFSDMsg().getMap());
} else {
return ResponseEntity.ok(tx.getFSDMsg().getMap());
}
not sure if that will work because i use a mux to send requests not directly through a channel like you are doing
Venon Mapfunde(PMP,Msc Software Engineering,Bsc Computer Science & Mathematics) Tel:+263 775 091 262 Email:taka...@gmail.com Skype: venon.mapfunde
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAKV%2BfV0QXW0hV1OhW%2Bn0SukwLGViSYgOQB3DeodVLGcyUGDLQg%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAKV%2BfV0QXW0hV1OhW%2Bn0SukwLGViSYgOQB3DeodVLGcyUGDLQg%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAACHDe205SrX4KhRagC261WLfRg2igCoHuPUT0ZUVHmy7UqBmw%40mail.gmail.com.
<mux class="org.jpos.q2.iso.QMUX" logger="Q2" name="mymux">
<in>hsm-receive</in>
<out>hsm-send</out>
<unhandled>mymux.unhandled</unhandled>
</mux>
<?xml version="1.0" encoding="UTF-8"?>
<channel-adaptor class="org.jpos.q2.iso.ChannelAdaptor" logger="Q2" name="HSMChannel">
<channel class="org.jpos.iso.channel.FSDChannel" logger="Q2"
packager="org.jpos.iso.packager.DummyPackager">
<property name="schema" value="file:cfg/hsm-resp-" />
<property name="packager-logger" value="Q2" />
<property name="host" value="127.0.0.1" />
<property name="port" value="1700" />
</channel>
<in>hsm-send</in>
<out>hsm-receive</out>
new Q2().start();
Thread.sleep(20000);
QMUX qmux = (QMUX) NameRegistrar.getIfExists("mux.my");
QMUX qmux = (QMUX) NameRegistrar.getIfExists("mux.my");
Let me know what's wrong with me
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAPazefATEiWfB6CDVEMuiHY4x6QTCuE-Y8oNCd%2BJ-QsNiqhLLg%40mail.gmail.com.
<?xml version="1.0" encoding="UTF-8"?>
<channel-adaptor class="org.jpos.q2.iso.ChannelAdaptor" logger="Q2" name="HSMChannel">
<channel class="org.jpos.iso.channel.FSDChannel" logger="Q2"
packager="org.jpos.iso.packager.DummyPackager">
<property name="schema" value="file:cfg/hsm-" />
<property name="packager-logger" value="Q2" />
<property name="host" value="127.0..1" />
<property name="port" value="1700" />
<property name="keep-alive" value="true"/>
</channel>
<in>hsm-send</in>
<out>hsm-receive</out>
<reconnect-delay>5000</reconnect-delay>
</chan
<mux class="org.jpos.q2.iso.QMUX" logger="Q2" name="hsm-mux">
<in>hsm-receive</in>
<out>hsm-send</out>
<key>stan</key>
<ready>thales-primary-channeladaptor.ready</ready>
<unhandled>mymux.unhandled</unhandled>
</mux>
<?xml version="1.0" encoding="UTF-8"?>
<schema>
<field id="stan" type="N" length="4"/>
<field id="command" type="A" length="2" key="true" />
</schema>
package org.example;
import org.jpos.q2.Q2;
import org.jpos.util.FSDMsg;
public class HsmMainRunner {
public static void main(String [] args) throws Exception {
new Thread(new HsmDemoServer()).start();
Thread.sleep(2000);
new Q2().start();
Thread.sleep(2000);
ThalesAdaptor adaptor = new ThalesAdaptor();
FSDMsg req = adaptor.diagnostics();
req.dump(System.out, " ");
FSDMsg resp = adaptor.command(req);
resp.dump(System.out, " ");
}
}
package org.example;
import org.jpos.iso.FSDISOMsg;
import org.jpos.iso.ISOUtil;
import org.jpos.iso.channel.FSDChannel;
import org.jpos.q2.iso.QMUX;
import org.jpos.util.FSDMsg;
import org.jpos.util.NameRegistrar;
public class ThalesAdaptor extends FSDISOMsg {
private FSDChannel channel;
@Override
public String getMTI() {
String command = getFSDMsg().get("command");
if (command==null){
return getFSDMsg().get("response");
}
return command;
}
private FSDMsg createRequest(String command) {
FSDMsg req = new FSDMsg("file:cfg/hsm-");
if (command != null)
req.set("command", command);
return req;
}
private FSDMsg createResponse(String response) {
FSDMsg resp = new FSDMsg("file:cfg/hsm-");
if (response != null)
resp.set("response", response);
return resp;
}
public FSDMsg diagnostics() {
return createRequest("NC");
}
public FSDMsg command(FSDMsg request) throws Exception {
StringBuffer sbuffer = new StringBuffer(request.get("command"));
sbuffer.setCharAt(1, (char) (sbuffer.charAt(1) + 1));
FSDMsg resp = createResponse(sbuffer.toString());
FSDISOMsg msg = new FSDISOMsg(request);
request.set("stan", "1234");
request.set("0", "0200");
System.out.println(ISOUtil.hexdump(msg.pack()));
QMUX qmux = (QMUX) NameRegistrar.getIfExists("mux.hsm-mux");
FSDISOMsg rep = new FSDISOMsg(resp);
rep = (FSDISOMsg)qmux.request(msg,5000);
return rep.getFSDMsg();
}
}
request.set("0", "0200");
rep = (FSDISOMsg)qmux.request(msg,5000);
return rep.getFSDMsg();
}
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAKV%2BfV0dmseSvW9PkadLbg6NFSLmDmq42CQzVjvRVAE1boHm7g%40mail.gmail.com.
FYI, you don't have to sleep for 20 seconds. Instead, you can use NameRegistrar.get("mux.my", 20000L). This way, if the MUX becomes available before the 20-second wait—which it most likely will be—you can speed up your startup time.
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAKV%2BfV0s%3DNGdpWctET6QpH6cQm2-3ePp%3DuV376GYZx7e%2BUjYgw%40mail.gmail.com.
<?xml version="1.0" encoding="UTF-8"?>
<schema command='ND'>
<field id="error" type="A" length="2" />
<field id="lmk-check-value" type="A" length="16" />
<field id="firmware-number" type="A" length="9" />
</schema>
<?xml version="1.0" encoding="UTF-8"?>
<schema command='NC'>
</schema>
private FSDMsg createResponse(String response) {
FSDMsg resp = new FSDMsg("file:cfg/hsm-");
if (response != null)
resp.set("command", response);
return resp;
}
public FSDMsg diagnostics() {
return createRequest("NC");
}
public FSDMsg command(FSDMsg request) throws Exception {
StringBuffer sbuffer = new StringBuffer(request.get("command"));
sbuffer.setCharAt(1, (char) (sbuffer.charAt(1) + 1));
FSDMsg resp = createResponse(sbuffer.toString());
FSDISOMsg msg = new FSDISOMsg(request);
request.set("stan", "1234");
request.set("0", "0200");
System.out.println(ISOUtil.hexdump(msg.pack()));
QMUX qmux = (QMUX) NameRegistrar.getIfExists("mux.hsm-mux");
FSDISOMsg rep = new FSDISOMsg(resp);
rep= (FSDISOMsg)qmux.request(msg,5000);
return rep.getFSDMsg();
rep= (FSDISOMsg)qmux.request(msg,5000);
I have noticed that rep is NULL
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAAgSK%3D%3DxPV8S8%3DNFqXMm6ssRm7khjptL1oB_qLkxy60s%2B8O_TA%40mail.gmail.com.
Put breakpoints and start debugging jpos code to figure out what's going on, is all that I can recommend.
<?xml version="1.0" encoding="UTF-8"?>
<schema>
<field id="stan" type="N" length="4"/>
<field id="command" type="A" length="2" key="true" />
</schema>
<?xml version="1.0" encoding="UTF-8"?>
<schema command='NC'>
</schema>
<?xml version="1.0" encoding="UTF-8"?>
<schema command='ND'>
<field id="error" type="A" length="2" />
<field id="lmk-check-value" type="A" length="16" />
<field id="firmware-number" type="A" length="9" />
</schema>
<?xml version="1.0" encoding="UTF-8"?>
<channel-adaptor class="org.jpos.q2.iso.ChannelAdaptor" logger="Q2" name="HSMChannel">
<channel class="com.hsm.thales.HSMChannel" logger="Q2"
packager="org.jpos.iso.packager.DummyPackager">
<property name="schema" value="file:cfg/hsm-" />
<property name="packager-logger" value="Q2" />
<property name="host" value="10.226.180.37" />
<property name="port" value="1700" />
<property name="keep-alive" value="true"/>
</channel>
<in>hsm-send</in>
<out>hsm-receive</out>
<reconnect-delay>5000</reconnect-delay>
</channel-adaptor>
<mux class="org.jpos.q2.iso.QMUX" logger="Q2" name="hsm-mux">
<in>hsm-receive</in>
<out>hsm-send</out>
<key>stan</key>
<ready>thales-primary-channeladaptor.ready</ready>
<unhandled>mymux.unhandled</unhandled>
</mux>
package com.hsm.thales;
import org.jpos.iso.ISOMsg;
import org.jpos.iso.channel.FSDChannel;
import org.jpos.util.FSDMsg;
public class HSMChannel extends FSDChannel {
public HSMChannel() {
super();
}
@Override
public ISOMsg createMsg() {
FSDMsg fsdmsg = new FSDMsg ("file:cfg/hsm-");
return new HSMsg(fsdmsg);
}
}
package com.hsm.thales;
import org.jpos.q2.Q2;
import org.jpos.util.FSDMsg;
import org.jpos.util.NameRegistrar;
public class HsmMainRunner {
public static void main(String [] args) throws Exception {
new Q2().start();
ThalesAdaptor.qmux= NameRegistrar.get("mux.hsm-mux", 20000L);
ThalesAdaptor adaptor = new ThalesAdaptor();
FSDMsg req = adaptor.diagnostics();
req.dump(System.out, " ");
FSDMsg resp = adaptor.command(req);
resp.dump(System.out, " ");
}
}
package com.hsm.thales;
import org.jpos.iso.FSDISOMsg;
import org.jpos.util.FSDMsg;
public class HSMsg extends FSDISOMsg {
// Constructor
public HSMsg(FSDMsg f) {
super(f);
}
public HSMsg() {
super();
}
@Override
public String getMTI() {
String command = getFSDMsg().get("command");
if (command==null){
return getFSDMsg().get("command");
}
return command;
}
}
package com.hsm.thales;
import org.jpos.iso.ISOUtil;
import org.jpos.q2.iso.QMUX;
import org.jpos.util.FSDMsg;
public class ThalesAdaptor {
static QMUX qmux ;
private FSDMsg createRequest(String command) {
FSDMsg req = new FSDMsg("file:cfg/hsm-");
if (command != null)
req.set("command", command);
return req;
}
private FSDMsg createResponse(String response) {
FSDMsg resp = new FSDMsg("file:cfg/hsm-");
if (response != null)
resp.set("command", response);
return resp;
}
public FSDMsg diagnostics() {
return createRequest("NC");
}
public FSDMsg command(FSDMsg request) throws Exception {
StringBuffer sbuffer = new StringBuffer(request.get("command"));
sbuffer.setCharAt(1, (char) (sbuffer.charAt(1) + 1));
FSDMsg resp = createResponse(sbuffer.toString());
HSMsg msg = new HSMsg(request);
request.set("stan", "1234");
System.out.println(ISOUtil.hexdump(msg.pack()));
HSMsg rep = new HSMsg(resp);
rep=(HSMsg) qmux.request(msg,5000);
return rep.getFSDMsg();
}
}
--
--
jPOS is licensed under AGPL - free for community usage for your open-source project. Licenses are also available for commercial usage. Please support jPOS, contact: sa...@jpos.org
---
You received this message because you are subscribed to the Google Groups "jPOS Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jpos-users+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/CAPazefCH23-%2BSQWmg8bK783h3vMSdQYU4fh76qOEFwTpb-KEWA%40mail.gmail.com.
Excellent!
Maybe point out what you fixed so that someone doesn't have to go through your various iterations of files and code to figure out would be helpful. Thanks.
--
--
jPOS is licensed under AGPL - free for community usage for your open-source project. Licenses are also available for commercial usage. Please support jPOS, contact: sa...@jpos.org
---
You received this message because you are subscribed to the Google Groups "jPOS Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jpos-users+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jpos-users/b5e3c773-deac-4db5-8839-092b4dec6f2bn%40googlegroups.com.