/* @(#) BIPclient.java Client program for Brother Internet Print protocol * , with compression enhancement. * * Copyright (c) 2003 Graham Jenkins * All rights reserved. Version 1.07, 2003-06-23. */ import java.io.*; import java.util.*; import java.util.zip.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class BIPclient { // Configuration files. public static final String[] Conf={"C:\\Windows\\BIPclien.ini", "/usr/local/etc/BIPclient.cf"}; public static void main(String[] args) { String params[]={"-P","-n"}, paramArgs[]={"",""}, prev=""; for (int i=0;i=1)&&((String)iRec.get(1)).equals(paramArgs[0])){ if (j==1) pRec.clear(); else pRec.add(iRec.get(j)); } break; case 'U':if((j>=1)&&((String)iRec.get(1)).equals(paramArgs[1])){ if (j==1) uRec.clear(); else uRec.add(iRec.get(j)); } break; case 'S':if (j==0) sRec.clear(); else sRec.add(iRec.get(j)); } } line=in.readLine(); } in.close(); } catch (IOException e) {} } int partSize=0; // Validate configuration-file details. if ((pRec.size()<2) || (uRec.size()<1) || (sRec.size()<1)) userMessage(1,"Valid printer/user/smtp-host records not found"); try {partSize=Integer.parseInt((String)pRec.get(0));} catch (NumberFormatException e) {userMessage(1,"Illegal part-size");} if ((partSize>-16) && (partSize<16)) userMessage(1,"Illegal part-size"); if (uRec.size()<3) {uRec.add(""); uRec.add(""); uRec.set(1,"Never");} File tmp1=null, tmp2=null; FileOutputStream fos1=null, fos2=null; try { // Create temporary files. tmp1=File.createTempFile("BIP",".TMP"); tmp1.deleteOnExit(); tmp2=File.createTempFile("BIP",".PRN"); tmp2.deleteOnExit(); fos1=new FileOutputStream(tmp1.getPath()); } catch (IOException e) {userMessage(1,"Temporary file problem");} byte[] buffer=new byte[1024]; int bytesRead; String mark="0"; if (partSize>0) { DataOutputStream out=new DataOutputStream(fos1); try { while ( (bytesRead=System.in.read(buffer)) != -1 ) { out.write(buffer,0,bytesRead); } // Read and store raw or } // compressed input stream. catch (IOException e) {userMessage(1,"Temporary file problem");} } else { partSize=-partSize; mark="Z"; Deflater def=new Deflater(); def.setLevel(Deflater.BEST_COMPRESSION); DeflaterOutputStream out=new DeflaterOutputStream(fos1,def); try { while ( (bytesRead=System.in.read(buffer)) != -1 ) { out.write(buffer,0,bytesRead); } out.finish(); } catch (IOException e) {userMessage(1,"Temporary file problem");} } long id=(new Date()).getTime(); // Generate unique identifier. long totalParts=1+(tmp1.length()-1)/partSize/1024; FileInputStream fis1=null; // Extract, encode and send each part. try {fis1=new FileInputStream(tmp1);} catch (IOException e) {} for (int partNo=1;partNo<=totalParts;partNo++) { try { fos2=new FileOutputStream(tmp2.getPath()); int k=0; while ( (k++=0) System.exit(p1); // STDERR, exits if first parameter is } // non-negative. }