Avoid panic if printer is off or unreachable for some reason.
Closes #16 Closes #17 Closes #15
This commit is contained in:
@@ -2,6 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"flag"
|
||||
"ippserver/packages/ipp"
|
||||
"ippserver/packages/mdnsserver"
|
||||
"net/http"
|
||||
@@ -10,6 +11,15 @@ import (
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
var (
|
||||
loglevel string
|
||||
location string
|
||||
)
|
||||
|
||||
func init() {
|
||||
flag.StringVar(&loglevel, "loglevel", "info", "The wanted loglevel error/info/debug")
|
||||
}
|
||||
|
||||
func main() {
|
||||
customFormatter := new(log.TextFormatter)
|
||||
customFormatter.TimestampFormat = "2006-01-02 15:04:05"
|
||||
@@ -39,29 +49,32 @@ func handle(w http.ResponseWriter, r *http.Request) {
|
||||
mut.Unlock()
|
||||
if r.Method != http.MethodPost {
|
||||
http.Error(w, "Unsupported method", http.StatusMethodNotAllowed)
|
||||
|
||||
}
|
||||
|
||||
request := ipp.NewRequest(0, 0)
|
||||
request.UnMarshal(r.Body)
|
||||
log.Infof("Upstream Request: \n%v\n", request)
|
||||
log.Infof("Upstream Request: id: %v op: %v", request.RequestID(), request.Operation())
|
||||
var response *ipp.Response
|
||||
var err error
|
||||
switch request.Operation() {
|
||||
case ipp.GetPrinterAttributes:
|
||||
response = handleGetPrinterAttributes(request)
|
||||
case ipp.PrintJob:
|
||||
response = handlePrintJob(request, r.Body, requestID)
|
||||
response, err = handlePrintJob(request, r.Body, requestID)
|
||||
case ipp.GetJobs:
|
||||
response = handleGetJobs(request, requestID)
|
||||
response, err = handleGetJobs(request, requestID)
|
||||
case ipp.ValidateJob:
|
||||
response = handleValidateJob(request)
|
||||
case ipp.GetJobAttributes:
|
||||
response = handleGetJobAttributes(request, requestID)
|
||||
response, err = handleGetJobAttributes(request, requestID)
|
||||
default:
|
||||
response = ipp.NewResponse(ipp.ClientErrorBadRequest, request.RequestID())
|
||||
}
|
||||
|
||||
log.Infof("Upstream Response:\n%v\n", response)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to handle request: %v", err.Error())
|
||||
response = ipp.NewResponse(ipp.ServerErrorServiceUnavailable, request.RequestID())
|
||||
}
|
||||
log.Infof("Upstream Response: %v", response.Header())
|
||||
data := response.Marshal()
|
||||
w.Write(data)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user