| 331 | |
| 332 | |
| 333 | def nodeid_from_binary(data): |
| 334 | nid = ua.NodeId() |
| 335 | encoding = ord(data.read(1)) |
| 336 | nid.NodeIdType = ua.NodeIdType(encoding & 0b00111111) |
| 337 | |
| 338 | if nid.NodeIdType == ua.NodeIdType.TwoByte: |
| 339 | nid.Identifier = ord(data.read(1)) |
| 340 | elif nid.NodeIdType == ua.NodeIdType.FourByte: |
| 341 | nid.NamespaceIndex, nid.Identifier = struct.unpack("<BH", data.read(3)) |
| 342 | elif nid.NodeIdType == ua.NodeIdType.Numeric: |
| 343 | nid.NamespaceIndex, nid.Identifier = struct.unpack("<HI", data.read(6)) |
| 344 | elif nid.NodeIdType == ua.NodeIdType.String: |
| 345 | nid.NamespaceIndex = Primitives.UInt16.unpack(data) |
| 346 | nid.Identifier = Primitives.String.unpack(data) |
| 347 | elif nid.NodeIdType == ua.NodeIdType.ByteString: |
| 348 | nid.NamespaceIndex = Primitives.UInt16.unpack(data) |
| 349 | nid.Identifier = Primitives.Bytes.unpack(data) |
| 350 | elif nid.NodeIdType == ua.NodeIdType.Guid: |
| 351 | nid.NamespaceIndex = Primitives.UInt16.unpack(data) |
| 352 | nid.Identifier = Primitives.Guid.unpack(data) |
| 353 | else: |
| 354 | raise UaError("Unknown NodeId encoding: " + str(nid.NodeIdType)) |
| 355 | |
| 356 | if test_bit(encoding, 7): |
| 357 | nid.NamespaceUri = Primitives.String.unpack(data) |
| 358 | if test_bit(encoding, 6): |
| 359 | nid.ServerIndex = Primitives.UInt32.unpack(data) |
| 360 | |
| 361 | return nid |
| 362 | |
| 363 | |
| 364 | def variant_to_binary(var): |