// Register calls google.com/cloudprint/register to register a GCP printer. // // Sets the GCPID field in the printer arg. func (gcp *GoogleCloudPrint) Register(printer *lib.Printer) error { capabilities, err := marshalCapabilities(printer.Description) if err != nil { return err } semanticState, err := json.Marshal(cdd.CloudDeviceState{Printer: printer.State}) if err != nil { return err } form := url.Values{} form.Set("name", printer.Name) form.Set("default_display_name", printer.DefaultDisplayName) form.Set("proxy", gcp.proxyName) form.Set("uuid", printer.UUID) form.Set("manufacturer", printer.Manufacturer) form.Set("model", printer.Model) form.Set("gcp_version", printer.GCPVersion) form.Set("setup_url", lib.ConnectorHomeURL) form.Set("support_url", lib.ConnectorHomeURL) form.Set("update_url", lib.ConnectorHomeURL) form.Set("firmware", printer.ConnectorVersion) form.Set("semantic_state", string(semanticState)) form.Set("use_cdd", "true") form.Set("capabilities", capabilities) form.Set("capsHash", printer.CapsHash) sortedKeys := make([]string, 0, len(printer.Tags)) for key := range printer.Tags { sortedKeys = append(sortedKeys, key) } sort.Strings(sortedKeys) for _, key := range sortedKeys { form.Add("tag", fmt.Sprintf("%s%s=%s", gcpTagPrefix, key, printer.Tags[key])) } responseBody, _, _, err := postWithRetry(gcp.robotClient, gcp.baseURL+"register", form) if err != nil { return err } var registerData struct { Printers []struct { ID string } } if err = json.Unmarshal(responseBody, ®isterData); err != nil { return err } printer.GCPID = registerData.Printers[0].ID return nil }