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
......
...@@ -323,7 +323,7 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc, ...@@ -323,7 +323,7 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc,
} }
return erTimeOut; return erTimeOut;
} }
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
...@@ -540,7 +540,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -540,7 +540,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erBadCheckSum; return erBadCheckSum;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnReadInputStatus ) else if( rbuf.func == fnReadInputStatus )
{ {
...@@ -650,7 +650,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -650,7 +650,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erBadCheckSum; return erBadCheckSum;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnReadOutputRegisters ) else if( rbuf.func == fnReadOutputRegisters )
{ {
...@@ -704,7 +704,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -704,7 +704,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erBadCheckSum; return erBadCheckSum;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnForceMultipleCoils ) else if( rbuf.func == fnForceMultipleCoils )
{ {
...@@ -730,7 +730,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -730,7 +730,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
dlog[Debug::WARN] << err.str() << endl; dlog[Debug::WARN] << err.str() << endl;
return erBadCheckSum; return erBadCheckSum;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnWriteOutputRegisters ) else if( rbuf.func == fnWriteOutputRegisters )
{ {
...@@ -837,7 +837,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -837,7 +837,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erBadDataValue; // return erInvalidFormat; return erBadDataValue; // return erInvalidFormat;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnFileTransfer ) else if( rbuf.func == fnFileTransfer )
{ {
...@@ -911,7 +911,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -911,7 +911,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erBadCheckSum; return erBadCheckSum;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnRemoteService ) else if( rbuf.func == fnRemoteService )
{ {
...@@ -962,7 +962,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -962,7 +962,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erBadCheckSum; return erBadCheckSum;
} }
return erNoError; return erNoError;
} }
#endif // not standart commands #endif // not standart commands
...@@ -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