package main import ( "bytes" "ippserver/packages/ipp" "net/http" log "github.com/sirupsen/logrus" ) func handleGetJobs(r *ipp.Request, requestID uint32) (*ipp.Response, error) { request := ipp.NewRequest(ipp.GetJobs, requestID) request.AddOperatonAttribute(ipp.NewCharSetValue("attributes-charset", "utf-8")) request.AddOperatonAttribute(ipp.NewNaturalLanguage("attributes-natural-language", "en")) request.AddOperatonAttribute(ipp.NewURIValue("printer-uri", "ipp://"+printerURI)) request.AddOperatonAttribute(r.GetAttribute("requesting-user-name")) request.AddOperatonAttribute(r.GetAttribute("requested-attributes")) log.Infof("Downstream request\n%v\n", request) downStreamRequest := request.Marshal() b := bytes.NewBuffer(downStreamRequest) downStreamResponse, err := http.Post("http://"+"brn30055cb5e3ae.local:631/ipp/print", "application/ipp", b) if err != nil { return nil, err } //log.Printf("response HTTP status: %v %v", downStreamResponse.StatusCode, downStreamResponse.Status) rb := ipp.NewResponse(0, 0) rb.UnMarshal(downStreamResponse.Body) log.Infof("Downstream response\n%v\n", rb) response := ipp.NewResponse(ipp.SuccessfulOk, r.RequestID()) response.AddOperatonAttribute(ipp.NewCharSetValue("attributes-charset", "utf-8")) response.AddOperatonAttribute(ipp.NewNaturalLanguage("attributes-natural-language", "en")) a := rb.GetAttribute("job-id") response.AddJobAttribute(a) response.AddJobAttribute(rb.GetAttribute("job-name")) response.AddJobAttribute(rb.GetAttribute("job-originating-user-name")) response.AddJobAttribute(rb.GetAttribute("job-state")) response.AddJobAttribute(rb.GetAttribute("job-state-reasons")) return response, nil }