diff --git a/CHANGELOG.md b/CHANGELOG.md index 6bead71..ba253c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 0.3.13 + +* Modbus TCP: the protocol identifier other than Modbus (0x00, 0x00) has been relaxed and logged. + ## 0.3.12 * Improve bitstring logging. diff --git a/lib/tcp/tcp.ex b/lib/tcp/tcp.ex index 7a2eab9..47af26d 100644 --- a/lib/tcp/tcp.ex +++ b/lib/tcp/tcp.ex @@ -52,15 +52,17 @@ defmodule Modbux.Tcp do end @spec unwrap(<<_::48, _::_*8>>, char) :: nil | binary - def unwrap(<> = msg, transid) do + def unwrap(<> = msg, transid) do r_size = :erlang.byte_size(payload) + check_protocol_identifier(protocol_id_h, protocol_id_l) + data = if size == r_size do payload else Logger.error( - "#{__MODULE__} size = #{size}, payload_size = #{r_size}, msg = #{inspect(msg, base: :hex)}" + "(#{__MODULE__}) size = #{size}, payload_size = #{r_size}, msg = #{inspect(msg, base: :hex)}" ) nil @@ -70,13 +72,19 @@ defmodule Modbux.Tcp do end @spec unwrap(<<_::48, _::_*8>>) :: {binary(), char()} - def unwrap(<>) do + def unwrap(<>) do ^size = :erlang.byte_size(payload) + check_protocol_identifier(protocol_id_h, protocol_id_l) {payload, transid} end def unwrap(inv_data) do - Logger.error("#{__MODULE__} invalid data: #{inspect(inv_data, base: :hex)}") - raise("#{__MODULE__} invalid data: #{inspect(inv_data)}") + Logger.error("(#{__MODULE__}) invalid data: #{inspect(inv_data, base: :hex)}") + raise("(#{__MODULE__}) invalid data: #{inspect(inv_data)}") end + + # Protocol identifier -> MODBUS protocol = 0x00, 0x00 + defp check_protocol_identifier(0, 0), do: :ok + defp check_protocol_identifier(protocol_id_h, protocol_id_l), + do: Logger.warning("(#{__MODULE__}) Protocol Identifier: #{inspect(<>, base: :hex)}") end diff --git a/mix.exs b/mix.exs index 80831ec..840c14b 100644 --- a/mix.exs +++ b/mix.exs @@ -1,7 +1,7 @@ defmodule Modbux.Mixfile do use Mix.Project - @version "0.3.12" + @version "0.3.13" @source_url "https://github.com/valiot/modbux"