47 lines
1.7 KiB
Go
47 lines
1.7 KiB
Go
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
|
|
}
|