sig
type banner = {
user_name : string;
class_name : string;
job_name : string;
}
type file_type =
Text of int * int
| Bin
| PS
| DVI
| Troff of string * string * string * string
| Ditroff
| CIF
| Plot
| Pr of string * int
| Fortran
| Raster
type file = {
name : string;
size : int;
nbcopies : int;
storage : string;
of_type : Lpd.file_type;
}
type job = {
number : int;
user : string;
host : string;
mailto : string;
banner : Lpd.banner option;
files : Lpd.file list;
addr : Unix.sockaddr;
}
type jobref = User of string | Num of int
type queue_actions = {
print : unit -> unit;
on_reception : Lpd.job -> unit;
send_queue : Lpd.jobref list -> Socket.out_channel -> unit;
send_queue_long : Lpd.jobref list -> Socket.out_channel -> unit;
remove : string -> Unix.sockaddr -> Lpd.jobref list -> unit;
}
module type CONFIG =
sig
val queues : (string * Lpd.queue_actions) list
val authorized_host : Unix.sockaddr -> bool
val log : string -> unit
val temp_dir : string
end
module Make :
functor (C : CONFIG) ->
sig
val socket : ?port:int -> unit -> Unix.file_descr
val accept :
?thread:((unit -> unit) -> unit) ->
Unix.file_descr ->
(Unix.sockaddr -> Socket.in_channel -> Socket.out_channel -> unit) ->
'a
val daemon :
Unix.sockaddr -> Socket.in_channel -> Socket.out_channel -> unit
end
val string_of_current_time : unit -> string
val header_of_job : string -> string
val string_of_job : int -> Lpd.job -> string
val long_string_of_job : int -> Lpd.job -> string
val any_host : Unix.sockaddr -> bool
val these_hosts : ?file:string -> string list -> Unix.sockaddr -> bool
end