#ifndef __IppContent_H
#define __IppContent_H
#include <iostream>
#include <list>
#include <string>
#if (!__MWERKS__)
using namespace std;
#else
#define std
#endif
enum IPP_OPERATION_ID {
IPP_PRINT_JOB = 0x0002,
IPP_PRINT_URI = 0x0003,
IPP_VALIDATE_JOB = 0x0004,
IPP_CREATE_JOB = 0x0005,
IPP_SEND_DOCUMENT = 0x0006,
IPP_SEND_URI = 0x0007,
IPP_CANCEL_JOB = 0x0008,
IPP_GET_JOB_ATTRIBUTES = 0x0009,
IPP_GET_JOBS = 0x000A,
IPP_GET_PRINTER_ATTRIBUTES = 0x000B
};
enum IPP_STATUS_CODE {
IPP_SUCCESSFUL_OK_S = 0x0000,
IPP_SUCCESSFUL_OK = 0x0000,
IPP_SUCCESSFUL_OK_IGNORED_OR_SUBSTITUTED_ATTRIBUTES = 0x0001,
IPP_SUCCESSFUL_OK_CONFLICTING_ATTRIBUTES = 0x0002,
IPP_SUCCESSFUL_OK_E = 0x00FF,
IPP_INFORMATIONAL_S = 0x0100,
IPP_INFORMATIONAL_E = 0x01FF,
IPP_REDIRECTION_S = 0x0200,
IPP_REDIRECTION_SE = 0x02FF,
IPP_CLIENT_ERROR_S = 0x0400,
IPP_CLIENT_ERROR_BAD_REQUEST = 0x0400,
IPP_CLIENT_ERROR_FORBIDDEN = 0x0401,
IPP_CLIENT_ERROR_NOT_AUTHENTICATED = 0x0402,
IPP_CLIENT_ERROR_NOT_AUTHORIZED = 0x0403,
IPP_CLIENT_ERROR_NOT_POSSIBLE = 0x0404,
IPP_CLIENT_ERROR_TIMEOUT = 0x0405,
IPP_CLIENT_ERROR_NOT_FOUND = 0x0406,
IPP_CLIENT_ERROR_GONE = 0x0407,
IPP_CLIENT_ERROR_REQUEST_ENTITY_TOO_LARGE = 0x0408,
IPP_CLIENT_ERROR_REQUEST_VALUE_TOO_LONG = 0x0409,
IPP_CLIENT_ERROR_DOCUMENT_FORMAT_NOT_SUPPORTED = 0x040A,
IPP_CLIENT_ERROR_ATTRIBUTES_OR_VALUES_NOT_SUPPORTED = 0x040B,
IPP_CLIENT_ERROR_URI_SCHEME_NOT_SUPPORTED = 0x040C,
IPP_CLIENT_ERROR_CHARSET_NOT_SUPPORTED = 0x040D,
IPP_CLIENT_ERROR_CONFLICTING_ATTRIBUTES = 0x040E,
IPP_CLIENT_ERROR_E = 0x04FF,
IPP_SERVER_ERROR_S = 0x0500,
IPP_SERVER_ERROR_INTERNAL_ERROR = 0x0500,
IPP_SERVER_ERROR_OPERATION_NOT_SUPPORTED = 0x0501,
IPP_SERVER_ERROR_SERVICE_UNAVAILABLE = 0x0502,
IPP_SERVER_ERROR_VERSION_NOT_SUPPORTED = 0x0503,
IPP_SERVER_ERROR_DEVICE_ERROR = 0x0504,
IPP_SERVER_ERROR_TEMPORARY_ERROR = 0x0505,
IPP_SERVER_ERROR_NOT_ACCEPTING_JOBS = 0x0506,
IPP_SERVER_ERROR_BUSY = 0x0507,
IPP_SERVER_ERROR_JOB_CANCELED = 0x0508,
IPP_SERVER_ERROR_E = 0x05FF
};
enum IPP_TAG {
IPP_OPERATION_ATTRIBUTES_TAG = 0x01,
IPP_JOB_ATTRIBUTES_TAG = 0x02,
IPP_END_OF_ATTRIBUTES_TAG = 0x03,
IPP_PRINTER_ATTRIBUTES_TAG = 0x04,
IPP_UNSUPPORTED_ATTRIBUTES_TAG = 0x05,
IPP_UNSUPPORTED = 0x10,
IPP_UNKNOWN = 0x12,
IPP_NO_VALUE = 0x13,
IPP_INTEGER = 0x21,
IPP_BOOLEAN = 0x22,
IPP_ENUM = 0x23,
IPP_STRING = 0x30,
IPP_DATETIME = 0x31,
IPP_RESOLUTION = 0x32,
IPP_RANGE_OF_INTEGER = 0x33,
IPP_TEXT_WITH_LANGUAGE = 0x35,
IPP_NAME_WITH_LANGUAGE = 0x36,
IPP_TEXT_WITHOUT_LANGUAGE = 0x41,
IPP_NAME_WITHOUT_LANGUAGE = 0x42,
IPP_KEYWORD = 0x44,
IPP_URI = 0x45,
IPP_URISCHEME = 0x46,
IPP_CHARSET = 0x47,
IPP_NATURAL_LANGUAGE = 0x48,
IPP_MIME_MEDIA_TYPE = 0x49
};
enum IPP_RESOLUTION_UNITS {
IPP_DOTS_PER_INCH = 3,
IPP_DOTS_PER_CENTIMETER = 4
};
enum IPP_FINISHINGS {
IPP_NONE = 3,
IPP_STAPLE = 4,
IPP_PUNCH = 5,
IPP_COVER = 6,
IPP_BIND = 7
};
enum IPP_ORIENTATION_REQUESTED {
IPP_PORTRAIT = 3,
IPP_LANDSCAPE = 4,
IPP_REVERSE_LANDSCAPE = 5,
IPP_REVERSE_PORTRAIT = 6
};
enum IPP_PRINT_QUALITY {
IPP_DRAFT = 3,
IPP_NORMAL = 4,
IPP_HIGH = 5
};
enum IPP_JOB_STATE {
IPP_JOB_STATE_PENDING = 3,
IPP_JOB_STATE_PENDING_HELD = 4,
IPP_JOB_STATE_PROCESSING = 5,
IPP_JOB_STATE_PROCESSING_STOPPED= 6,
IPP_JOB_STATE_CANCELED = 7,
IPP_JOB_STATE_ABORTED = 8,
IPP_JOB_STATE_COMPLETED = 9
};
enum IPP_PRINTER_STATE {
IPP_PRINTER_STATEIDLE = 3,
IPP_PRINTER_STATEPROCESSING = 4,
IPP_PRINTER_STATESTOPPED = 5
};
class IppAttribute {
public:
IppAttribute(IPP_TAG);
virtual ~IppAttribute() {}
virtual int length() const;
virtual istream &input(istream &is);
virtual ostream &output(ostream &os) const;
virtual ostream &print(ostream &) const;
friend istream& operator >> (istream &is, IppAttribute &attr)
{
return attr.input(is);
}
friend ostream& operator << (ostream &os, const IppAttribute &attr)
{
return attr.output(os);
}
IPP_TAG tag;
};
class IppNamedAttribute : public IppAttribute {
public:
IppNamedAttribute(IPP_TAG t);
IppNamedAttribute(IPP_TAG t, const char *n);
virtual ~IppNamedAttribute() {}
virtual int length() const;
virtual istream &input(istream &is);
virtual ostream &output(ostream &os) const;
string name;
friend istream& operator >> (istream &is, IppNamedAttribute &attr)
{
return attr.input(is);
}
friend ostream& operator << (ostream &os, const IppNamedAttribute &attr)
{
return attr.output(os);
}
virtual ostream &print(ostream &) const;
};
class IppNoValueAttribute : public IppNamedAttribute {
public:
IppNoValueAttribute(IPP_TAG t);
IppNoValueAttribute(IPP_TAG t, const char *n);
virtual ~IppNoValueAttribute() {}
virtual int length() const;
virtual istream &input(istream &is);
virtual ostream &output(ostream &os) const;
virtual ostream &print(ostream &) const;
friend istream& operator >> (istream &is, IppNoValueAttribute &attr)
{
return attr.input(is);
}
friend ostream& operator << (ostream &os, const IppNoValueAttribute &attr)
{
return attr.output(os);
}
};
class IppBooleanAttribute : public IppNamedAttribute {
public:
IppBooleanAttribute(IPP_TAG t);
IppBooleanAttribute(IPP_TAG t, const char *n, bool f);
virtual ~IppBooleanAttribute() {}
virtual int length() const;
virtual istream &input(istream &is);
virtual ostream &output(ostream &os) const;
virtual ostream &print(ostream &) const;
friend istream& operator >> (istream &is, IppBooleanAttribute &attr)
{
return attr.input(is);
}
friend ostream& operator << (ostream &os, const IppBooleanAttribute &attr)
{
return attr.output(os);
}
bool value;
};
class IppIntegerAttribute : public IppNamedAttribute {
public:
IppIntegerAttribute(IPP_TAG t);
IppIntegerAttribute(IPP_TAG t, const char *n, int v);
virtual ~IppIntegerAttribute() {}
virtual int length() const;
virtual istream &input(istream &is);
virtual ostream &output(ostream &os) const;
virtual ostream &print(ostream &) const;
friend istream& operator >> (istream &is, IppIntegerAttribute &attr)
{
return attr.input(is);
}
friend ostream& operator << (ostream &os, const IppIntegerAttribute &attr)
{
return attr.output(os);
}
long value;
};
class DATETIME {
public:
DATETIME();
DATETIME(const DATETIME &);
DATETIME & operator = (const DATETIME &);
friend istream& operator >> (istream &is, DATETIME &attr);
friend ostream& operator << (ostream &os, const DATETIME &attr);
unsigned char datetime[11];
};
class IppDatetimeAttribute : public IppNamedAttribute {
public:
IppDatetimeAttribute(IPP_TAG t);
IppDatetimeAttribute(IPP_TAG t, const char *n, const DATETIME *dt);
virtual ~IppDatetimeAttribute() {}
virtual int length() const;
virtual istream &input(istream &is);
virtual ostream &output(ostream &os) const;
virtual ostream &print(ostream &) const;
friend istream& operator >> (istream &is, IppDatetimeAttribute &attr)
{
return attr.input(is);
}
friend ostream& operator << (ostream &os, const IppDatetimeAttribute &attr)
{
return attr.output(os);
}
DATETIME datetime;
};
class IppStringAttribute : public IppNamedAttribute {
public:
IppStringAttribute(IPP_TAG t);
IppStringAttribute(IPP_TAG t, const char *s, const char *s1);
virtual ~IppStringAttribute() {}
virtual int length() const;
virtual istream &input(istream &is);
virtual ostream &output(ostream &os) const;
virtual ostream &print(ostream &) const;
friend istream& operator >> (istream &is, IppStringAttribute &attr)
{
return attr.input(is);
}
friend ostream& operator << (ostream &os, const IppStringAttribute &attr)
{
return attr.output(os);
}
string text;
};
class IppDoubleStringAttribute : public IppNamedAttribute {
public:
IppDoubleStringAttribute(IPP_TAG t);
IppDoubleStringAttribute(IPP_TAG t, const char *n, const char *s1, const char *s2);
virtual ~IppDoubleStringAttribute() {}
virtual int length() const;
virtual istream &input(istream &is);
virtual ostream &output(ostream &os) const;
friend istream& operator >> (istream &is, IppDoubleStringAttribute &attr)
{
return attr.input(is);
}
friend ostream& operator << (ostream &os, const IppDoubleStringAttribute &attr)
{
return attr.output(os);
}
virtual ostream &print(ostream &) const;
string text1;
string text2;
};
class IppResolutionAttribute : public IppNamedAttribute {
public:
IppResolutionAttribute(IPP_TAG t);
IppResolutionAttribute(IPP_TAG t, const char *n, int, int, IPP_RESOLUTION_UNITS);
virtual ~IppResolutionAttribute() {}
virtual int length() const;
virtual istream &input(istream &is);
virtual ostream &output(ostream &os) const;
virtual ostream &print(ostream &) const;
friend istream& operator >> (istream &is, IppResolutionAttribute &attr)
{
return attr.input(is);
}
friend ostream& operator << (ostream &os, const IppResolutionAttribute &attr)
{
return attr.output(os);
}
int xres;
int yres;
IPP_RESOLUTION_UNITS resolution_units;
};
class IppRangeOfIntegerAttribute : public IppNamedAttribute {
public:
IppRangeOfIntegerAttribute(IPP_TAG t);
IppRangeOfIntegerAttribute(IPP_TAG t, const char *n, int, int);
virtual ~IppRangeOfIntegerAttribute() {}
virtual int length() const;
virtual istream &input(istream &is);
virtual ostream &output(ostream &os) const;
virtual ostream &print(ostream &) const;
friend istream& operator >> (istream &is, IppRangeOfIntegerAttribute &attr)
{
return attr.input(is);
}
friend ostream& operator << (ostream &os, const IppRangeOfIntegerAttribute &attr)
{
return attr.output(os);
}
long lower;
long upper;
};
class IppContent {
public:
IppContent();
~IppContent();
int length() const;
istream &input(istream &);
ostream &output(ostream &) const;
friend istream& operator >> (istream &is, IppContent &ic)
{
return ic.input(is);
}
friend ostream& operator << (ostream &os, const IppContent &ic)
{
return ic.output(os);
}
void setVersion(unsigned short);
unsigned short getVersion() const;
void setOperationId(IPP_OPERATION_ID);
IPP_OPERATION_ID getOperationId() const;
void setRequestId(unsigned long);
unsigned long getRequestId() const;
IPP_STATUS_CODE getStatusCode() const;
const char *getStatusMessage() const;
void setDelimiter(IPP_TAG tag);
void setInteger(const char *name, int value);
void setBoolean(const char *name, bool value);
void setString(const char *name, const char *value);
void setDateTime(const char *name, const DATETIME *dt);
void setResolution(const char *name, int x, int y, IPP_RESOLUTION_UNITS u);
void setRangeOfInteger(const char *name, int lower, int upper);
void setTextWithLanguage(const char *name, const char *s1, const char *s2);
void setNameWithLanguage(const char *name, const char *s1, const char *s2);
void setTextWithoutLanguage(const char *name, const char *value);
void setNameWithoutLanguage(const char *name, const char *value);
void setKeyword(const char *name, const char *value);
void setURI(const char *name, const char *value);
void setURIScheme(const char *name, const char *value);
void setCharset(const char *name, const char *value);
void setNaturalLanguage(const char *name, const char *value);
void setMimeMediaType(const char *name, const char *value);
void setRawData(const char *file, int size = -1);
void setRawData(istream &is, int size = -1);
ostream &print(ostream &) const;
bool operator !() const;
bool good() const;
bool fail() const;
private:
list<IppAttribute *> attrs;
unsigned short version;
unsigned short operation_id;
unsigned long request_id;
string file_path;
istream *is;
int size;
};
#endif