Avoid panic if printer is off or unreachable for some reason.

Closes #16
Closes #17
Closes #15
This commit was merged in pull request #18.
This commit is contained in:
2021-05-23 15:21:31 +00:00
committed by Gitea
parent 72ee8c7d1b
commit 21cf29f651
7 changed files with 35 additions and 19 deletions

View File

@@ -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)
}