package org.cups; /** * @version 0.00 06-NOV-2001 * @author Easy Software Products * * Internet Printing Protocol definitions for the Common UNIX Printing * System (CUPS). * * Copyright 1997-2003 by Easy Software Products. * * These coded instructions, statements, and computer programs are the * property of Easy Software Products and are protected by Federal * copyright law. Distribution and use rights are outlined in the file * "LICENSE.txt" which should have been included with this file. If this * file is missing or damaged please contact Easy Software Products * at: * * Attn: CUPS Licensing Information * Easy Software Products * 44141 Airport View Drive, Suite 204 * Hollywood, Maryland 20636-3111 USA * * Voice: (301) 373-9603 * EMail: cups-info@cups.org * WWW: http://www.cups.org */ import java.util.*; /** * An IPP object is used to hold the various * attributes and status of an ipp request.. * * @author TDB * @version 1.0 * @since JDK1.3 */ public class IPP { public IPPRequest request; // The request header public IPPStatus status; // Status of request public List attrs; // Attributes list. short state; // Current IPP state (of request???) int current; // Index into attributes array. int last; // Index into attributes array. short current_tag; // ------------------------------------------------------------------ // // Constructor // public IPP() { state = IPPDefs.IDLE; attrs = new LinkedList(); current = -1; last = -1; current_tag = IPPDefs.TAG_ZERO; } /** * Add an attribute to the attibutes list * for later parsing. * * @param a IPPAttribute to add. * @return true always returns true * for now. * * @see IPPAttribute * @see IPPValue */ public boolean addAttribute( IPPAttribute a ) { attrs.add(a); return(true); } /** * Get the current attribute pointed at by * current. * * @return IPPAttribute Return the current attribute. * @return null Return null * if current is 0. */ public IPPAttribute getCurrentAttribute() { if (current >= 0) return( (IPPAttribute)attrs.get(current) ); else return( null ); } // public void setCurrentAttribute( IPPAttribute p_attr ) // { // if (current >= 0) // return( (IPPAttribute)attrs.get(current) ); // } /** * * Find the named attribute of the correct type. Both must match. * This methos searches from the beginning of the attribute list, * rather than from the current position. * * @param p_name String containing the name. * @param p_type int attribute type. * * @return IPPAttribute Matching attribute if found. * @return null null if not found. */ public IPPAttribute ippFindAttribute( String p_name, int p_type ) { if (p_name.length() < 1) return(null); current = -1; return(ippFindNextAttribute(p_name, p_type)); } /** * * Find the named attribute of the correct type. Both must match. * This methos searches from the current position in the attribute list. * * @param p_name String containing the name. * @param p_type int attribute type. * * @return IPPAttribute Matching attribute if found. * @return null null if not found. */ public IPPAttribute ippFindNextAttribute( String p_name, int p_type ) { int value_tag; if (p_name.length() < 1) return(null); if ((current >= 0) && (current < (attrs.size() - 1))) current++; else current = 0; for (int i = current; i < attrs.size(); i++) { IPPAttribute tmp = (IPPAttribute)attrs.get(i); value_tag = (tmp.value_tag & IPPDefs.TAG_MASK); if ((tmp.name.length() > 0) && (tmp.name == p_name) && (value_tag == p_type || p_type == IPPDefs.TAG_ZERO || (value_tag == IPPDefs.TAG_TEXTLANG && p_type == IPPDefs.TAG_TEXT) || (value_tag == IPPDefs.TAG_NAMELANG && p_type == IPPDefs.TAG_NAME))) { current = i; return(tmp); } } return(null); } /** * Get the size in bytes of an IPP request. * * @return int Number of bytes for the request. */ public int sizeInBytes() { IPPAttribute a; int bytes = 8; int last_group = IPPDefs.TAG_ZERO; for (int i=0; i < attrs.size(); i++) { a = (IPPAttribute)attrs.get(i); bytes += a.sizeInBytes(last_group); last_group = a.group_tag; } bytes++; // one for the end tag. return(bytes); } // End of IPP.sizeInBytes() int ippBytes() { int i = 0; return(0); } /** * Set the IPP request ID. * * @param p_id short request id. */ public void setRequestID( short p_id ) { request.request_id = p_id; } /** * Set the IPP operation ID. * * @param p_operation_id short operation id. */ public void setRequestOperationID( short p_operation_id ) { request.operation_id = p_operation_id; } // // Dump a list - for debugging. // public void dump_response() { IPPAttribute a; int last_group = IPPDefs.TAG_ZERO; for (int i=0; i < attrs.size(); i++) { a = (IPPAttribute)attrs.get(i); a.dump_values(); last_group = a.group_tag; } return; } // End of IPP.dump_response() } // End of IPP class // // End of IPP.java //