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

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

(а то процесс вылетает)
parent 2cf1c098
......@@ -5,20 +5,12 @@ ln -s -f admin.sh start
ln -s -f admin.sh exist
ln -s -f admin.sh finish
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 logrotate
ln -s -f admin.sh omap
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 setState
ln -s -f admin.sh getValue
ln -s -f admin.sh getState
ln -s -f admin.sh getRawValue
ln -s -f admin.sh getCalibrate
ln -s -f admin.sh help
......
......@@ -3,7 +3,7 @@
Name: libuniset
Version: 0.99
Release: eter15
Release: eter18
Summary: UniSet - library for building distributed industrial control systems
License: GPL
Group: Development/C++
......@@ -184,6 +184,15 @@ rm -f %buildroot%_libdir/*.la
%exclude %_pkgconfigdir/libUniSet.pc
%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
- new build
......
......@@ -323,7 +323,7 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc,
}
return erTimeOut;
}
// --------------------------------------------------------------------------------
......@@ -540,7 +540,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erBadCheckSum;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnReadInputStatus )
{
......@@ -650,7 +650,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erBadCheckSum;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnReadOutputRegisters )
{
......@@ -704,7 +704,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erBadCheckSum;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnForceMultipleCoils )
{
......@@ -730,7 +730,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
dlog[Debug::WARN] << err.str() << endl;
return erBadCheckSum;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnWriteOutputRegisters )
{
......@@ -837,7 +837,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erBadDataValue; // return erInvalidFormat;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnFileTransfer )
{
......@@ -911,7 +911,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erBadCheckSum;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnRemoteService )
{
......@@ -962,7 +962,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erBadCheckSum;
}
return erNoError;
return erNoError;
}
#endif // not standart commands
......@@ -973,6 +973,11 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erUnExpectedPacketType;
}
}
catch( mbException& ex )
{
dlog[Debug::CRIT] << "(recv): " << ex << endl;
return ex.err;
}
catch( UniSetTypes::TimeOut )
{
// cout << "(recv): catch TimeOut " << endl;
......@@ -1006,6 +1011,11 @@ mbErrCode ModbusClient::send( ModbusMessage& msg )
{
sendData((unsigned char*)(&msg),len);
}
catch( mbException& ex )
{
dlog[Debug::CRIT] << "(send): " << ex << endl;
return ex.err;
}
catch( Exception& ex ) // SystemError
{
dlog[Debug::CRIT] << "(send): " << ex << endl;
......
......@@ -643,6 +643,8 @@ void ReadInputStatusMessage::init( ModbusMessage& m )
// переворачиваем слова
start = SWAPSHORT(start);
count = SWAPSHORT(count);
if( count > MAXDATALEN )
throw mbException(erPacketTooLong);
}
// -------------------------------------------------------------------------
......@@ -845,6 +847,8 @@ void ReadOutputMessage::init( ModbusMessage& m )
// переворачиваем слова
start = SWAPSHORT(start);
count = SWAPSHORT(count);
if( count > MAXDATALEN )
throw mbException(erPacketTooLong);
}
// -------------------------------------------------------------------------
......@@ -1063,6 +1067,8 @@ void ReadInputMessage::init( ModbusMessage& m )
// переворачиваем слова
start = SWAPSHORT(start);
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