438 lines
19 KiB
Go
438 lines
19 KiB
Go
/*
|
|
Copyright 2022 Dolysis Consulting Limited
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
|
|
For changes see the git log
|
|
*/
|
|
package ipp
|
|
|
|
// ipp status codes
|
|
const (
|
|
StatusCupsInvalid int16 = -1
|
|
StatusOk int16 = 0x0000
|
|
StatusOkIgnoredOrSubstituted int16 = 0x0001
|
|
StatusOkConflicting int16 = 0x0002
|
|
StatusOkIgnoredSubscriptions int16 = 0x0003
|
|
StatusOkIgnoredNotifications int16 = 0x0004
|
|
StatusOkTooManyEvents int16 = 0x0005
|
|
StatusOkButCancelSubscription int16 = 0x0006
|
|
StatusOkEventsComplete int16 = 0x0007
|
|
StatusRedirectionOtherSite int16 = 0x0200
|
|
StatusCupsSeeOther int16 = 0x0280
|
|
StatusErrorBadRequest int16 = 0x0400
|
|
StatusErrorForbidden int16 = 0x0401
|
|
StatusErrorNotAuthenticated int16 = 0x0402
|
|
StatusErrorNotAuthorized int16 = 0x0403
|
|
StatusErrorNotPossible int16 = 0x0404
|
|
StatusErrorTimeout int16 = 0x0405
|
|
StatusErrorNotFound int16 = 0x0406
|
|
StatusErrorGone int16 = 0x0407
|
|
StatusErrorRequestEntity int16 = 0x0408
|
|
StatusErrorRequestValue int16 = 0x0409
|
|
StatusErrorDocumentFormatNotSupported int16 = 0x040a
|
|
StatusErrorAttributesOrValues int16 = 0x040b
|
|
StatusErrorUriScheme int16 = 0x040c
|
|
StatusErrorCharset int16 = 0x040d
|
|
StatusErrorConflicting int16 = 0x040e
|
|
StatusErrorCompressionError int16 = 0x040f
|
|
StatusErrorDocumentFormatError int16 = 0x0410
|
|
StatusErrorDocumentAccess int16 = 0x0411
|
|
StatusErrorAttributesNotSettable int16 = 0x0412
|
|
StatusErrorIgnoredAllSubscriptions int16 = 0x0413
|
|
StatusErrorTooManySubscriptions int16 = 0x0414
|
|
StatusErrorIgnoredAllNotifications int16 = 0x0415
|
|
StatusErrorPrintSupportFileNotFound int16 = 0x0416
|
|
StatusErrorDocumentPassword int16 = 0x0417
|
|
StatusErrorDocumentPermission int16 = 0x0418
|
|
StatusErrorDocumentSecurity int16 = 0x0419
|
|
StatusErrorDocumentUnprintable int16 = 0x041a
|
|
StatusErrorAccountInfoNeeded int16 = 0x041b
|
|
StatusErrorAccountClosed int16 = 0x041c
|
|
StatusErrorAccountLimitReached int16 = 0x041d
|
|
StatusErrorAccountAuthorizationFailed int16 = 0x041e
|
|
StatusErrorNotFetchable int16 = 0x041f
|
|
StatusErrorCupsAccountInfoNeeded int16 = 0x049C
|
|
StatusErrorCupsAccountClosed int16 = 0x049d
|
|
StatusErrorCupsAccountLimitReached int16 = 0x049e
|
|
StatusErrorCupsAccountAuthorizationFailed int16 = 0x049f
|
|
StatusErrorInternal int16 = 0x0500
|
|
StatusErrorOperationNotSupported int16 = 0x0501
|
|
StatusErrorServiceUnavailable int16 = 0x0502
|
|
StatusErrorVersionNotSupported int16 = 0x0503
|
|
StatusErrorDevice int16 = 0x0504
|
|
StatusErrorTemporary int16 = 0x0505
|
|
StatusErrorNotAcceptingJobs int16 = 0x0506
|
|
StatusErrorBusy int16 = 0x0507
|
|
StatusErrorJobCanceled int16 = 0x0508
|
|
StatusErrorMultipleJobsNotSupported int16 = 0x0509
|
|
StatusErrorPrinterIsDeactivated int16 = 0x050a
|
|
StatusErrorTooManyJobs int16 = 0x050b
|
|
StatusErrorTooManyDocuments int16 = 0x050c
|
|
StatusErrorCupsAuthenticationCanceled int16 = 0x1000
|
|
StatusErrorCupsPki int16 = 0x1001
|
|
StatusErrorCupsUpgradeRequired int16 = 0x1002
|
|
)
|
|
|
|
// ipp operations
|
|
const (
|
|
OperationCupsInvalid int16 = -0x0001
|
|
OperationCupsNone int16 = 0x0000
|
|
OperationPrintJob int16 = 0x0002
|
|
OperationPrintUri int16 = 0x0003
|
|
OperationValidateJob int16 = 0x0004
|
|
OperationCreateJob int16 = 0x0005
|
|
OperationSendDocument int16 = 0x0006
|
|
OperationSendUri int16 = 0x0007
|
|
OperationCancelJob int16 = 0x0008
|
|
OperationGetJobAttributes int16 = 0x0009
|
|
OperationGetJobs int16 = 0x000a
|
|
OperationGetPrinterAttributes int16 = 0x000b
|
|
OperationHoldJob int16 = 0x000c
|
|
OperationReleaseJob int16 = 0x000d
|
|
OperationRestartJob int16 = 0x000e
|
|
OperationPausePrinter int16 = 0x0010
|
|
OperationResumePrinter int16 = 0x0011
|
|
OperationPurgeJobs int16 = 0x0012
|
|
OperationSetPrinterAttributes int16 = 0x0013
|
|
OperationSetJobAttributes int16 = 0x0014
|
|
OperationGetPrinterSupportedValues int16 = 0x0015
|
|
OperationCreatePrinterSubscriptions int16 = 0x0016
|
|
OperationCreateJobSubscriptions int16 = 0x0017
|
|
OperationGetSubscriptionAttributes int16 = 0x0018
|
|
OperationGetSubscriptions int16 = 0x0019
|
|
OperationRenewSubscription int16 = 0x001a
|
|
OperationCancelSubscription int16 = 0x001b
|
|
OperationGetNotifications int16 = 0x001c
|
|
OperationSendNotifications int16 = 0x001d
|
|
OperationGetResourceAttributes int16 = 0x001e
|
|
OperationGetResourceData int16 = 0x001f
|
|
OperationGetResources int16 = 0x0020
|
|
OperationGetPrintSupportFiles int16 = 0x0021
|
|
OperationEnablePrinter int16 = 0x0022
|
|
OperationDisablePrinter int16 = 0x0023
|
|
OperationPausePrinterAfterCurrentJob int16 = 0x0024
|
|
OperationHoldNewJobs int16 = 0x0025
|
|
OperationReleaseHeldNewJobs int16 = 0x0026
|
|
OperationDeactivatePrinter int16 = 0x0027
|
|
OperationActivatePrinter int16 = 0x0028
|
|
OperationRestartPrinter int16 = 0x0029
|
|
OperationShutdownPrinter int16 = 0x002a
|
|
OperationStartupPrinter int16 = 0x002b
|
|
OperationReprocessJob int16 = 0x002c
|
|
OperationCancelCurrentJob int16 = 0x002d
|
|
OperationSuspendCurrentJob int16 = 0x002e
|
|
OperationResumeJob int16 = 0x002f
|
|
OperationOperationPromoteJob int16 = 0x0030
|
|
OperationScheduleJobAfter int16 = 0x0031
|
|
OperationCancelDocument int16 = 0x0033
|
|
OperationGetDocumentAttributes int16 = 0x0034
|
|
OperationGetDocuments int16 = 0x0035
|
|
OperationDeleteDocument int16 = 0x0036
|
|
OperationSetDocumentAttributes int16 = 0x0037
|
|
OperationCancelJobs int16 = 0x0038
|
|
OperationCancelMyJobs int16 = 0x0039
|
|
OperationResubmitJob int16 = 0x003a
|
|
OperationCloseJob int16 = 0x003b
|
|
OperationIdentifyPrinter int16 = 0x003c
|
|
OperationValidateDocument int16 = 0x003d
|
|
OperationAddDocumentImages int16 = 0x003e
|
|
OperationAcknowledgeDocument int16 = 0x003f
|
|
OperationAcknowledgeIdentifyPrinter int16 = 0x0040
|
|
OperationAcknowledgeJob int16 = 0x0041
|
|
OperationFetchDocument int16 = 0x0042
|
|
OperationFetchJob int16 = 0x0043
|
|
OperationGetOutputDeviceAttributes int16 = 0x0044
|
|
OperationUpdateActiveJobs int16 = 0x0045
|
|
OperationDeregisterOutputDevice int16 = 0x0046
|
|
OperationUpdateDocumentStatus int16 = 0x0047
|
|
OperationUpdateJobStatus int16 = 0x0048
|
|
OperationUpdateOutputDeviceAttributes int16 = 0x0049
|
|
OperationGetNextDocumentData int16 = 0x004a
|
|
OperationAllocatePrinterResources int16 = 0x004b
|
|
OperationCreatePrinter int16 = 0x004c
|
|
OperationDeallocatePrinterResources int16 = 0x004d
|
|
OperationDeletePrinter int16 = 0x004e
|
|
OperationGetPrinters int16 = 0x004f
|
|
OperationShutdownOnePrinter int16 = 0x0050
|
|
OperationStartupOnePrinter int16 = 0x0051
|
|
OperationCancelResource int16 = 0x0052
|
|
OperationCreateResource int16 = 0x0053
|
|
OperationInstallResource int16 = 0x0054
|
|
OperationSendResourceData int16 = 0x0055
|
|
OperationSetResourceAttributes int16 = 0x0056
|
|
OperationCreateResourceSubscriptions int16 = 0x0057
|
|
OperationCreateSystemSubscriptions int16 = 0x0058
|
|
OperationDisableAllPrinters int16 = 0x0059
|
|
OperationEnableAllPrinters int16 = 0x005a
|
|
OperationGetSystemAttributes int16 = 0x005b
|
|
OperationGetSystemSupportedValues int16 = 0x005c
|
|
OperationPauseAllPrinters int16 = 0x005d
|
|
OperationPauseAllPrintersAfterCurrentJob int16 = 0x005e
|
|
OperationRegisterOutputDevice int16 = 0x005f
|
|
OperationRestartSystem int16 = 0x0060
|
|
OperationResumeAllPrinters int16 = 0x0061
|
|
OperationSetSystemAttributes int16 = 0x0062
|
|
OperationShutdownAllPrinter int16 = 0x0063
|
|
OperationStartupAllPrinters int16 = 0x0064
|
|
OperationPrivate int16 = 0x4000
|
|
OperationCupsGetDefault int16 = 0x4001
|
|
OperationCupsGetPrinters int16 = 0x4002
|
|
OperationCupsAddModifyPrinter int16 = 0x4003
|
|
OperationCupsDeletePrinter int16 = 0x4004
|
|
OperationCupsGetClasses int16 = 0x4005
|
|
OperationCupsAddModifyClass int16 = 0x4006
|
|
OperationCupsDeleteClass int16 = 0x4007
|
|
OperationCupsAcceptJobs int16 = 0x4008
|
|
OperationCupsRejectJobs int16 = 0x4009
|
|
OperationCupsSetDefault int16 = 0x400a
|
|
OperationCupsGetDevices int16 = 0x400b
|
|
OperationCupsGetPPDs int16 = 0x400c
|
|
OperationCupsMoveJob int16 = 0x400d
|
|
OperationCupsAuthenticateJob int16 = 0x400e
|
|
OperationCupsGetPpd int16 = 0x400f
|
|
OperationCupsGetDocument int16 = 0x4027
|
|
OperationCupsCreateLocalPrinter int16 = 0x4028
|
|
)
|
|
|
|
// ipp tags
|
|
const (
|
|
TagCupsInvalid int8 = -1
|
|
TagZero int8 = 0x00
|
|
TagOperation int8 = 0x01
|
|
TagJob int8 = 0x02
|
|
TagEnd int8 = 0x03
|
|
TagPrinter int8 = 0x04
|
|
TagUnsupportedGroup int8 = 0x05
|
|
TagSubscription int8 = 0x06
|
|
TagEventNotification int8 = 0x07
|
|
TagResource int8 = 0x08
|
|
TagDocument int8 = 0x09
|
|
TagSystem int8 = 0x0a
|
|
TagUnsupportedValue int8 = 0x10
|
|
TagDefault int8 = 0x11
|
|
TagUnknown int8 = 0x12
|
|
TagNoValue int8 = 0x13
|
|
TagNotSettable int8 = 0x15
|
|
TagDeleteAttr int8 = 0x16
|
|
TagAdminDefine int8 = 0x17
|
|
TagInteger int8 = 0x21
|
|
TagBoolean int8 = 0x22
|
|
TagEnum int8 = 0x23
|
|
TagString int8 = 0x30
|
|
TagDate int8 = 0x31
|
|
TagResolution int8 = 0x32
|
|
TagRange int8 = 0x33
|
|
TagBeginCollection int8 = 0x34
|
|
TagTextLang int8 = 0x35
|
|
TagNameLang int8 = 0x36
|
|
TagEndCollection int8 = 0x37
|
|
TagText int8 = 0x41
|
|
TagName int8 = 0x42
|
|
TagReservedString int8 = 0x43
|
|
TagKeyword int8 = 0x44
|
|
TagUri int8 = 0x45
|
|
TagUriScheme int8 = 0x46
|
|
TagCharset int8 = 0x47
|
|
TagLanguage int8 = 0x48
|
|
TagMimeType int8 = 0x49
|
|
TagMemberName int8 = 0x4a
|
|
TagExtension int8 = 0x7f
|
|
)
|
|
|
|
// job states
|
|
const (
|
|
JobStatePending int8 = 0x03
|
|
JobStateHeld int8 = 0x04
|
|
JobStateProcessing int8 = 0x05
|
|
JobStateStopped int8 = 0x06
|
|
JobStateCanceled int8 = 0x07
|
|
JobStateAborted int8 = 0x08
|
|
JobStateCompleted int8 = 0x09
|
|
)
|
|
|
|
// document states
|
|
const (
|
|
DocumentStatePending int8 = 0x03
|
|
DocumentStateProcessing int8 = 0x05
|
|
DocumentStateCanceled int8 = 0x07
|
|
DocumentStateAborted int8 = 0x08
|
|
DocumentStateCompleted int8 = 0x08
|
|
)
|
|
|
|
// printer states
|
|
const (
|
|
PrinterStateIdle int8 = 0x0003
|
|
PrinterStateProcessing int8 = 0x0004
|
|
PrinterStateStopped int8 = 0x0005
|
|
)
|
|
|
|
// job state filter
|
|
const (
|
|
JobStateFilterNotCompleted = "not-completed"
|
|
JobStateFilterCompleted = "completed"
|
|
JobStateFilterAll = "all"
|
|
)
|
|
|
|
// error policies
|
|
const (
|
|
ErrorPolicyRetryJob = "retry-job"
|
|
ErrorPolicyAbortJob = "abort-job"
|
|
ErrorPolicyRetryCurrentJob = "retry-current-job"
|
|
ErrorPolicyStopPrinter = "stop-printer"
|
|
)
|
|
|
|
// ipp defaults
|
|
const (
|
|
CharsetLanguage = "en-US"
|
|
Charset = "utf-8"
|
|
ProtocolVersionMajor = int8(2)
|
|
ProtocolVersionMinor = int8(0)
|
|
|
|
DefaultJobPriority = 50
|
|
)
|
|
|
|
// useful mime types for ipp
|
|
const (
|
|
MimeTypePostscript = "application/postscript"
|
|
MimeTypeOctetStream = "application/octet-stream"
|
|
)
|
|
|
|
// ipp content types
|
|
const (
|
|
ContentTypeIPP = "application/ipp"
|
|
)
|
|
|
|
// known ipp attributes
|
|
const (
|
|
AttributeCopies = "copies"
|
|
AttributeDocumentFormat = "document-format"
|
|
AttributeDocumentName = "document-name"
|
|
AttributeJobID = "job-id"
|
|
AttributeJobName = "job-name"
|
|
AttributeJobPriority = "job-priority"
|
|
AttributeJobURI = "job-uri"
|
|
AttributeLastDocument = "last-document"
|
|
AttributeMyJobs = "my-jobs"
|
|
AttributePPDName = "ppd-name"
|
|
AttributePPDMakeAndModel = "ppd-make-and-model"
|
|
AttributePrinterIsShared = "printer-is-shared"
|
|
AttributePrinterURI = "printer-uri"
|
|
AttributePurgeJobs = "purge-jobs"
|
|
AttributeRequestedAttributes = "requested-attributes"
|
|
AttributeRequestingUserName = "requesting-user-name"
|
|
AttributeWhichJobs = "which-jobs"
|
|
AttributeFirstJobID = "first-job-id"
|
|
AttributeLimit = "limit"
|
|
AttributeStatusMessage = "status-message"
|
|
AttributeCharset = "attributes-charset"
|
|
AttributeNaturalLanguage = "attributes-natural-language"
|
|
AttributeDeviceURI = "device-uri"
|
|
AttributeHoldJobUntil = "job-hold-until"
|
|
AttributePrinterErrorPolicy = "printer-error-policy"
|
|
AttributePrinterInfo = "printer-info"
|
|
AttributePrinterLocation = "printer-location"
|
|
AttributePrinterName = "printer-name"
|
|
AttributePrinterStateReasons = "printer-state-reasons"
|
|
AttributeJobPrinterURI = "job-printer-uri"
|
|
AttributeMemberURIs = "member-uris"
|
|
AttributeDocumentNumber = "document-number"
|
|
AttributeDocumentState = "document-state"
|
|
AttributeFinishings = "finishings"
|
|
AttributeJobHoldUntil = "hold-job-until"
|
|
AttributeJobSheets = "job-sheets"
|
|
AttributeJobState = "job-state"
|
|
AttributeJobStateReason = "job-state-reason"
|
|
AttributeMedia = "media"
|
|
AttributeNumberUp = "number-up"
|
|
AttributeOrientationRequested = "orientation-requested"
|
|
AttributePrintQuality = "print-quality"
|
|
AttributePrinterIsAcceptingJobs = "printer-is-accepting-jobs"
|
|
AttributePrinterResolution = "printer-resolution"
|
|
AttributePrinterState = "printer-state"
|
|
AttributeMemberNames = "member-names"
|
|
AttributePrinterType = "printer-type"
|
|
AttributePrinterMakeAndModel = "printer-make-and-model"
|
|
AttributePrinterStateMessage = "printer-state-message"
|
|
AttributePrinterUriSupported = "printer-uri-supported"
|
|
AttributeJobMediaProgress = "job-media-progress"
|
|
AttributeJobKilobyteOctets = "job-k-octets"
|
|
AttributeNumberOfDocuments = "number-of-documents"
|
|
AttributeJobOriginatingUserName = "job-originating-user-name"
|
|
AttributeOutputOrder = "outputorder"
|
|
AttributeMediaCol = "media-col"
|
|
)
|
|
|
|
// Default attributes
|
|
var (
|
|
DefaultClassAttributes = []string{AttributePrinterName, AttributeMemberNames}
|
|
DefaultPrinterAttributes = []string{AttributePrinterName, AttributePrinterType, AttributePrinterLocation, AttributePrinterInfo,
|
|
AttributePrinterMakeAndModel, AttributePrinterState, AttributePrinterStateMessage, AttributePrinterStateReasons,
|
|
AttributePrinterUriSupported, AttributeDeviceURI, AttributePrinterIsShared}
|
|
DefaultJobAttributes = []string{AttributeJobID, AttributeJobName, AttributePrinterURI, AttributeJobState, AttributeJobStateReason,
|
|
AttributeJobHoldUntil, AttributeJobMediaProgress, AttributeJobKilobyteOctets, AttributeNumberOfDocuments, AttributeCopies,
|
|
AttributeJobOriginatingUserName}
|
|
)
|
|
|
|
// Attribute to tag mapping
|
|
var (
|
|
AttributeTagMapping = map[string]int8{
|
|
AttributeCharset: TagCharset,
|
|
AttributeNaturalLanguage: TagLanguage,
|
|
AttributeCopies: TagInteger,
|
|
AttributeDeviceURI: TagUri,
|
|
AttributeDocumentFormat: TagMimeType,
|
|
AttributeDocumentName: TagName,
|
|
AttributeDocumentNumber: TagInteger,
|
|
AttributeDocumentState: TagEnum,
|
|
AttributeFinishings: TagEnum,
|
|
AttributeJobHoldUntil: TagKeyword,
|
|
AttributeHoldJobUntil: TagKeyword,
|
|
AttributeJobID: TagInteger,
|
|
AttributeJobName: TagName,
|
|
AttributeJobPrinterURI: TagUri,
|
|
AttributeJobPriority: TagInteger,
|
|
AttributeJobSheets: TagName,
|
|
AttributeJobState: TagEnum,
|
|
AttributeJobStateReason: TagKeyword,
|
|
AttributeJobURI: TagUri,
|
|
AttributeLastDocument: TagBoolean,
|
|
AttributeMedia: TagKeyword,
|
|
AttributeMemberURIs: TagUri,
|
|
AttributeMyJobs: TagBoolean,
|
|
AttributeNumberUp: TagInteger,
|
|
AttributeOrientationRequested: TagEnum,
|
|
AttributePPDName: TagName,
|
|
AttributePPDMakeAndModel: TagText,
|
|
AttributeNumberOfDocuments: TagInteger,
|
|
AttributePrintQuality: TagEnum,
|
|
AttributePrinterErrorPolicy: TagName,
|
|
AttributePrinterInfo: TagText,
|
|
AttributePrinterIsAcceptingJobs: TagBoolean,
|
|
AttributePrinterIsShared: TagBoolean,
|
|
AttributePrinterName: TagName,
|
|
AttributePrinterLocation: TagText,
|
|
AttributePrinterResolution: TagResolution,
|
|
AttributePrinterState: TagEnum,
|
|
AttributePrinterStateReasons: TagKeyword,
|
|
AttributePrinterURI: TagUri,
|
|
AttributePurgeJobs: TagBoolean,
|
|
AttributeRequestedAttributes: TagKeyword,
|
|
AttributeRequestingUserName: TagName,
|
|
AttributeWhichJobs: TagKeyword,
|
|
AttributeFirstJobID: TagInteger,
|
|
AttributeStatusMessage: TagText,
|
|
AttributeLimit: TagInteger,
|
|
AttributeOutputOrder: TagName,
|
|
AttributeMediaCol: TagBeginCollection,
|
|
}
|
|
)
|