ipp_server/
handler.rs

1//!
2//! Basic definitions for IPP server implementation
3//!
4#![allow(unused)]
5
6use num_traits::FromPrimitive;
7
8use ipp_proto::{
9    ipp::{Operation, StatusCode},
10    request::IppRequestResponse,
11    IppVersion,
12};
13
14pub type IppServerResult = Result<IppRequestResponse, StatusCode>;
15
16/// A trait which defines IPP operations
17pub trait IppRequestHandler {
18    /// Print-Job operation
19    fn print_job(&self, req: IppRequestResponse) -> IppServerResult {
20        Err(StatusCode::ServerErrorOperationNotSupported)
21    }
22
23    /// Print-Uri operation
24    fn print_uri(&self, req: IppRequestResponse) -> IppServerResult {
25        Err(StatusCode::ServerErrorOperationNotSupported)
26    }
27
28    /// Validate-Job operation
29    fn validate_job(&self, req: IppRequestResponse) -> IppServerResult {
30        Err(StatusCode::ServerErrorOperationNotSupported)
31    }
32
33    /// Cceate-Job operation
34    fn create_job(&self, req: IppRequestResponse) -> IppServerResult {
35        Err(StatusCode::ServerErrorOperationNotSupported)
36    }
37
38    /// Send-Document operation
39    fn send_document(&self, req: IppRequestResponse) -> IppServerResult {
40        Err(StatusCode::ServerErrorOperationNotSupported)
41    }
42
43    /// Send-Uri operation
44    fn send_uri(&self, req: IppRequestResponse) -> IppServerResult {
45        Err(StatusCode::ServerErrorOperationNotSupported)
46    }
47
48    /// Cancel-Job operation
49    fn cancel_job(&self, req: IppRequestResponse) -> IppServerResult {
50        Err(StatusCode::ServerErrorOperationNotSupported)
51    }
52
53    /// Get-Job-Attributes operation
54    fn get_job_attributes(&self, req: IppRequestResponse) -> IppServerResult {
55        Err(StatusCode::ServerErrorOperationNotSupported)
56    }
57
58    /// Get-Jobs operation
59    fn get_jobs(&self, req: IppRequestResponse) -> IppServerResult {
60        Err(StatusCode::ServerErrorOperationNotSupported)
61    }
62
63    /// Get-Printer-Attributes operation
64    fn get_printer_attributes(&self, req: IppRequestResponse) -> IppServerResult {
65        Err(StatusCode::ServerErrorOperationNotSupported)
66    }
67
68    /// Hold-Job operation
69    fn hold_job(&self, req: IppRequestResponse) -> IppServerResult {
70        Err(StatusCode::ServerErrorOperationNotSupported)
71    }
72
73    /// Release-Job operation
74    fn release_job(&self, req: IppRequestResponse) -> IppServerResult {
75        Err(StatusCode::ServerErrorOperationNotSupported)
76    }
77
78    /// Restart-Job operation
79    fn restart_job(&self, req: IppRequestResponse) -> IppServerResult {
80        Err(StatusCode::ServerErrorOperationNotSupported)
81    }
82
83    /// Pause-Printer operation
84    fn pause_printer(&self, req: IppRequestResponse) -> IppServerResult {
85        Err(StatusCode::ServerErrorOperationNotSupported)
86    }
87
88    /// Resume-Printer operation
89    fn resume_printer(&self, req: IppRequestResponse) -> IppServerResult {
90        Err(StatusCode::ServerErrorOperationNotSupported)
91    }
92
93    /// Purge-Jobs operation
94    fn purge_jobs(&self, req: IppRequestResponse) -> IppServerResult {
95        Err(StatusCode::ServerErrorOperationNotSupported)
96    }
97
98    /// Returns IPP version supported by the server
99    fn version(&self) -> IppVersion {
100        IppVersion::Ipp11
101    }
102
103    /// IPP request dispatcher
104    fn handle_request(&self, req: IppRequestResponse) -> IppServerResult {
105        match req.header().operation()? {
106            Operation::PrintJob => self.print_job(req),
107            Operation::PrintUri => self.print_uri(req),
108            Operation::ValidateJob => self.validate_job(req),
109            Operation::CreateJob => self.create_job(req),
110            Operation::SendDocument => self.send_document(req),
111            Operation::SendUri => self.send_uri(req),
112            Operation::CancelJob => self.cancel_job(req),
113            Operation::GetJobAttributes => self.get_job_attributes(req),
114            Operation::GetJobs => self.get_jobs(req),
115            Operation::GetPrinterAttributes => self.get_printer_attributes(req),
116            Operation::HoldJob => self.hold_job(req),
117            Operation::ReleaseJob => self.release_job(req),
118            Operation::RestartJob => self.restart_job(req),
119            Operation::PausePrinter => self.pause_printer(req),
120            Operation::ResumePrinter => self.resume_printer(req),
121            Operation::PurgeJobs => self.purge_jobs(req),
122            _ => Err(StatusCode::ServerErrorOperationNotSupported),
123        }
124    }
125}