public static IntegerResources Deserialise(TlvReader reader) { IntegerResources result = null; if (reader.TlvRecord == null) { reader.Read(); } if (reader.TlvRecord != null) { if (reader.TlvRecord.TypeIdentifier == TTlvTypeIdentifier.MultipleResources) { result = new IntegerResources(reader.TlvRecord.Identifier.ToString()); if (reader.TlvRecord.Value != null) { using (TlvReader childReader = new TlvReader(reader.TlvRecord.Value)) { while (childReader.Read()) { if (childReader.TlvRecord.TypeIdentifier == TTlvTypeIdentifier.ResourceInstance) { IntegerResource childResource = new IntegerResource(childReader.TlvRecord.Identifier.ToString()); childResource.Value = childReader.TlvRecord.ValueAsInt64(); result.Add(childResource); } } } } } } return(result); }
public override bool Deserialise(TlvReader reader) { bool result = false; while (reader.Read()) { if (reader.TlvRecord.TypeIdentifier == TTlvTypeIdentifier.ObjectInstance) { if (string.Compare(this.Name, reader.TlvRecord.Identifier.ToString()) != 0) { this.Name = reader.TlvRecord.Identifier.ToString(); } reader = new TlvReader(reader.TlvRecord.Value); } else if ((reader.TlvRecord.TypeIdentifier != TTlvTypeIdentifier.ObjectInstance) && (reader.TlvRecord.TypeIdentifier != TTlvTypeIdentifier.NotSet)) { switch ((ResourceID)reader.TlvRecord.Identifier) { case ResourceID.Package: this.Package = reader.TlvRecord.Value; result = true; break; case ResourceID.PackageURI: this.PackageURI = reader.TlvRecord.ValueAsString(); result = true; break; case ResourceID.State: this.State = reader.TlvRecord.ValueAsInt64(); result = true; break; case ResourceID.UpdateSupportedObjects: this.UpdateSupportedObjects = reader.TlvRecord.ValueAsBoolean(); result = true; break; case ResourceID.UpdateResult: this.UpdateResult = reader.TlvRecord.ValueAsInt64(); result = true; break; case ResourceID.PackageName: this.PackageName = reader.TlvRecord.ValueAsString(); result = true; break; case ResourceID.PackageVersion: this.PackageVersion = reader.TlvRecord.ValueAsString(); result = true; break; default: break; } } } return(result); }
public static RawTag GetRawTag(string file) { using (TlvReader reader = new TlvReader(new FileStream(Path.Combine(TestSetup.LocalPath, file), FileMode.Open))) { return(reader.ReadTag()); } }
protected override void DoPost(CoapExchange exchange) { Request request = exchange.Request; bool processed = false; if ((request.ContentType == TlvConstant.CONTENT_TYPE_TLV)) { if (request.Payload != null) { using (TlvReader reader = new TlvReader(request.Payload)) { this.Deserialise(reader); processed = true; } } } if (processed) { Response response = Response.CreateResponse(exchange.Request, StatusCode.Changed); exchange.Respond(response); if (Updated != null) { Updated(this, null); } } else { Response response = Response.CreateResponse(exchange.Request, StatusCode.BadRequest); exchange.Respond(response); } }
public void TestReadTagShortWithLongType() { using (TlvReader reader = new TlvReader(new MemoryStream(new byte[] { 0xa0, 0x33, 0x0, 0x4, 0x0, 0x1, 0x2, 0x3 }))) { Assert.AreEqual(new RawTag(0x33, false, true, new byte[] { 0x0, 0x1, 0x2, 0x3 }), reader.ReadTag(), "Reader should output correct byte array"); } }
public void TestReadTagShort() { using (TlvReader reader = new TlvReader(new MemoryStream(new byte[] { 0x21, 0x4, 0x0, 0x1, 0x2, 0x3 }))) { TlvTag tag = reader.ReadTag(); Assert.AreEqual(new RawTag(0x1, false, true, new byte[] { 0x0, 0x1, 0x2, 0x3 }), tag, "Reader should output correct tag"); } }
private static ExtendResponsePayload GetExtendResponsePayload(string path) { byte[] bytes = File.ReadAllBytes(Path.Combine(TestSetup.LocalPath, path)); using (TlvReader reader = new TlvReader(new MemoryStream(bytes))) { ExtendResponsePdu pdu = new ExtendResponsePdu(reader.ReadTag()); return(pdu.Payloads[0] as ExtendResponsePayload); } }
public override bool Deserialise(TlvReader reader) { bool result = false; while (reader.Read()) { if (reader.TlvRecord.TypeIdentifier == TTlvTypeIdentifier.ObjectInstance) { if (string.Compare(this.Name, reader.TlvRecord.Identifier.ToString()) != 0) { this.Name = reader.TlvRecord.Identifier.ToString(); } reader = new TlvReader(reader.TlvRecord.Value); } else if ((reader.TlvRecord.TypeIdentifier != TTlvTypeIdentifier.ObjectInstance) && (reader.TlvRecord.TypeIdentifier != TTlvTypeIdentifier.NotSet)) { switch ((ResourceID)reader.TlvRecord.Identifier) { case ResourceID.SMSTxCounter: this.SMSTxCounter = reader.TlvRecord.ValueAsInt64(); result = true; break; case ResourceID.SMSRxCounter: this.SMSRxCounter = reader.TlvRecord.ValueAsInt64(); result = true; break; case ResourceID.TxData: this.TxData = reader.TlvRecord.ValueAsInt64(); result = true; break; case ResourceID.RxData: this.RxData = reader.TlvRecord.ValueAsInt64(); result = true; break; case ResourceID.MaxMessageSize: this.MaxMessageSize = reader.TlvRecord.ValueAsInt64(); result = true; break; case ResourceID.AverageMessageSize: this.AverageMessageSize = reader.TlvRecord.ValueAsInt64(); result = true; break; default: break; } } } return(result); }
public override bool Deserialise(TlvReader reader) { bool result = false; while (reader.Read()) { if (reader.TlvRecord.TypeIdentifier == TTlvTypeIdentifier.ObjectInstance) { if (string.Compare(this.Name, reader.TlvRecord.Identifier.ToString()) != 0) { this.Name = reader.TlvRecord.Identifier.ToString(); } reader = new TlvReader(reader.TlvRecord.Value); } else if ((reader.TlvRecord.TypeIdentifier != TTlvTypeIdentifier.ObjectInstance) && (reader.TlvRecord.TypeIdentifier != TTlvTypeIdentifier.NotSet)) { switch ((ResourceID)reader.TlvRecord.Identifier) { case ResourceID.Property: this.Property = reader.TlvRecord.ValueAsString(); result = true; break; case ResourceID.Group: this.Group = reader.TlvRecord.ValueAsInt64(); result = true; break; case ResourceID.Description: this.Description = reader.TlvRecord.ValueAsString(); result = true; break; case ResourceID.Attached: this.Attached = reader.TlvRecord.ValueAsBoolean(); result = true; break; case ResourceID.Enabled: this.Enabled = reader.TlvRecord.ValueAsBoolean(); result = true; break; case ResourceID.NotifyEn: this.NotifyEn = reader.TlvRecord.ValueAsBoolean(); result = true; break; default: break; } } } return(result); }
public override bool Deserialise(TlvReader reader) { bool result = false; while (reader.Read()) { if (reader.TlvRecord.TypeIdentifier == TTlvTypeIdentifier.ObjectInstance) { if (string.Compare(this.Name, reader.TlvRecord.Identifier.ToString()) != 0) { this.Name = reader.TlvRecord.Identifier.ToString(); } reader = new TlvReader(reader.TlvRecord.Value); } else if ((reader.TlvRecord.TypeIdentifier != TTlvTypeIdentifier.ObjectInstance) && (reader.TlvRecord.TypeIdentifier != TTlvTypeIdentifier.NotSet)) { switch ((ResourceID)reader.TlvRecord.Identifier) { case ResourceID.Latitude: this.Latitude = reader.TlvRecord.ValueAsString(); result = true; break; case ResourceID.Longitude: this.Longitude = reader.TlvRecord.ValueAsString(); result = true; break; case ResourceID.Altitude: this.Altitude = reader.TlvRecord.ValueAsString(); result = true; break; case ResourceID.Uncertainty: this.Uncertainty = reader.TlvRecord.ValueAsString(); result = true; break; case ResourceID.Velocity: this.Velocity = reader.TlvRecord.Value; result = true; break; case ResourceID.Timestamp: this.Timestamp = reader.TlvRecord.ValueAsDateTime(); result = true; break; default: break; } } } return(result); }
/// <summary> /// Get all child tags from byte array /// </summary> /// <param name="bytes">byte array containing tags</param> /// <returns></returns> private static IEnumerable <RawTag> GetChildren(byte[] bytes) { using (TlvReader tlvReader = new TlvReader(new MemoryStream(bytes))) { while (tlvReader.BaseStream.Position < tlvReader.BaseStream.Length) { RawTag raw = tlvReader.ReadTag(); yield return(raw); } } }
public void TestReadDataWithInvalidLength() { using (TlvReader reader = new TlvReader(new MemoryStream(new byte[] { 0x21, 0x2 }))) { TlvException ex = Assert.Throws <TlvException>(delegate { reader.ReadTag(); }); Assert.That(ex.Message, Does.StartWith("Could not read TLV data with expected length")); } }
public void PduTest() { byte[] bytes = File.ReadAllBytes(Path.Combine(TestSetup.LocalPath, Resources.KsiService_AggregationResponsePdu_RequestId_1584727637)); using (TlvReader tlvReader = new TlvReader(new MemoryStream(bytes))) { AggregationResponsePdu pdu = new AggregationResponsePdu(tlvReader.ReadTag()); Assert.IsNotNull(pdu.Header, "Unexpected PDU header"); Assert.AreEqual(3, pdu.GetChildren().Length, "Unexpected childen count."); } }
public void TestReadTooShortTag() { using (TlvReader reader = new TlvReader(new MemoryStream(new byte[] { 0x21 }))) { TlvException ex = Assert.Throws <TlvException>(delegate { reader.ReadTag(); }); Assert.That(ex.Message, Does.StartWith("Premature end of input data")); } }
public override bool Deserialise(TlvReader reader) { bool result = false; while (reader.Read()) { if ((reader.TlvRecord.TypeIdentifier != TTlvTypeIdentifier.ObjectInstance) && (reader.TlvRecord.TypeIdentifier != TTlvTypeIdentifier.NotSet)) { switch ((ResourceID)reader.TlvRecord.Identifier) { case ResourceID.ShortServerID: this.ShortServerID = reader.TlvRecord.ValueAsInt64(); result = true; break; case ResourceID.Lifetime: this.Lifetime = reader.TlvRecord.ValueAsInt64(); result = true; break; case ResourceID.DefaultMinimumPeriod: this.DefaultMinimumPeriod = reader.TlvRecord.ValueAsInt64(); result = true; break; case ResourceID.DefaultMaximumPeriod: this.DefaultMaximumPeriod = reader.TlvRecord.ValueAsInt64(); result = true; break; case ResourceID.DisableTimeout: this.DisableTimeout = reader.TlvRecord.ValueAsInt64(); result = true; break; case ResourceID.NotificationStoringWhenDisabledorOffline: this.NotificationStoringWhenDisabledorOffline = reader.TlvRecord.ValueAsBoolean(); result = true; break; case ResourceID.Binding: this.Binding = reader.TlvRecord.ValueAsString(); result = true; break; default: break; } } } return(result); }
public void TestReadTagLongWithShortType() { byte[] data = new byte[260]; data[0] = 0xe0; data[1] = 0x1; data[2] = 0x1; data[3] = 0x0; Array.Copy(new byte[256], 0, data, 4, 256); using (TlvReader reader = new TlvReader(new MemoryStream(data))) { Assert.AreEqual(new RawTag(0x1, true, true, new byte[256]), reader.ReadTag(), "Reader should output correct byte array"); } }
public void PduMacValidationTest() { byte[] bytes = File.ReadAllBytes(Path.Combine(TestSetup.LocalPath, Resources.KsiService_AggregatorConfigResponsePdu)); ImprintTag mac; using (TlvReader tlvReader = new TlvReader(new MemoryStream(bytes))) { mac = new AggregationResponsePdu(tlvReader.ReadTag()).Mac; } Assert.IsTrue(Pdu.ValidateMac(bytes, mac, Util.EncodeNullTerminatedUtf8String(TestConstants.ServicePass)), "MAC should be valid"); }
public static BooleanResources Deserialise(Request request) { BooleanResources result = null; string name = request.UriPaths.Last(); if (!string.IsNullOrEmpty(name) && (request.ContentType == TlvConstant.CONTENT_TYPE_TLV)) { using (TlvReader reader = new TlvReader(request.Payload)) { result = Deserialise(reader); } } return(result); }
public override bool Deserialise(TlvReader reader) { bool result = false; while (reader.Read()) { if (reader.TlvRecord.TypeIdentifier == TTlvTypeIdentifier.ObjectInstance) { if (string.Compare(this.Name, reader.TlvRecord.Identifier.ToString()) != 0) { this.Name = reader.TlvRecord.Identifier.ToString(); } reader = new TlvReader(reader.TlvRecord.Value); } else if ((reader.TlvRecord.TypeIdentifier != TTlvTypeIdentifier.ObjectInstance) && (reader.TlvRecord.TypeIdentifier != TTlvTypeIdentifier.NotSet)) { switch ((ResourceID)reader.TlvRecord.Identifier) { case ResourceID.URL: this.URL = reader.TlvRecord.ValueAsString(); result = true; break; case ResourceID.CustomerKey: this.CustomerKey = reader.TlvRecord.ValueAsString(); result = true; break; case ResourceID.CustomerSecret: this.CustomerSecret = reader.TlvRecord.ValueAsString(); result = true; break; case ResourceID.RememberMeToken: this.RememberMeToken = reader.TlvRecord.ValueAsString(); result = true; break; case ResourceID.RememberMeTokenExpiry: this.RememberMeTokenExpiry = reader.TlvRecord.ValueAsDateTime(); result = true; break; default: break; } } } return(result); }
public static bool Deserialise(TlvReader reader, BooleanResource item) { bool result = false; if (reader.TlvRecord == null) { reader.Read(); } if (reader.TlvRecord.TypeIdentifier == TTlvTypeIdentifier.ResourceWithValue) { item.Value = reader.TlvRecord.ValueAsBoolean(); result = true; } return(result); }
public static LWM2MServerResource Deserialise(Request request) { LWM2MServerResource result = null; string name = request.UriPaths.Last(); if (!string.IsNullOrEmpty(name) && (request.ContentType == TlvConstant.CONTENT_TYPE_TLV)) { result = new LWM2MServerResource(name); using (TlvReader reader = new TlvReader(request.Payload)) { result.Deserialise(reader); } } return(result); }
public void PduMacValidationWith0x0IntStaticInvalidTest() { byte[] bytes = File.ReadAllBytes(Path.Combine(TestSetup.LocalPath, Resources.KsiService_AggregatorConfigResponsePdu_0x0_Int)); AggregationResponsePdu pdu; using (TlvReader tlvReader = new TlvReader(new MemoryStream(bytes))) { pdu = new AggregationResponsePdu(tlvReader.ReadTag()); } // 0x0 value representing an integer is converted to an empty TLV, thus MAC check will fail. byte[] pduBytes = pdu.Encode(); Assert.IsFalse(Pdu.ValidateMac(pduBytes, pdu.Mac, Util.EncodeNullTerminatedUtf8String(TestConstants.ServicePass)), "MAC should be invalid"); }
protected override void DoPut(CoapExchange exchange) { if (exchange.Request.ContentType == TlvConstant.CONTENT_TYPE_TLV) { using (TlvReader reader = new TlvReader(exchange.Request.Payload)) { this.Deserialise(reader); } Response response = Response.CreateResponse(exchange.Request, StatusCode.Changed); exchange.Respond(response); } else { base.DoPut(exchange); } }
public static DateTimeResource Deserialise(Request request) { DateTimeResource result = null; string name = request.UriPaths.Last(); if (!string.IsNullOrEmpty(name) && (request.ContentType == TlvConstant.CONTENT_TYPE_TLV)) { DateTimeResource resource = new DateTimeResource(name); using (TlvReader reader = new TlvReader(request.Payload)) { if (Deserialise(reader, resource)) { result = resource; } } } return(result); }
/// <summary> /// Finds all asyncResults matching response payloads in given PDU and marks them as completed. /// </summary> /// <param name="pduBytes">PDU bytes</param> /// <returns></returns> private bool ProcessPdu(byte[] pduBytes) { bool isPayloadFound = false; using (TlvReader reader = new TlvReader(new MemoryStream(pduBytes))) { // iterate over all payloads in PDU foreach (KsiServiceResponsePayloadInfo payloadInfo in GetResponsePayloadInfos(reader.ReadTag())) { isPayloadFound = true; bool asyncResultFound = false; foreach (TcpKsiServiceAsyncResult asyncResult in GetAsyncResults(payloadInfo)) { asyncResultFound = true; if (!asyncResult.IsCompleted) { asyncResult.ResultStream = new MemoryStream(pduBytes); Logger.Debug("Response payload received. Request type: {0}; Response payload type: {1}; (request id: {2}).", asyncResult.ServiceRequestType, payloadInfo.ResponsePayloadType, asyncResult.RequestId); asyncResult.SetComplete(); } else { Logger.Debug("AsyncResult already marked as Completed. Request type: {0}; Response payload type: {1}; (request id: {2}).", asyncResult.ServiceRequestType, payloadInfo.ResponsePayloadType, asyncResult.RequestId); } _asyncResults.Remove(asyncResult); } if (!asyncResultFound) { Logger.Warn("No request data found corresponding to the respose payload. Response info: {0}; Response TLV: {1}", payloadInfo, Base16.Encode(pduBytes)); } } } return(isPayloadFound); }
public override bool Deserialise(TlvReader reader) { bool result = false; while (reader.Read()) { if ((reader.TlvRecord.TypeIdentifier != TTlvTypeIdentifier.ObjectInstance) && (reader.TlvRecord.TypeIdentifier != TTlvTypeIdentifier.NotSet)) { switch ((ResourceID)reader.TlvRecord.Identifier) { case ResourceID.ObjectID: this.ObjectID = reader.TlvRecord.ValueAsInt64(); result = true; break; case ResourceID.ObjectInstanceID: this.ObjectInstanceID = reader.TlvRecord.ValueAsInt64(); result = true; break; case ResourceID.ACLs: this.ACLs = IntegerResources.Deserialise(reader); result = true; break; case ResourceID.AccessControlOwner: this.AccessControlOwner = reader.TlvRecord.ValueAsInt64(); result = true; break; default: break; } } } return(result); }
/// <summary> /// Create KSI signature instance from stream. /// </summary> /// <param name="stream">signature data stream</param> /// <param name="hash">Signed hash</param> /// <returns>KSI signature</returns> public IKsiSignature Create(Stream stream, DataHash hash = null) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } using (TlvReader reader = new TlvReader(stream)) { try { Logger.Debug("Creating KSI signature from stream."); KsiSignature signature = CreateAndVerify(reader.ReadTag(), null); Logger.Debug("Creating KSI signature from stream successful."); return(signature); } catch (TlvException e) { Logger.Warn("Creating KSI signature from stream failed: {0}", e); throw; } } }
public override bool Deserialise(TlvReader reader) { bool result = false; while (reader.Read()) { if (reader.TlvRecord.TypeIdentifier == TTlvTypeIdentifier.ObjectInstance) { if (string.Compare(this.Name, reader.TlvRecord.Identifier.ToString()) != 0) { this.Name = reader.TlvRecord.Identifier.ToString(); } reader = new TlvReader(reader.TlvRecord.Value); } else if ((reader.TlvRecord.TypeIdentifier != TTlvTypeIdentifier.ObjectInstance) && (reader.TlvRecord.TypeIdentifier != TTlvTypeIdentifier.NotSet)) { switch ((ResourceID)reader.TlvRecord.Identifier) { case ResourceID.DeviceID: this.DeviceID = reader.TlvRecord.Value; result = true; break; case ResourceID.ParentID: this.ParentID = reader.TlvRecord.Value; result = true; break; case ResourceID.DeviceType: this.DeviceType = reader.TlvRecord.ValueAsString(); result = true; break; case ResourceID.Name: this.Name = reader.TlvRecord.ValueAsString(); result = true; break; case ResourceID.Description: this.Description = reader.TlvRecord.ValueAsString(); result = true; break; case ResourceID.FCAP: this.FCAP = reader.TlvRecord.ValueAsString(); result = true; break; case ResourceID.TenantID: this.TenantID = reader.TlvRecord.ValueAsInt64(); result = true; break; case ResourceID.TenantChallenge: this.TenantChallenge = reader.TlvRecord.Value; result = true; break; case ResourceID.HashIterations: this.HashIterations = reader.TlvRecord.ValueAsInt64(); result = true; break; case ResourceID.TenantHash: this.TenantHash = reader.TlvRecord.Value; result = true; break; case ResourceID.Status: this.Status = reader.TlvRecord.ValueAsInt64(); result = true; break; default: break; } } } return(result); }
public override bool Deserialise(TlvReader reader) { bool result = false; while (reader.Read()) { if (reader.TlvRecord.TypeIdentifier == TTlvTypeIdentifier.ObjectInstance) { if (string.Compare(this.Name, reader.TlvRecord.Identifier.ToString()) != 0) { this.Name = reader.TlvRecord.Identifier.ToString(); } reader = new TlvReader(reader.TlvRecord.Value); } else if ((reader.TlvRecord.TypeIdentifier != TTlvTypeIdentifier.ObjectInstance) && (reader.TlvRecord.TypeIdentifier != TTlvTypeIdentifier.NotSet)) { switch ((ResourceID)reader.TlvRecord.Identifier) { case ResourceID.ShortServerID: this.ShortServerID = reader.TlvRecord.ValueAsInt32(); result = true; break; case ResourceID.Lifetime: this.Lifetime = reader.TlvRecord.ValueAsInt32(); result = true; break; case ResourceID.DefaultMinimumPeriod: this.DefaultMinimumPeriod = reader.TlvRecord.ValueAsInt32(); result = true; break; case ResourceID.DefaultMaximumPeriod: this.DefaultMaximumPeriod = reader.TlvRecord.ValueAsInt32(); result = true; break; case ResourceID.DisableTimeout: this.DisableTimeout = reader.TlvRecord.ValueAsInt32(); result = true; break; case ResourceID.NotificationStoringWhenOffline: this.NotificationStoringWhenOffline = reader.TlvRecord.ValueAsBoolean(); result = true; break; case ResourceID.Binding: TBindingMode binding = TBindingMode.NotSet; string bindingText = reader.TlvRecord.ValueAsString(); switch (bindingText) { case "U": binding = TBindingMode.UDP; break; case "UQ": binding = TBindingMode.QueuedUDP; break; case "S": binding = TBindingMode.SMS; break; case "SQ": binding = TBindingMode.QueuedSMS; break; case "US": binding = TBindingMode.UDPSMS; break; case "UQS": binding = TBindingMode.QueuedUDPSMS; break; default: break; } this.Binding = binding; result = true; break; default: break; } } } return(result); }
/// <summary> /// Parse KSI service response. /// </summary> /// <param name="data">Response byte array</param> /// <param name="requestId">Request ID</param> /// <returns></returns> public PduPayload Parse(byte[] data, ulong?requestId = null) { if (data == null) { throw new ArgumentNullException(nameof(data)); } RawTag rawTag = null; Pdu pdu = null; LegacyPdu legacyPdu = null; try { using (TlvReader reader = new TlvReader(new MemoryStream(data))) { rawTag = new RawTag(reader.ReadTag()); } if (rawTag.Type == GetPduTagType(false)) { if (_pduVersion == PduVersion.v1) { throw new KsiServiceUnexpectedResponseFormatException("Received PDU v2 response to PDU v1 request. Configure the SDK to use PDU v2 format."); } pdu = GetPdu(rawTag); } else if (rawTag.Type == GetPduTagType(true)) { if (_pduVersion == PduVersion.v2) { if (!IsLegacyRequestSupported()) { throw new KsiServiceUnexpectedResponseFormatException("Received PDU v1 response to PDU v2 request."); } throw new KsiServiceUnexpectedResponseFormatException("Received PDU v1 response to PDU v2 request. Configure the SDK to use PDU v1 format."); } legacyPdu = GetLegacyPdu(rawTag); } else { throw new KsiServiceException("Unknown response PDU tag type: " + rawTag.Type.ToString("X")); } if (legacyPdu != null) { return(GetLegacyResponsePayload(legacyPdu, requestId)); } else { CheckAggregatorConfigChange(pdu); CheckExtenderConfigChange(pdu); return(GetResponsePayload(data, pdu, requestId)); } } catch (TlvException e) { KsiException ksiException = new KsiServiceException("Could not parse response message: " + Base16.Encode(data), e); if (requestId.HasValue) { Logger.Warn("Request failed (request id: {0}): {1}", requestId, ksiException); } else { Logger.Warn("Request failed: {0}", ksiException); } throw ksiException; } catch (KsiException e) { if (requestId.HasValue) { Logger.Warn("Request failed (request id: {0}){1}{2}{1}PDU:{1}{3}", requestId, Environment.NewLine, e, legacyPdu ?? pdu ?? (ITlvTag)rawTag); } else { Logger.Warn("Request failed.{0}{1}{0}PDU:{0}{2}", Environment.NewLine, e, legacyPdu ?? pdu ?? (ITlvTag)rawTag); } throw; } }