github.com/vmware/go-vcloud-director/v2@v2.24.0/internal/udf/cdrom.go (about) 1 package udf 2 3 import ( 4 "fmt" 5 "golang.org/x/exp/slices" 6 ) 7 8 const ( 9 cdromVolumeDescriptorSectorNumber = 16 10 11 cdromVolumeIdentifierBEA01 = "BEA01" 12 cdromVolumeIdentifierBOOT2 = "BOOT2" 13 cdromVolumeIdentifierCD001 = "CD001" 14 cdromVolumeIdentifierCDW02 = "CDW02" 15 cdromVolumeIdentifierNSR02 = "NSR02" 16 cdromVolumeIdentifierNSR03 = "NSR03" 17 cdromVolumeIdentifierTEA01 = "TEA01" 18 ) 19 20 type CdromDescriptor interface { 21 GetHeader() *CdromVolumeDescriptorHeader 22 } 23 24 type CdromDescriptorList []CdromDescriptor 25 26 func (list CdromDescriptorList) hasAnyIdentifier(identifiers ...string) bool { 27 for idx := 0; idx < len(list); idx++ { 28 identifier := list[idx].GetHeader().Identifier 29 if slices.Contains(identifiers, identifier) { 30 return true 31 } 32 } 33 return false 34 } 35 36 func (list CdromDescriptorList) getByType(descType uint8) CdromDescriptor { 37 if desc := list.findByType(descType); desc != nil { 38 return desc 39 } else { 40 panic(fmt.Sprintf("CDROM descriptor with type %d does not exist in sequence", descType)) 41 } 42 } 43 44 func (list CdromDescriptorList) findByType(descType uint8) CdromDescriptor { 45 for idx := 0; idx < len(list); idx++ { 46 if list[idx].GetHeader().Type == descType { 47 return list[idx] 48 } 49 } 50 return nil 51 } 52 53 func (list CdromDescriptorList) getByIdentifier(identifier string) CdromDescriptor { 54 if desc := list.findByIdentifier(identifier); desc != nil { 55 return desc 56 } else { 57 panic(fmt.Sprintf("CDROM descriptor with identifier %s does not exist in sequence", identifier)) 58 } 59 } 60 61 func (list CdromDescriptorList) findByIdentifier(identifier string) CdromDescriptor { 62 for idx := 0; idx < len(list); idx++ { 63 if list[idx].GetHeader().Identifier == identifier { 64 return list[idx] 65 } 66 } 67 return nil 68 } 69 70 type CdromVolumeDescriptorHeader struct { 71 Type uint8 72 Identifier string 73 Version uint8 74 } 75 76 type CdromExtendedAreaVolumeDescriptor struct { 77 Header CdromVolumeDescriptorHeader 78 } 79 80 func (d *CdromExtendedAreaVolumeDescriptor) GetHeader() *CdromVolumeDescriptorHeader { 81 return &d.Header 82 } 83 84 type CdromBootVolumeDescriptor struct { 85 Header CdromVolumeDescriptorHeader 86 } 87 88 func (d *CdromBootVolumeDescriptor) GetHeader() *CdromVolumeDescriptorHeader { 89 return &d.Header 90 } 91 92 type CdromCdwVolumeDescriptor struct { 93 Header CdromVolumeDescriptorHeader 94 } 95 96 func (d *CdromCdwVolumeDescriptor) GetHeader() *CdromVolumeDescriptorHeader { 97 return &d.Header 98 } 99 100 type CdromNsrVolumeDescriptor struct { 101 Header CdromVolumeDescriptorHeader 102 } 103 104 func (d *CdromNsrVolumeDescriptor) GetHeader() *CdromVolumeDescriptorHeader { 105 return &d.Header 106 } 107 108 type CdromTerminalVolumeDescriptor struct { 109 Header CdromVolumeDescriptorHeader 110 } 111 112 func (d *CdromTerminalVolumeDescriptor) GetHeader() *CdromVolumeDescriptorHeader { 113 return &d.Header 114 }