diff --git a/Stack/Opc.Ua.Core/Stack/Tcp/TcpMessageSocket.cs b/Stack/Opc.Ua.Core/Stack/Tcp/TcpMessageSocket.cs index eff2cd5f55..613141c47a 100644 --- a/Stack/Opc.Ua.Core/Stack/Tcp/TcpMessageSocket.cs +++ b/Stack/Opc.Ua.Core/Stack/Tcp/TcpMessageSocket.cs @@ -540,8 +540,12 @@ namespace Opc.Ua.Bindings BufferManager.UnlockBuffer(m_receiveBuffer); } + Utils.TraceDebug("Bytes read: {0}", bytesRead); + if (bytesRead == 0) { + // Remote end has closed the connection + // free the empty receive buffer. if (m_receiveBuffer != null) { @@ -549,11 +553,9 @@ namespace Opc.Ua.Bindings m_receiveBuffer = null; } - return ServiceResult.Good; + return ServiceResult.Create(StatusCodes.BadConnectionClosed, "Remote side closed connection"); } - // Utils.Trace("Bytes read: {0}", bytesRead); - m_bytesReceived += bytesRead; // check if more data left to read. diff --git a/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryChannel.cs b/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryChannel.cs index 0c4d9627de..8d3f2bb673 100644 --- a/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryChannel.cs +++ b/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryChannel.cs @@ -229,7 +229,7 @@ namespace Opc.Ua.Bindings } } - Utils.Trace("{0}: Channel {1} - Duplicate sequence number: {2} <= {3}", context, this.ChannelId, sequenceNumber, m_remoteSequenceNumber); + Utils.Trace((int)Utils.TraceMasks.Error, "{0}: Channel {1} - Duplicate sequence number: {2} <= {3}", context, this.ChannelId, sequenceNumber, m_remoteSequenceNumber); return false; } @@ -284,7 +284,7 @@ namespace Opc.Ua.Bindings { uint messageType = BitConverter.ToUInt32(message.Array, message.Offset); - //Utils.Trace("{1} Message Received: {0} bytes", message.Count, messageType); + Utils.TraceDebug("{1} Message Received: {0} bytes", message.Count, messageType); if (!HandleIncomingMessage(messageType, message)) { @@ -364,6 +364,8 @@ namespace Opc.Ua.Bindings try { + Utils.TraceDebug("Bytes written: {0}", e.BytesTransferred); + if (e.BytesTransferred == 0) { error = ServiceResult.Create(StatusCodes.BadConnectionClosed, "The socket was closed by the remote application."); @@ -509,8 +511,6 @@ namespace Opc.Ua.Bindings reason = new UTF8Encoding().GetString(reasonBytes, 0, reasonLength); } - // Utils.Trace("Channel {0}: Read = {1}", ChannelId, reason); - return ServiceResult.Create(statusCode, "Error received from remote host: {0}", reason); } @@ -555,7 +555,7 @@ namespace Opc.Ua.Bindings buffer[offset++] = (byte)((messageType & 0x000000FF)); buffer[offset++] = (byte)((messageType & 0x0000FF00) >> 8); buffer[offset++] = (byte)((messageType & 0x00FF0000) >> 16); - buffer[offset++] = (byte)((messageType & 0xFF000000) >> 24); + buffer[offset ] = (byte)((messageType & 0xFF000000) >> 24); } /// @@ -573,7 +573,7 @@ namespace Opc.Ua.Bindings buffer[offset++] = (byte)((messageSize & 0x000000FF)); buffer[offset++] = (byte)((messageSize & 0x0000FF00) >> 8); buffer[offset++] = (byte)((messageSize & 0x00FF0000) >> 16); - buffer[offset++] = (byte)((messageSize & 0xFF000000) >> 24); + buffer[offset ] = (byte)((messageSize & 0xFF000000) >> 24); } #endregion diff --git a/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryClientChannel.cs b/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryClientChannel.cs index b6425a3e67..747c39574e 100644 --- a/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryClientChannel.cs +++ b/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryClientChannel.cs @@ -679,35 +679,35 @@ namespace Opc.Ua.Bindings // process a response. if (TcpMessageType.IsType(messageType, TcpMessageType.Message)) { - //Utils.Trace("Channel {0}: ProcessResponseMessage", ChannelId); + Utils.TraceDebug("Channel {0}: ProcessResponseMessage", ChannelId); return ProcessResponseMessage(messageType, messageChunk); } // check for acknowledge. else if (messageType == TcpMessageType.Acknowledge) { - //Utils.Trace("Channel {0}: ProcessAcknowledgeMessage", ChannelId); + Utils.TraceDebug("Channel {0}: ProcessAcknowledgeMessage", ChannelId); return ProcessAcknowledgeMessage(messageChunk); } // check for error. else if (messageType == TcpMessageType.Error) { - //Utils.Trace("Channel {0}: ProcessErrorMessage", ChannelId); + Utils.TraceDebug("Channel {0}: ProcessErrorMessage", ChannelId); return ProcessErrorMessage(messageType, messageChunk); } // process open secure channel repsonse. else if (TcpMessageType.IsType(messageType, TcpMessageType.Open)) { - //Utils.Trace("Channel {0}: ProcessOpenSecureChannelResponse", ChannelId); + Utils.TraceDebug("Channel {0}: ProcessOpenSecureChannelResponse", ChannelId); return ProcessOpenSecureChannelResponse(messageType, messageChunk); } // process a response to a close request. else if (TcpMessageType.IsType(messageType, TcpMessageType.Close)) { - //Utils.Trace("Channel {0}: ProcessResponseMessage (close)", ChannelId); + Utils.TraceDebug("Channel {0}: ProcessResponseMessage (close)", ChannelId); return ProcessResponseMessage(messageType, messageChunk); } @@ -1230,8 +1230,6 @@ namespace Opc.Ua.Bindings /// protected bool ProcessErrorMessage(uint messageType, ArraySegment messageChunk) { - Utils.Trace("Channel {0}: ProcessErrorMessage()", ChannelId); - // read request buffer sizes. MemoryStream istrm = new MemoryStream(messageChunk.Array, messageChunk.Offset, messageChunk.Count, false); BinaryDecoder decoder = new BinaryDecoder(istrm, Quotas.MessageContext); @@ -1242,6 +1240,8 @@ namespace Opc.Ua.Bindings { ServiceResult error = ReadErrorMessageBody(decoder); + Utils.Trace((int)Utils.TraceMasks.Error, "Channel {0}: ProcessErrorMessage({1})", ChannelId, error); + // check if a handshake is in progress if (m_handshakeOperation != null) { diff --git a/Stack/Opc.Ua.Core/Types/Utils/Utils.cs b/Stack/Opc.Ua.Core/Types/Utils/Utils.cs index 9bb897a716..3826e5a38e 100644 --- a/Stack/Opc.Ua.Core/Types/Utils/Utils.cs +++ b/Stack/Opc.Ua.Core/Types/Utils/Utils.cs @@ -342,7 +342,15 @@ namespace Opc.Ua { Trace((int)TraceMasks.Information, format, args); } - + + /// + /// Writes an informational message to the trace log. + /// + public static void TraceDebug(string format, params object[] args) + { + Trace((int)TraceMasks.OperationDetail, format, args); + } + /// /// Writes an informational message to the trace log. /// @@ -431,9 +439,9 @@ namespace Opc.Ua TraceWriteLine(message.ToString(), null); } - #endregion +#endregion - #region File Access +#region File Access /// /// Replaces a prefix enclosed in '%' with a special folder or environment variable path (e.g. %ProgramFiles%\MyCompany). ///