Warning: this project is work in progress and under the intensive development.
This project contains the foundation of the behavior-accurate simulator for multi-function printers (MFPs) that supports at least IPP 2.x for printing, eSCL and WSD for scanning, and DNS-SD and WS-Discovery for device discovery.
This simulator will consist of a core simulation engine that provides reference implementations of the aforementioned protocols, along with a customization engine that allows for the expression of implementation details specific to individual devices without the need to reimplement common functionalities repeatedly.
For the purpose of implementation of the MFP core simulation engine it contains many libraries (Go packages) that are aimed to be a part of the simulator, but can be useful as a general-purpose libraries as well.
It contains (partially done for now) the fairly complete eSCL and WSD WS-Scan implementations, DNS-SD and WS-Discovery published and querier, smart device discovery engine, able to bind various instances of the same device together, representing them as a sub-units of a single physical device (IPP/IPPS, AppSocket AKA JetDirect and LPD for printing, eSCL and WSD for scanning), based on the similar work previously done for scanners in the sane-airscan project and much more.
The ultimate goal of this project, among writing the MFP simulator, is to implement a comprehensive Go toolkit for printing and scanning on Linux and UNIX-like systems.
Building is quite straightforward: just type make
at the root
directory.
It requires the following development packages to be installed:
- Golang compiler
- gcc compiler
- avahi-libs for the DNS-SD
It also requires some external Go libraries, but if your build computer is connected to the network, they will be downloaded and cached automatically at the first build attrmpt:
- github.com/OpenPrinting/go-avahi - Go binding for Avahi
- github.com/OpenPrinting/goipp - Low-level IPP implementation
- github.com/google/go-cmp - used only for testing
- github.com/peterh/liner - line editor for the interactive shell
This package contains definitions for the abstract (protocol-independent) printer and scanner.
This is a general-purpose library for parsing command options.
This is a root directory for all commands (executable files) build as a part of this project.
TODO
This is the command-line CUPS client.
This is the command-line device discovery tool.
This is the MFP masquerading tool. It allows to re-expose existent MFP device under the different name or different IP address and to sniff its traffic (which is convenient tool for troubleshooting).
This is interactive shell for all mfp-XXX commands.
This is the vurtual MFP simulator.
This is the CUPS API library. It uses the IPP protocol to communicate with the CUPS server.
This is the smart MFP discovery library.
This is the collection of internally used support libraries. These libraries are not exposed via the GO-MFP API.
This is the logging library, used across the project.
This is the collection of packages, that implement MFP protocols.
This is the eSCL protocol implementation.
This is the high-level IPP protocol implementation.
This is the WS-Discovery protocol implementation, querier and responder.
This is the low-level transport library, used for communication with devices.
This is the collection of internally used support libraries. These libraries are exposed via the GO-MFP API.