1# Copyright (c) 2017, The MITRE Corporation. All rights reserved.
2# See LICENSE.txt for complete terms.
3
4from mixbox import entities
5from mixbox import fields
6
7import cybox.bindings.disk_object as disk_binding
8from cybox.objects.disk_partition_object import DiskPartition
9from cybox.common import BaseProperty, ObjectProperties, String, UnsignedLong
10
11
12class PartitionList(entities.EntityList):
13    _binding = disk_binding
14    _binding_class = disk_binding.PartitionListType
15    _namespace = "http://cybox.mitre.org/objects#DiskObject-2"
16
17    partition = fields.TypedField("Partition", DiskPartition, multiple=True)
18
19
20class DiskType(BaseProperty):
21    _binding = disk_binding
22    _binding_class = disk_binding.DiskType
23    _namespace = "http://cybox.mitre.org/objects#DiskObject-2"
24
25    TERM_REMOVABLE = "Removable"
26    TERM_FIXED = "Fixed"
27    TERM_REMOTE = "Remote"
28    TERM_CDROM = "CDRom"
29    TERM_RAMDISK = "RAMDisk"
30
31
32class Disk(ObjectProperties):
33    _binding = disk_binding
34    _binding_class = disk_binding.DiskObjectType
35    _namespace = "http://cybox.mitre.org/objects#DiskObject-2"
36    _XSI_NS = "DiskObj"
37    _XSI_TYPE = "DiskObjectType"
38
39    disk_name = fields.TypedField('Disk_Name', String)
40    disk_size = fields.TypedField('Disk_Size', UnsignedLong)
41    free_space = fields.TypedField('Free_Space', UnsignedLong)
42    partition_list = fields.TypedField('Partition_List', PartitionList)
43    type_ = fields.TypedField('Type', DiskType)
44