feat: generate code for openhome
This commit is contained in:
		@@ -78,7 +78,7 @@ func (dcp *DCP) processDeviceFile(file *zip.File) error {
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
	device.VisitServices(func(s *goupnp.Service) {
 | 
			
		||||
		u, err := extractURNParts(s.ServiceType, serviceURNPrefix)
 | 
			
		||||
		u, err := extractURNParts(s.ServiceType, dcp.Metadata.ServiceURNPrefix)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			mainErr = err
 | 
			
		||||
		}
 | 
			
		||||
@@ -133,7 +133,7 @@ func (dcp *DCP) processSCPDFile(file *zip.File) error {
 | 
			
		||||
		return fmt.Errorf("error decoding SCPD XML from file %q: %v", file.Name, err)
 | 
			
		||||
	}
 | 
			
		||||
	scpd.Clean()
 | 
			
		||||
	urnParts, err := urnPartsFromSCPDFilename(file.Name)
 | 
			
		||||
	urnParts, err := urnPartsFromSCPDFilename(file.Name, dcp.Metadata.ServiceURNPrefix)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("could not recognize SCPD filename %q: %v", file.Name, err)
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -80,14 +80,14 @@ func unmarshalXmlFile(file *zip.File, data interface{}) error {
 | 
			
		||||
var scpdFilenameRe = regexp.MustCompile(
 | 
			
		||||
	`.*/([a-zA-Z0-9]+)([0-9]+)\.xml`)
 | 
			
		||||
 | 
			
		||||
func urnPartsFromSCPDFilename(filename string) (*URNParts, error) {
 | 
			
		||||
func urnPartsFromSCPDFilename(filename string, svcURNPrefix string) (*URNParts, error) {
 | 
			
		||||
	parts := scpdFilenameRe.FindStringSubmatch(filename)
 | 
			
		||||
	if len(parts) != 3 {
 | 
			
		||||
		return nil, fmt.Errorf("SCPD filename %q does not have expected number of parts", filename)
 | 
			
		||||
	}
 | 
			
		||||
	name, version := parts[1], parts[2]
 | 
			
		||||
	return &URNParts{
 | 
			
		||||
		URN:     serviceURNPrefix + name + ":" + version,
 | 
			
		||||
		URN:     svcURNPrefix + name + ":" + version,
 | 
			
		||||
		Name:    name,
 | 
			
		||||
		Version: version,
 | 
			
		||||
	}, nil
 | 
			
		||||
 
 | 
			
		||||
@@ -6,15 +6,54 @@ import (
 | 
			
		||||
 | 
			
		||||
// DCP contains extra metadata to use when generating DCP source files.
 | 
			
		||||
type DCPMetadata struct {
 | 
			
		||||
	Name         string // What to name the Go DCP package.
 | 
			
		||||
	OfficialName string // Official name for the DCP.
 | 
			
		||||
	Src          dcpProvider
 | 
			
		||||
	Name             string // What to name the Go DCP package.
 | 
			
		||||
	OfficialName     string // Official name for the DCP.
 | 
			
		||||
	Src              dcpProvider
 | 
			
		||||
	ServiceURNPrefix string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var dcpMetadata = []DCPMetadata{
 | 
			
		||||
	{
 | 
			
		||||
		Name:         "internetgateway1",
 | 
			
		||||
		OfficialName: "Internet Gateway Device v1",
 | 
			
		||||
		Name:             "openhome",
 | 
			
		||||
		OfficialName:     "OpenHome",
 | 
			
		||||
		ServiceURNPrefix: "urn:av-openhome-org:service:",
 | 
			
		||||
		Src: upnpdotorg{
 | 
			
		||||
			DocURL:     "http://wiki.openhome.org/wiki/Av:Developer",
 | 
			
		||||
			XMLSpecURL: "https://github.com/openhome/ohNetGenerated/archive/refs/heads/master.zip",
 | 
			
		||||
			Hacks: []DCPHackFn{
 | 
			
		||||
 | 
			
		||||
				fixMissingURN(
 | 
			
		||||
					"urn:av-openhome-org:service:Credentials:1",
 | 
			
		||||
					"urn:av-openhome-org:service:Debug:1",
 | 
			
		||||
					"urn:av-openhome-org:service:Exakt:1",
 | 
			
		||||
					"urn:av-openhome-org:service:Exakt:2",
 | 
			
		||||
					"urn:av-openhome-org:service:Exakt:3",
 | 
			
		||||
					"urn:av-openhome-org:service:Info:1",
 | 
			
		||||
					"urn:av-openhome-org:service:MediaServer:1",
 | 
			
		||||
					"urn:av-openhome-org:service:NetworkMonitor:1",
 | 
			
		||||
					"urn:av-openhome-org:service:Pins:1",
 | 
			
		||||
					"urn:av-openhome-org:service:Playlist:1",
 | 
			
		||||
					"urn:av-openhome-org:service:PlaylistManager:1",
 | 
			
		||||
					"urn:av-openhome-org:service:Product:1",
 | 
			
		||||
					"urn:av-openhome-org:service:Product:2",
 | 
			
		||||
					"urn:av-openhome-org:service:Radio:1",
 | 
			
		||||
					"urn:av-openhome-org:service:Receiver:1",
 | 
			
		||||
					"urn:av-openhome-org:service:Sender:1",
 | 
			
		||||
					"urn:av-openhome-org:service:Sender:2",
 | 
			
		||||
					"urn:av-openhome-org:service:SubscriptionLongPoll:1",
 | 
			
		||||
					"urn:av-openhome-org:service:Time:1",
 | 
			
		||||
					"urn:av-openhome-org:service:Transport:1",
 | 
			
		||||
					"urn:av-openhome-org:service:Volume:1",
 | 
			
		||||
					"urn:av-openhome-org:service:Volume:2",
 | 
			
		||||
					"urn:av-openhome-org:service:Volume:3",
 | 
			
		||||
				),
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		Name:             "internetgateway1",
 | 
			
		||||
		OfficialName:     "Internet Gateway Device v1",
 | 
			
		||||
		ServiceURNPrefix: serviceURNPrefix,
 | 
			
		||||
		Src: upnpdotorg{
 | 
			
		||||
			DocURL:     "http://upnp.org/specs/gw/UPnP-gw-InternetGatewayDevice-v1-Device.pdf",
 | 
			
		||||
			XMLSpecURL: "http://upnp.org/specs/gw/UPnP-gw-IGD-TestFiles-20010921.zip",
 | 
			
		||||
@@ -24,8 +63,9 @@ var dcpMetadata = []DCPMetadata{
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		Name:         "internetgateway2",
 | 
			
		||||
		OfficialName: "Internet Gateway Device v2",
 | 
			
		||||
		Name:             "internetgateway2",
 | 
			
		||||
		OfficialName:     "Internet Gateway Device v2",
 | 
			
		||||
		ServiceURNPrefix: serviceURNPrefix,
 | 
			
		||||
		Src: upnpdotorg{
 | 
			
		||||
			DocURL:     "http://upnp.org/specs/gw/UPnP-gw-InternetGatewayDevice-v2-Device.pdf",
 | 
			
		||||
			XMLSpecURL: "http://upnp.org/specs/gw/UPnP-gw-IGD-Testfiles-20110224.zip",
 | 
			
		||||
@@ -36,16 +76,18 @@ var dcpMetadata = []DCPMetadata{
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		Name:         "av1",
 | 
			
		||||
		OfficialName: "MediaServer v1 and MediaRenderer v1",
 | 
			
		||||
		Name:             "av1",
 | 
			
		||||
		OfficialName:     "MediaServer v1 and MediaRenderer v1",
 | 
			
		||||
		ServiceURNPrefix: serviceURNPrefix,
 | 
			
		||||
		Src: upnpdotorg{
 | 
			
		||||
			DocURL:     "http://upnp.org/specs/av/av1/",
 | 
			
		||||
			XMLSpecURL: "http://upnp.org/specs/av/UPnP-av-TestFiles-20070927.zip",
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		Name:         "ocf/internetgateway1",
 | 
			
		||||
		OfficialName: "Internet Gateway Device v1 - Open Connectivity Foundation",
 | 
			
		||||
		Name:             "ocf/internetgateway1",
 | 
			
		||||
		OfficialName:     "Internet Gateway Device v1 - Open Connectivity Foundation",
 | 
			
		||||
		ServiceURNPrefix: serviceURNPrefix,
 | 
			
		||||
		Src: openconnectivitydotorg{
 | 
			
		||||
			SpecsURL:       ocfSpecsURL,
 | 
			
		||||
			DocPath:        "*/DeviceProtection_1/UPnP-gw-*v1*.pdf",
 | 
			
		||||
@@ -60,8 +102,9 @@ var dcpMetadata = []DCPMetadata{
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		Name:         "ocf/internetgateway2",
 | 
			
		||||
		OfficialName: "Internet Gateway Device v2 - Open Connectivity Foundation",
 | 
			
		||||
		Name:             "ocf/internetgateway2",
 | 
			
		||||
		OfficialName:     "Internet Gateway Device v2 - Open Connectivity Foundation",
 | 
			
		||||
		ServiceURNPrefix: serviceURNPrefix,
 | 
			
		||||
		Src: openconnectivitydotorg{
 | 
			
		||||
			SpecsURL:       ocfSpecsURL,
 | 
			
		||||
			DocPath:        "*/Internet Gateway_2/UPnP-gw-*.pdf",
 | 
			
		||||
@@ -114,7 +157,7 @@ func fixMissingURN(missingURNs ...string) func(dcp *DCP) error {
 | 
			
		||||
			if _, ok := dcp.ServiceTypes[missingURN]; ok {
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			urnParts, err := extractURNParts(missingURN, serviceURNPrefix)
 | 
			
		||||
			urnParts, err := extractURNParts(missingURN, dcp.Metadata.ServiceURNPrefix)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user