Fix consistency checks in ConfdFilterCallback
[ganeti-local] / lib / confd / __init__.py
index ecf3f24..895884c 100644 (file)
 # 02110-1301, USA.
 
 
-"""Ganeti confd library
+"""Ganeti confd client/server library
 
 """
 
+from ganeti import constants
+from ganeti import errors
+
+
+_FOURCC_LEN = 4
+
+
+def PackMagic(payload):
+  """Prepend the confd magic fourcc to a payload.
+
+  """
+  return ''.join([constants.CONFD_MAGIC_FOURCC, payload])
+
+
+def UnpackMagic(payload):
+  """Unpack and check the confd magic fourcc from a payload.
+
+  """
+  if len(payload) < _FOURCC_LEN:
+    raise errors.ConfdMagicError("UDP payload too short to contain the"
+                                 " fourcc code")
+
+  magic_number = payload[:_FOURCC_LEN]
+  if magic_number != constants.CONFD_MAGIC_FOURCC:
+    raise errors.ConfdMagicError("UDP payload contains an unkown fourcc")
+
+  return payload[_FOURCC_LEN:]
+