ТЕЛО ЗАПРОСА IPP ДЛЯ ОТПРАВКИ ДОКУМЕНТА IPP 2.0 [закрыто]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 ТЕЛО ЗАПРОСА IPP ДЛЯ ОТПРАВКИ ДОКУМЕНТА IPP 2.0 [закрыто]

Сообщение Anonymous »


Глядя на этот код:

// Преобразуем TCHAR* в std::wstring std::wstring w_tcFileName(m_tcFileName); // Преобразуем std::wstring в std::string std::string fileName(w_tcFileName.begin(), w_tcFileName.end()); // Читаем файл для печати std::ifstream fileStream(pClientSocketContextEx->get_data_file(), std::ios::binary); std::vector fileData((std::istreambuf_iterator(fileStream)), std::istreambuf_iterator()); int requestId = pClientSocketContextEx->get_request_id(); // Вы можете использовать любое целочисленное значение // Преобразуем целое число в байты (при условии, что целое число 32-битное) std::vector requestIdBytes; requestIdBytes.push_back((requestId >> 24) & 0xFF); // Самый старший байт requestIdBytes.push_back((requestId >> 16) & 0xFF); requestIdBytes.push_back((requestId >> 8) и 0xFF); requestIdBytes.push_back (requestId и 0xFF); // Младший значащий байт // Версия IPP и идентификатор операции std::vector ippRequestHeader = { 0x01, 0x01, 0x00, 0x06, // Версия (1.1) и идентификатор операции (0x0006 для отправки документа) static_cast((requestId >> 24) и 0xFF), static_cast((requestId >> 16) и 0xFF), static_cast((requestId >> 8) и 0xFF), static_cast( requestId & 0xFF) // Байты идентификатора запроса }; std::string ippRequestBody; // Добавляем дополнительные атрибуты IPP явно, следуя стандартному порядку // набор атрибутов-кодировки (кодировка) = utf-8 std::string атрибутыCharset = "набор атрибутов-кодировки"; std::string атрибутыCharsetVal = "utf-8"; ippRequestBody += { 0x01, 0x47, static_cast(attributesCharset.size() >> 8), static_cast(attributesCharset.size() и 0xFF) }; ippRequestBody += атрибутыCharset; ippRequestBody += { static_cast(attributesCharsetVal.size() >> 8), static_cast(attributesCharsetVal.size() и 0xFF) }; ippRequestBody += атрибутыCharsetVal; // атрибуты-естественный-язык (naturalLanguage) = en std::string атрибутыNaturalLanguage = "атрибуты-естественный-язык"; std::string атрибутыNaturalLanguageVal = "en"; ippRequestBody += { 0x48, static_cast(attributesNaturalLanguage.size() >> 8), static_cast(attributesNaturalLanguage.size() и 0xFF) }; ippRequestBody += атрибутыNaturalLanguage; ippRequestBody += { static_cast(attributesNaturalLanguageVal.size() >> 8), static_cast(attributesNaturalLanguageVal.size() и 0xFF) }; ippRequestBody += атрибутыNaturalLanguageVal; // принтер-uri (uri) = std::string printUri = "принтер-uri"; std::string printUriVal = "ipp://" + хост + "/ipp/print"; ippRequestBody += { 0x45, static_cast(printerUri.size() >> 8), static_cast(printerUri.size() и 0xFF) }; ippRequestBody += PrinterUri; ippRequestBody += { static_cast(printerUriVal.size() >> 8), static_cast(printerUriVal.size() и 0xFF) }; ippRequestBody += printUriVal; // Определить атрибут job-id и его значение (при условии, что оно целое число) std::string jobId = "идентификатор задания"; int jobIdVal = static_cast(jobID); // Заменяем фактическим идентификатором задания // Вычисляем размер значения атрибута job-id size_t jobIdSize = sizeof (jobIdVal); // Добавляем тег, длину и значение атрибута job-id в ippRequestBody ippRequestBody += { 0x21, 0x02, // Тег атрибута для идентификатора задания (целое число) static_cast(jobIdSize >> 8), static_cast(jobIdSize & 0xFF) // Длина значения атрибута }; // Добавляем имя атрибута ippRequestBody += идентификатор задания; // Добавляем значение атрибута (идентификатор задания) в сетевом порядке байтов (обратный порядок байтов) char jobIdBytes [sizeof (jobIdVal)]; jobIdBytes[0] = static_cast((jobIdVal >> 24) & 0xFF); jobIdBytes[1] = static_cast((jobIdVal >> 16) & 0xFF); jobIdBytes[2] = static_cast((jobIdVal >> 8) & 0xFF); jobIdBytes[3] = static_cast(jobIdVal & 0xFF); ippRequestBody += jobIdBytes; // имя-запрашивающего-пользователя (nameWithoutLanguage) = Processfusion std::string requestingUserName = "имя-запрашивающего-пользователя"; std::string requestingUserNameVal = "TEST"; ippRequestBody += { 0x42, static_cast(requestingUserName.size() >> 8), static_cast(requestingUserName.size() и 0xFF) }; ippRequestBody += RequestingUserName; ippRequestBody += { static_cast(requestingUserNameVal.size() >> 8), static_cast(requestingUserNameVal.size() & 0xFF) }; ippRequestBody += RequestingUserNameVal; // формат документа (mimeMediaType) = application/pdf std::string documentFormat = "формат-документа"; std::string documentFormatVal = "application/pdf"; ippRequestBody += { 0x04, 0x40, static_cast(documentFormat.size() >> 8), static_cast(documentFormat.size() и 0xFF) }; ippRequestBody += DocumentFormat; ippRequestBody += { 0x04, 0x40, static_cast(documentFormatVal.size() >> 8), static_cast(documentFormatVal.size() и 0xFF) }; ippRequestBody += documentFormatVal; // последний документ (логическое значение) = true std::string LastDocument = "Последний документ"; Bool LastDocumentVal = Истина; // Устанавливаем значение true для логического значения ippRequestBody += { 0x22, 0x01, static_cast(lastDocument.size() >> 8), static_cast(lastDocument.size() и 0xFF) }; ippRequestBody += LastDocument; ippRequestBody += { static_cast(lastDocumentVal? 1: 0), 0x00 }; // Вычисляем длину данных файла (при условии, что «fileData» содержит ваши данные PDF) int dataLength = static_cast(fileData.size()); // Добавляем атрибут данных (с тегом data) и заполнитель для длины (4 байта) ippRequestBody += { 0x04, 0x00, 0x00, 0x00, 0x00 // тег данных (4 байта) + заполнитель для длины (4 байта) }; // Сохраняем позицию, в которую будет вставлена ​​длина данных std::size_t dataLengthPosition = ippRequestBody.size(); // Добавляем фактические данные файла ippRequestBody.insert(ippRequestBody.end(), fileData.begin(), fileData.end()); // Вычисляем фактическую длину данных и обновляем ее в теле запроса dataLength = static_cast(fileData.size()); ippRequestBody[dataLengthPosition + 1] = (dataLength >> 24) & 0xFF; ippRequestBody[dataLengthPosition + 2] = (dataLength >> 16) & 0xFF; ippRequestBody[dataLengthPosition + 3] = (dataLength >> 8) & 0xFF; ippRequestBody [dataLengthPosition + 4] = dataLength & 0xFF; // Добавляем конец тега атрибутов ippRequestBody += { 0x03 // тег завершения }; ...Я не знаю, почему я не получил успешного ответа. Единственными виновниками могут быть; реализация идентификатора задания, формата документа, последнего документа или фактических данных из файла.

Помогите мне это исправить.

Мне не совсем понятно, почему мой код неправильно объединяет запрос?
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Если я отправляю DLL, использующую библиотеку IPP, должен ли я также отправлять DLL IPP?
    Anonymous » » в форуме C++
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Печать с использованием IPP без драйверов (IPP Client)
    Anonymous » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Пользовательский OncePerrequestFilter читает пустое тело запроса - почему тело уже потребляется?
    Anonymous » » в форуме JAVA
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Как изменить тело электронного письма на тело SMS в WordPress?
    Anonymous » » в форуме Php
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Ошибка [ERR_FR_MAX_BODY_LENGTH_EXCEEDED]: тело запроса превышает предел maxBodyLength при отправке запроса в openai apu.
    Anonymous » » в форуме Javascript
    0 Ответы
    72 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»