Commit 6cf2b087 authored by Pavel Vaynerman's avatar Pavel Vaynerman

ModbusSlave: внёс проверку на длину пакета и обработку исключений

(а то процесс вылетает)
parent 2cf1c098
...@@ -5,20 +5,12 @@ ln -s -f admin.sh start ...@@ -5,20 +5,12 @@ ln -s -f admin.sh start
ln -s -f admin.sh exist ln -s -f admin.sh exist
ln -s -f admin.sh finish ln -s -f admin.sh finish
ln -s -f admin.sh foldUp ln -s -f admin.sh foldUp
ln -s -f admin.sh info
ln -s -f admin.sh alarm
ln -s -f admin.sh create ln -s -f admin.sh create
ln -s -f admin.sh logrotate ln -s -f admin.sh logrotate
ln -s -f admin.sh omap ln -s -f admin.sh omap
ln -s -f admin.sh msgmap ln -s -f admin.sh msgmap
ln -s -f admin.sh anotify
ln -s -f admin.sh dnotify
ln -s -f admin.sh saveValue
ln -s -f admin.sh saveState
ln -s -f admin.sh setValue ln -s -f admin.sh setValue
ln -s -f admin.sh setState
ln -s -f admin.sh getValue ln -s -f admin.sh getValue
ln -s -f admin.sh getState
ln -s -f admin.sh getRawValue ln -s -f admin.sh getRawValue
ln -s -f admin.sh getCalibrate ln -s -f admin.sh getCalibrate
ln -s -f admin.sh help ln -s -f admin.sh help
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
Name: libuniset Name: libuniset
Version: 0.99 Version: 0.99
Release: eter15 Release: eter18
Summary: UniSet - library for building distributed industrial control systems Summary: UniSet - library for building distributed industrial control systems
License: GPL License: GPL
Group: Development/C++ Group: Development/C++
...@@ -184,6 +184,15 @@ rm -f %buildroot%_libdir/*.la ...@@ -184,6 +184,15 @@ rm -f %buildroot%_libdir/*.la
%exclude %_pkgconfigdir/libUniSet.pc %exclude %_pkgconfigdir/libUniSet.pc
%changelog %changelog
* Tue Nov 16 2010 Pavel Vainerman <pv@etersoft.ru> 0.99-eter17
- fixed bug in MBSlave
* Mon Nov 15 2010 Pavel Vainerman <pv@etersoft.ru> 0.99-eter16
- Modbus: add test for query count
* Mon Nov 15 2010 Pavel Vainerman <pv@etersoft.ru> 0.99-eter15
- new build
* Fri Nov 12 2010 Pavel Vainerman <pv@etersoft.ru> 0.99-eter14 * Fri Nov 12 2010 Pavel Vainerman <pv@etersoft.ru> 0.99-eter14
- new build - new build
......
...@@ -973,6 +973,11 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -973,6 +973,11 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erUnExpectedPacketType; return erUnExpectedPacketType;
} }
} }
catch( mbException& ex )
{
dlog[Debug::CRIT] << "(recv): " << ex << endl;
return ex.err;
}
catch( UniSetTypes::TimeOut ) catch( UniSetTypes::TimeOut )
{ {
// cout << "(recv): catch TimeOut " << endl; // cout << "(recv): catch TimeOut " << endl;
...@@ -1006,6 +1011,11 @@ mbErrCode ModbusClient::send( ModbusMessage& msg ) ...@@ -1006,6 +1011,11 @@ mbErrCode ModbusClient::send( ModbusMessage& msg )
{ {
sendData((unsigned char*)(&msg),len); sendData((unsigned char*)(&msg),len);
} }
catch( mbException& ex )
{
dlog[Debug::CRIT] << "(send): " << ex << endl;
return ex.err;
}
catch( Exception& ex ) // SystemError catch( Exception& ex ) // SystemError
{ {
dlog[Debug::CRIT] << "(send): " << ex << endl; dlog[Debug::CRIT] << "(send): " << ex << endl;
......
...@@ -643,6 +643,8 @@ void ReadInputStatusMessage::init( ModbusMessage& m ) ...@@ -643,6 +643,8 @@ void ReadInputStatusMessage::init( ModbusMessage& m )
// переворачиваем слова // переворачиваем слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
count = SWAPSHORT(count); count = SWAPSHORT(count);
if( count > MAXDATALEN )
throw mbException(erPacketTooLong);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -845,6 +847,8 @@ void ReadOutputMessage::init( ModbusMessage& m ) ...@@ -845,6 +847,8 @@ void ReadOutputMessage::init( ModbusMessage& m )
// переворачиваем слова // переворачиваем слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
count = SWAPSHORT(count); count = SWAPSHORT(count);
if( count > MAXDATALEN )
throw mbException(erPacketTooLong);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -1063,6 +1067,8 @@ void ReadInputMessage::init( ModbusMessage& m ) ...@@ -1063,6 +1067,8 @@ void ReadInputMessage::init( ModbusMessage& m )
// переворачиваем слова // переворачиваем слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
count = SWAPSHORT(count); count = SWAPSHORT(count);
if( count > MAXDATALEN )
throw mbException(erPacketTooLong);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment