public void TestDefaultLmks() { LmkStorage.LmkStorageFile = "nofile.txt"; LmkStorage.GenerateTestLmks(false); Assert.AreEqual("01010101010101017902CD1FD36EF8BA", LmkStorage.Lmk(LmkPair.Pair00_01)); Assert.AreEqual("20202020202020203131313131313131", LmkStorage.Lmk(LmkPair.Pair02_03)); Assert.AreEqual("40404040404040405151515151515151", LmkStorage.Lmk(LmkPair.Pair04_05)); Assert.AreEqual("61616161616161617070707070707070", LmkStorage.Lmk(LmkPair.Pair06_07)); Assert.AreEqual("80808080808080809191919191919191", LmkStorage.Lmk(LmkPair.Pair08_09)); Assert.AreEqual("A1A1A1A1A1A1A1A1B0B0B0B0B0B0B0B0", LmkStorage.Lmk(LmkPair.Pair10_11)); Assert.AreEqual("C1C1010101010101D0D0010101010101", LmkStorage.Lmk(LmkPair.Pair12_13)); Assert.AreEqual("E0E0010101010101F1F1010101010101", LmkStorage.Lmk(LmkPair.Pair14_15)); Assert.AreEqual("1C587F1C13924FEF0101010101010101", LmkStorage.Lmk(LmkPair.Pair16_17)); Assert.AreEqual("01010101010101010101010101010101", LmkStorage.Lmk(LmkPair.Pair18_19)); Assert.AreEqual("02020202020202020404040404040404", LmkStorage.Lmk(LmkPair.Pair20_21)); Assert.AreEqual("07070707070707071010101010101010", LmkStorage.Lmk(LmkPair.Pair22_23)); Assert.AreEqual("13131313131313131515151515151515", LmkStorage.Lmk(LmkPair.Pair24_25)); Assert.AreEqual("16161616161616161919191919191919", LmkStorage.Lmk(LmkPair.Pair26_27)); Assert.AreEqual("1A1A1A1A1A1A1A1A1C1C1C1C1C1C1C1C", LmkStorage.Lmk(LmkPair.Pair28_29)); Assert.AreEqual("23232323232323232525252525252525", LmkStorage.Lmk(LmkPair.Pair30_31)); Assert.AreEqual("26262626262626262929292929292929", LmkStorage.Lmk(LmkPair.Pair32_33)); Assert.AreEqual("2A2A2A2A2A2A2A2A2C2C2C2C2C2C2C2C", LmkStorage.Lmk(LmkPair.Pair34_35)); Assert.AreEqual("2F2F2F2F2F2F2F2F3131313131313131", LmkStorage.Lmk(LmkPair.Pair36_37)); Assert.AreEqual("01010101010101010101010101010101", LmkStorage.Lmk(LmkPair.Pair38_39)); Assert.IsTrue(LmkStorage.CheckLmkStorage()); }
public void TestDefaultOldLmks() { LmkStorage.LmkStorageFile = "nofile.txt"; LmkStorage.GenerateTestLmks(false); LmkStorage.UseOldLmkStorage = true; Assert.AreEqual("101010101010101F7902CD1FD36EF8BA", LmkStorage.Lmk(LmkPair.Pair00_01)); Assert.AreEqual("202020202020202F3131313131313131", LmkStorage.Lmk(LmkPair.Pair02_03)); Assert.AreEqual("404040404040404F5151515151515151", LmkStorage.Lmk(LmkPair.Pair04_05)); Assert.AreEqual("616161616161616E7070707070707070", LmkStorage.Lmk(LmkPair.Pair06_07)); Assert.AreEqual("808080808080808F9191919191919191", LmkStorage.Lmk(LmkPair.Pair08_09)); Assert.AreEqual("A1A1A1A1A1A1A1AEB0B0B0B0B0B0B0B0", LmkStorage.Lmk(LmkPair.Pair10_11)); Assert.AreEqual("C1C101010101010ED0D0010101010101", LmkStorage.Lmk(LmkPair.Pair12_13)); Assert.AreEqual("E0E001010101010EF1F1010101010101", LmkStorage.Lmk(LmkPair.Pair14_15)); Assert.AreEqual("1C587F1C13924FFE0101010101010101", LmkStorage.Lmk(LmkPair.Pair16_17)); Assert.AreEqual("010101010101010E0101010101010101", LmkStorage.Lmk(LmkPair.Pair18_19)); Assert.AreEqual("020202020202020E0404040404040404", LmkStorage.Lmk(LmkPair.Pair20_21)); Assert.AreEqual("070707070707070E1010101010101010", LmkStorage.Lmk(LmkPair.Pair22_23)); Assert.AreEqual("131313131313131F1515151515151515", LmkStorage.Lmk(LmkPair.Pair24_25)); Assert.AreEqual("161616161616161F1919191919191919", LmkStorage.Lmk(LmkPair.Pair26_27)); Assert.AreEqual("1A1A1A1A1A1A1A1F1C1C1C1C1C1C1C1C", LmkStorage.Lmk(LmkPair.Pair28_29)); Assert.AreEqual("232323232323232F2525252525252525", LmkStorage.Lmk(LmkPair.Pair30_31)); Assert.AreEqual("262626262626262F2929292929292929", LmkStorage.Lmk(LmkPair.Pair32_33)); Assert.AreEqual("2A2A2A2A2A2A2A2F2C2C2C2C2C2C2C2C", LmkStorage.Lmk(LmkPair.Pair34_35)); Assert.AreEqual("2F2F2F2F2F2F2FFE3131313131313131", LmkStorage.Lmk(LmkPair.Pair36_37)); Assert.AreEqual("010101010101010E0101010101010101", LmkStorage.Lmk(LmkPair.Pair38_39)); Assert.IsTrue(LmkStorage.CheckLmkStorage()); LmkStorage.UseOldLmkStorage = false; }
/// <summary> /// Process a message. /// </summary> /// <param name="message">Byte array with request message.</param> /// <param name="resp">Host command response.</param> /// <param name="respAfterIo">Host command response after doing printer I/O.</param> public void ProcessMessage(byte[] message, out StreamResponse resp, out StreamResponse respAfterIo) { DumpMessage(message, "Incoming message"); var msg = new StreamMessage(message); resp = null; respAfterIo = null; try { if (msg.CharsLeft < Properties.Settings.Default.HeaderLength + 2) { _log.ErrorFormat("Too small message, must be at least {0} bytes long", Properties.Settings.Default.HeaderLength + 2); return; } var msgHeader = msg.Substring(Properties.Settings.Default.HeaderLength); var code = msg.Substring(2); var msgTrailer = Properties.Settings.Default.ExpectTrailers ? msg.GetTrailer() : string.Empty; _log.DebugFormat("Header {0}, command code {1}", msgHeader, code); var command = (HostCommand)CommandExplorer.GetCommand(CommandType.Host, code); if (command == null) { _log.ErrorFormat("No implementor for {0}.", code); return; } if (Properties.Settings.Default.CheckLMKParity && !LmkStorage.CheckLmkStorage()) { _log.Error("LMK storage check failed"); resp = new StreamResponse(); resp.Append(ErrorCodes.ER_13_MASTER_KEY_PARITY_ERROR); resp.AppendFront(command.ResponseCode); resp.AppendFront(msgHeader); resp.Append(msgTrailer); return; } _log.Debug("Instantiating command..."); var o = (AHostCommand)Activator.CreateInstance(command.DeclaringType); _log.Debug("Calling AcceptMessage()..."); o.AcceptMessage(msg); _log.Debug(o.DumpFields()); if (o.XmlParseResult != ErrorCodes.ER_00_NO_ERROR) { _log.DebugFormat("Error code {0} return while parsing message", o.XmlParseResult); resp = new StreamResponse(); resp.Append(o.XmlParseResult); } else { _log.Debug("Calling ConstructResponse()..."); resp = o.ConstructResponse(); _log.Debug("Calling ConstructResponseAfterIo()..."); respAfterIo = o.ConstructResponseAfterIo(); } resp.AppendFront(command.ResponseCode); resp.AppendFront(msgHeader); resp.Append(msgTrailer); DumpMessage(resp.GetBytes(), "Response message"); if (respAfterIo != null && !string.IsNullOrEmpty(command.ResponseCodeAfterIo)) { respAfterIo.AppendFront(command.ResponseCodeAfterIo); respAfterIo.AppendFront(msgHeader); respAfterIo.Append(msgTrailer); DumpMessage(respAfterIo.GetBytes(), "Response message after I/O"); } if (!string.IsNullOrEmpty(o.PrinterData)) { _log.InfoFormat("Printer data\r\n{0}", o.PrinterData); } } catch (Exception ex) { _log.Debug("Exception while processing message", ex); resp = null; respAfterIo = null; } }