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  }