raise ProtcolError when specifier is missing

- fixed this for 'read', 'change' and 'do' message
+ fix an error in frappy.client.SecopClient closing the connection
  when the identifier is None

fixes: #4672

Change-Id: Iaba0f9ed86b6eb6ef7588403ba640ded552dded6
This commit is contained in:
2023-01-30 15:06:33 +01:00
committed by Enrico Faulhaber
parent 878bb6f892
commit ada9e53a4d
2 changed files with 9 additions and 3 deletions

View File

@ -318,12 +318,12 @@ class SecopClient(ProxyClient):
ident = None ident = None
if action in UPDATE_MESSAGES: if action in UPDATE_MESSAGES:
module_param = self.internal.get(ident, None) module_param = self.internal.get(ident, None)
if module_param is None and ':' not in ident: if module_param is None and ':' not in (ident or ''):
# allow missing ':value'/':target' # allow missing ':value'/':target'
if action == WRITEREPLY: if action == WRITEREPLY:
module_param = self.internal.get(ident + ':target', None) module_param = self.internal.get('%s:target' % ident, None)
else: else:
module_param = self.internal.get(ident + ':value', None) module_param = self.internal.get('%s:value' % ident, None)
if module_param is not None: if module_param is not None:
if action.startswith(ERRORPREFIX): if action.startswith(ERRORPREFIX):
timestamp = data[2].get('t', None) timestamp = data[2].get('t', None)

View File

@ -318,6 +318,8 @@ class Dispatcher:
def handle_read(self, conn, specifier, data): def handle_read(self, conn, specifier, data):
if data: if data:
raise ProtocolError('read requests don\'t take data!') raise ProtocolError('read requests don\'t take data!')
if not specifier:
raise ProtocolError('read requests need a specifier!')
modulename, pname = specifier, 'value' modulename, pname = specifier, 'value'
if ':' in specifier: if ':' in specifier:
modulename, pname = specifier.split(':', 1) modulename, pname = specifier.split(':', 1)
@ -325,12 +327,16 @@ class Dispatcher:
return (READREPLY, specifier, list(self._getParameterValue(modulename, pname))) return (READREPLY, specifier, list(self._getParameterValue(modulename, pname)))
def handle_change(self, conn, specifier, data): def handle_change(self, conn, specifier, data):
if not specifier:
raise ProtocolError('change requests need a specifier!')
modulename, pname = specifier, 'target' modulename, pname = specifier, 'target'
if ':' in specifier: if ':' in specifier:
modulename, pname = specifier.split(':', 1) modulename, pname = specifier.split(':', 1)
return (WRITEREPLY, specifier, list(self._setParameterValue(modulename, pname, data))) return (WRITEREPLY, specifier, list(self._setParameterValue(modulename, pname, data)))
def handle_do(self, conn, specifier, data): def handle_do(self, conn, specifier, data):
if not specifier:
raise ProtocolError('do requests need a specifier!')
modulename, cmd = specifier.split(':', 1) modulename, cmd = specifier.split(':', 1)
return (COMMANDREPLY, specifier, list(self._execute_command(modulename, cmd, data))) return (COMMANDREPLY, specifier, list(self._execute_command(modulename, cmd, data)))