attachment-0002

<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Impact;
        panose-1:2 11 8 6 3 9 2 5 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal>All,<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>I would like to see an IPP binding for Cloud printing.&nbsp; I see a significant advantage to an IPP based solution given the maturity of the protocol and the industry wide support.&nbsp; I experimented with a cloud based print service back in 2009.&nbsp; I based my experiments on a WS-Print binding but an IPP binding would also work.&nbsp; I switched the binding from WS-Print to PWG SM and included it in v1.160 of the PWG SM Schema.&nbsp; It is easier for me to write Schema than IPP and easier to display.&nbsp; It is not difficult to move between the two mappings.&nbsp; The issues I did not address include an environment agnostic registration and a common security model.&nbsp; <o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>For clarity I will refer to the Cloud based Printers as Queues and the devices as Printers even though in the IPP model they are both implementation of IPP Printers.&nbsp; In v1.160 of the PWG Semantic Model Schema I included two files (i.e., PwgCloudPrintQueue.wsdl and PwgCloudPrintQueueMsg.xsd) that have some of the operations fleshed out a bit.&nbsp; (I dropped a couple things moving from WS-Print to PWG SM.)<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>I had a couple of assumptions going in.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>I believe that Queues and Printers contain Jobs and are stateful.&nbsp; There is an association between the Jobs in a Queue and the Jobs being printed on a Printer.&nbsp; A mapping between them should be maintained on both sides and carried explicitly in the protocol.&nbsp; I do not believe we should be implementing &#8220;remote markers&#8221; where Jobs only reside in the Cloud.&nbsp; It should be possible for either side to use IPP operations to query the state of the Printer/Queue and their Jobs.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>I believe it is a requirement that the Cloud Print model must support both Fan Out and Fan In.&nbsp; In other words it should be possible for a single Cloud Queue to act as a proxy for other Cloud Queues.&nbsp; This will allow a Printer to interact with a single Cloud Queue but still service jobs in multiple Cloud Queues.&nbsp;&nbsp; Taking this approach allows you to do things such as set different default behaviors for Queues that all map to the same Printer.&nbsp; (The User does not need a Job Ticket since the intent is associated with the various Queues.) This approach also allows you to enforce different capabilities for different users.&nbsp; Users have permission to use specific Queues.&nbsp; The Queues could prohibit color printing or limit the size of a Job.&nbsp; <br>&nbsp;It should also be possible for one Printer to interact with a Queue and forward Jobs to other Printers.&nbsp; For example a Printer in an enterprises DMZ could forward jobs to internal Printers or a software only Printer could front end legacy devices (i.e., proxy).<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>The way I broke the processing of Cloud Jobs up was; Check for Work, Lock the Job, Update the Job Status, Retrieve the Document(s), and Finish the Job.&nbsp; I also had another group of things that include; synchronization of Printer and Job state, Firewall Traversal, Moving from Poll Driven to Event Driven, and Eventing.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Check for work:<o:p></o:p></p><p class=MsoNormal>The Printer should be event driven when processing Jobs.&nbsp; See below for a discussion on eventing.&nbsp; The printer should query the Queue for available work.&nbsp; <o:p></o:p></p><p class=MsoNormal>The Operation IsThereAnyWork&nbsp; <o:p></o:p></p><p class=MsoNormal>&lt;<a href="http://www.pwg.org/mfd/navigate/PwgSmRev1-160_ServiceOperations.html#Link1036">http://www.pwg.org/mfd/navigate/PwgSmRev1-160_ServiceOperations.html#Link1036</a>&gt;<o:p></o:p></p><p class=MsoNormal> is used by the Printer to ask a Queue to see if any work is available.&nbsp; The request contains a list of DestinationServiceUuids (i.e. printer-uuid) where the Jobs will be printed.&nbsp; The response will have a list of work entries.&nbsp; Each entry contains the SourceServiceUuid, DestinationServiceUuid (missing in schema) and a list of Job ids.&nbsp; I used a UUID instead of an ID but as long as the source Queue is identified either would work. <o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Lock the Job:<o:p></o:p></p><p class=MsoNormal>Once a Printer has determined the job it will process, it sends a DeQueuePrintJob operation <o:p></o:p></p><p class=MsoNormal>&lt;<a href="http://www.pwg.org/mfd/navigate/PwgSmRev1-160_ServiceOperations.html#Link1035">http://www.pwg.org/mfd/navigate/PwgSmRev1-160_ServiceOperations.html#Link1035</a>&gt; <o:p></o:p></p><p class=MsoNormal>&nbsp;to the Queue.&nbsp; This operates a little differently than CreateJob in that the Printer Job identifier needs to be reserved until the operation succeeds.&nbsp; If the operation fails or times out the identifier and any allocated resources are discarded.&nbsp; The request includes the identifiers for the source and destination Queue/Printer and Jobs.&nbsp; The response contains the number of documents in the job as well as some job information such as the job name and owner.&nbsp; Although not included a JobTicket should be passed in the response as well.&nbsp; The payload of the response should closely match a CreateJob operation.&nbsp; We may also want to consider passing a JobTicket by reference which IPP does not permit at this time.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Update the Job Status:<o:p></o:p></p><p class=MsoNormal>Event notifications are used to keep the state of the Job, Document and Service updated.&nbsp; I used WS-Eventing but an IPP notification method can be substituted.&nbsp; See eventing discussion below.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Retrieve the Document:<o:p></o:p></p><p class=MsoNormal>The Printer retrieves the documents to process using the Retrieve Document operation<o:p></o:p></p><p class=MsoNormal>&lt;<a href="http://www.pwg.org/mfd/navigate/PwgSmRev1-160_ServiceOperations.html#Link1038">http://www.pwg.org/mfd/navigate/PwgSmRev1-160_ServiceOperations.html#Link1038</a>&gt;.&nbsp;&nbsp; <o:p></o:p></p><p class=MsoNormal>The request identified the source Service, Job and Document number.&nbsp; The response includes the document number and a flag to indicate if it is the last document.&nbsp; Other information such as a Document Ticket or the DocumentFormat can also be included.&nbsp; Since the Printer does not know if the document will be pushed or pulled it must be ready to accept a DocumentUri or Document Content in the response.&nbsp; I used MTOM but IPP already has an acceptable encoding.&nbsp; It is most efficient to use print by reference whenever possible.&nbsp; <o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Finish the Job:<o:p></o:p></p><p class=MsoNormal>Once the Job has been printed the final update of the Job is done.&nbsp; Note that events are used to handle updates as the Job is being processed.&nbsp; The CompleteDequeuePrintJob operation <o:p></o:p></p><p class=MsoNormal>&lt;<a href="http://www.pwg.org/mfd/navigate/PwgSmRev1-160_ServiceOperations.html#Link1034">http://www.pwg.org/mfd/navigate/PwgSmRev1-160_ServiceOperations.html#Link1034</a>&gt;<o:p></o:p></p><p class=MsoNormal> request contains the Source and destination Queue/Printer and Jobs and the details of the Destination Job.&nbsp; Included is The JobState, any JobStateReasons, DateTimeAtCompletion and the ImpressionsCompleted.&nbsp; The PrintJobReceipt can also be included.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Synchronize Printer/Queue state,<o:p></o:p></p><p class=MsoNormal>Synchronize Job state,<o:p></o:p></p><p class=MsoNormal>Moving from Polling to Event Driven<o:p></o:p></p><p class=MsoNormal>Firewall traversal<o:p></o:p></p><p class=MsoNormal>Eventing:<o:p></o:p></p><p class=MsoNormal>This nice thing about outbound (i.e., Printer to Queue) eventing in a Cloud environment is that no event subscription needs to be sent.&nbsp; The Printer knows the Queue is interested in Printer and Job events.&nbsp; Either a well-known listener port can be used or the location can be part of registration.&nbsp; Since the Printer knows which jobs came from the Cloud it can filter the Job events.&nbsp; Whenever a Printer is initialized a printer state event should be sent to its registered Queues.&nbsp; If the content of the event is insufficient then a one way message that looks like a GetPrinterAttributes operation response could be used.<o:p></o:p></p><p class=MsoNormal>In order to move from a poll model to an event driven model we need a mechanism to traverse the firewall.&nbsp; I originally used a hacked together HTTP trickle protocol.&nbsp; A standardized protocol such as XMPP can be used instead.&nbsp; The PWG can create PWG specific stanzas that map to existing IPP operations such as GetPrinterAttributes, GetJobs or GetJobAttributes. A new stanza would be needed to let the Printer know it&#8217;s time to send an IsThereAnyWork operation to a Queue.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Registration:<o:p></o:p></p><p class=MsoNormal>I did not do anything with registration other than put in a place holder.&nbsp; &nbsp;The RegisterPrinter operation <o:p></o:p></p><p class=MsoNormal>&lt;<a href="http://www.pwg.org/mfd/navigate/PwgSmRev1-160_ServiceOperations.html#Link1037">http://www.pwg.org/mfd/navigate/PwgSmRev1-160_ServiceOperations.html#Link1037</a>&gt;<o:p></o:p></p><p class=MsoNormal>request contains some Printer information such as the identifier for the Queue and the Printer.&nbsp;&nbsp; It was not clear to me if the existence of a Queue is a prerequisite or a result of the operation.&nbsp; The Printer information would also include the PrinterCapabilities that we recently defined in the Job Ticket work.&nbsp; This contains the defaults, capabilities and document generation information.&nbsp; I included some &#8220;Agent&#8221; information.&nbsp; I assumed there would be some security information exchanged so I just put a placeholder there.&nbsp; &nbsp;&nbsp;&nbsp;<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Comments?<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-family:"Impact","sans-serif";color:navy'>Peter Zehler</span><span style='color:#1F497D'><br><br></span><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:navy'>Xerox Research Center Webster<br></span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:navy'>Email: </span><a href="mailto:Peter.Zehler@Xerox.com"><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:blue'>Peter.Zehler@Xerox.com</span></a><span style='color:#1F497D'><br></span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:navy'>Voice: (585) 265-8755</span><span style='color:#1F497D'><br></span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:navy'>FAX: (585) 265-7441</span><span style='color:#1F497D'><br></span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:navy'>US Mail: Peter Zehler</span><span style='color:#1F497D'><br></span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:navy'>Xerox Corp.</span><span style='color:#1F497D'><br></span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:navy'>800 Phillips Rd.</span><span style='color:#1F497D'><br></span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:navy'>M/S 128-25E</span><span style='color:#1F497D'><br></span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:navy'>Webster NY, 14580-9701</span><span style='color:#1F497D'> <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><br />-- 
<br />This message has been scanned for viruses and
<br />dangerous content by
<a href="http://www.mailscanner.info/"><b>MailScanner</b></a>, and is
<br />believed to be clean.
</body></html>