#!/usr/bin/perl -w # # netprint # # Copyright 2004 - James McQuillan # # This is a print client that will take a print job either from files # named on the command line, or if there are no files, it will read # from stdin, and send it through a network port # # There is 1 required option, it is: # # --server=server_addr # # The operation will be logged to syslog, if the --log option is used # use strict; use IO::Socket; use Getopt::Long; use Sys::Syslog; my $port = 9100; my $server_addr = ""; my $log = 0; my $addcr = 0; my $help = 0; my $getopt_result = GetOptions( "port=i" => \$port, "server=s" => \$server_addr, "addcr" => \$addcr, "log" => \$log ); if( ( ! $getopt_result ) or ( ! $server_addr ) ){ $help = 1; } if( $help ){ print("\nUsage: $0 --port= --server=server --log --addcr\n\n"); print(" --port TCP Port number to use, default = 9100\n"); print(" --server Hostname or IP address of print server\n"); print(" --log Send logging information to syslog\n"); print(" --addcr Add a Carriage Return to prevent stair-stepping\n"); print("\n"); exit 1; } my $server = "$server_addr:$port"; logit("sending print job to: $server") if $log; if( my $socket = IO::Socket::INET->new($server) ){ $socket->sockopt( SO_REUSEADDR, 1 ); while(<>){ if( $addcr ){ $_ =~ s/\n/\r\n/; } print $socket $_; } close($socket); } else{ logit("Unable to open socket to $server: $!") if $log; die "Couldn't open connection to server: $!\n"; } #------------------------------------------------------------------------------ sub logit { openlog( "$0", "pid", 0 ); syslog( 'info', shift ); closelog; }