mirror of the now-defunct rocklinux.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

220 lines
8.5 KiB

  1. This is a hotfix for KDE 3.5.5 with CUPS 1.2.x.
  2. Copied from http://bugs.kde.org/show_bug.cgi?id=115891:
  3. Rework & unify IPP URI generation. Support UNIX socket properly patch 2006-11-01 18:09:53
  4. --- kdelibs-3.5.5a.dfsg.1.orig/kdeprint/cups/cupsinfos.cpp 2006-10-26 19:31:11.000000000 +0300
  5. +++ kdelibs-3.5.5a.dfsg.1/kdeprint/cups/cupsinfos.cpp 2006-10-26 21:29:07.000000000 +0300
  6. @@ -21,6 +21,7 @@
  7. #include "kmfactory.h"
  8. #include "kmtimer.h"
  9. #include "messagewindow.h"
  10. +#include "ipprequest.h"
  11. #include <kio/passdlg.h>
  12. #include <kio/authinfo.h>
  13. @@ -76,6 +77,11 @@
  14. return host_;
  15. }
  16. +QString CupsInfos::ippAssembleURI(const QString& resource) const
  17. +{
  18. + return IppRequest::assembleURI(host(), port(), resource);
  19. +}
  20. +
  21. void CupsInfos::setHost(const QString& s)
  22. {
  23. host_ = s;
  24. --- kdelibs-3.5.5a.dfsg.1.orig/kdeprint/cups/cupsinfos.h 2006-10-26 19:31:11.000000000 +0300
  25. +++ kdelibs-3.5.5a.dfsg.1/kdeprint/cups/cupsinfos.h 2006-10-26 21:26:26.000000000 +0300
  26. @@ -34,6 +34,7 @@
  27. const QString& host() const;
  28. QString hostaddr() const;
  29. int port() const;
  30. + QString ippAssembleURI(const QString& resource) const;
  31. const QString& login() const;
  32. const QString& password() const;
  33. const QString& realLogin() const;
  34. --- kdelibs-3.5.5a.dfsg.1.orig/kdeprint/cups/ipprequest.cpp 2006-10-26 19:31:11.000000000 +0300
  35. +++ kdelibs-3.5.5a.dfsg.1/kdeprint/cups/ipprequest.cpp 2006-10-26 21:33:09.000000000 +0300
  36. @@ -529,4 +529,48 @@
  37. attr = attr->next;
  38. }
  39. #endif
  40. +
  41. +
  42. }
  43. +
  44. +
  45. +QString IppRequest::assembleURI(const QString& host, int port, const QString& resource)
  46. +{
  47. + const char* hostname;
  48. +
  49. + // Replace UNIX socket address with "localhost". ipp URI specification
  50. + // does not allow UNIX socket addresses in the host portion
  51. + if (host[0] == '/' || host.isEmpty()) {
  52. + hostname = "localhost";
  53. + port = 0;
  54. + } else {
  55. + hostname = host.local8Bit();
  56. + }
  57. +
  58. + if (port < 0)
  59. + return QString::null;
  60. +
  61. +#if CUPS_VERSION_MAJOR == 1 && CUPS_VERSION_MINOR >= 2
  62. + QCString uri(HTTP_MAX_URI);
  63. +
  64. + // Use URI assembling function provided by CUPS
  65. + if (httpAssembleURI(HTTP_URI_CODING_ALL, uri.data(), uri.size(),
  66. + "ipp", NULL, hostname, port, resource.local8Bit()) == HTTP_URI_OK)
  67. + return QString(uri);
  68. + else
  69. + return QString::null;
  70. +
  71. +#else
  72. + // Use our own URI assembling function
  73. + if (port > 0)
  74. + return QString("ipp://%1:%2%3")
  75. + .arg(hostname)
  76. + .arg(port)
  77. + .arg(KURL::encode_string(resource));
  78. + else
  79. + return QString("ipp://%1%2")
  80. + .arg(hostname)
  81. + .arg(KURL::encode_string(resource));
  82. +#endif
  83. +}
  84. +
  85. --- kdelibs-3.5.5a.dfsg.1.orig/kdeprint/cups/ipprequest.h 2006-10-26 19:31:11.000000000 +0300
  86. +++ kdelibs-3.5.5a.dfsg.1/kdeprint/cups/ipprequest.h 2006-10-26 21:24:41.000000000 +0300
  87. @@ -86,6 +86,9 @@
  88. // debug function
  89. void dump(int state);
  90. + // URI assembling function [static]
  91. + static QString assembleURI(const QString& host, int port, const QString& resource);
  92. +
  93. protected:
  94. void addString_p(int group, int type, const QString& name, const QString& value);
  95. void addStringList_p(int group, int type, const QString& name, const QStringList& values);
  96. --- kdelibs-3.5.5a.dfsg.1.orig/kdeprint/cups/kmcupsjobmanager.cpp 2006-10-26 21:45:23.000000000 +0300
  97. +++ kdelibs-3.5.5a.dfsg.1/kdeprint/cups/kmcupsjobmanager.cpp 2006-10-27 01:33:12.000000000 +0300
  98. @@ -92,7 +92,7 @@
  99. case KMJob::Move:
  100. if (argstr.isEmpty()) return false;
  101. req.setOperation(CUPS_MOVE_JOB);
  102. - uri = QString::fromLatin1("ipp://%1:%2/printers/%3").arg(CupsInfos::self()->host()).arg(CupsInfos::self()->port()).arg(argstr);
  103. + uri = CupsInfos::self()->ippAssembleURI(QString("/printers/%1").arg(argstr));
  104. req.addURI(IPP_TAG_OPERATION, "job-printer-uri", uri);
  105. break;
  106. default:
  107. @@ -109,7 +109,6 @@
  108. bool KMCupsJobManager::listJobs(const QString& prname, KMJobManager::JobType type, int limit)
  109. {
  110. IppRequest req;
  111. - QString uri("ipp://%1:%2/%3/%4");
  112. QStringList keys;
  113. CupsInfos *infos = CupsInfos::self();
  114. @@ -143,7 +142,8 @@
  115. */
  116. }
  117. else
  118. - req.addURI(IPP_TAG_OPERATION, "printer-uri", uri.arg(infos->host()).arg(infos->port()).arg(((mp&&mp->isClass())?"classes":"printers")).arg(prname));
  119. + req.addURI(IPP_TAG_OPERATION, "printer-uri",
  120. + infos->ippAssembleURI(QString("/%1/%2").arg(((mp&&mp->isClass())?"classes":"printers")).arg(prname)));
  121. // other attributes
  122. req.addKeyword(IPP_TAG_OPERATION, "requested-attributes", keys);
  123. --- kdelibs-3.5.5a.dfsg.1.orig/kdeprint/cups/kmcupsmanager.cpp 2006-10-26 19:31:11.000000000 +0300
  124. +++ kdelibs-3.5.5a.dfsg.1/kdeprint/cups/kmcupsmanager.cpp 2006-10-26 21:31:12.000000000 +0300
  125. @@ -138,7 +138,7 @@
  126. req.setOperation(CUPS_ADD_CLASS);
  127. QStringList members = p->members(), uris;
  128. QString s;
  129. - s = QString::fromLocal8Bit("ipp://%1/printers/").arg(CupsInfos::self()->hostaddr());
  130. + s = CupsInfos::self()->ippAssembleURI("/printers/");
  131. for (QStringList::ConstIterator it=members.begin(); it!=members.end(); ++it)
  132. uris.append(s+(*it));
  133. req.addURI(IPP_TAG_PRINTER,"member-uris",uris);
  134. @@ -1024,7 +1024,7 @@
  135. if (use && !p->uri().isEmpty())
  136. uri = p->uri().prettyURL();
  137. else
  138. - uri = QString("ipp://%1/%3/%2").arg(CupsInfos::self()->hostaddr()).arg(p->printerName()).arg((p->isClass(false) ? "classes" : "printers"));
  139. + uri = CupsInfos::self()->ippAssembleURI(QString("/%2/%1").arg(p->printerName()).arg((p->isClass(false) ? "classes" : "printers")));
  140. return uri;
  141. }
  142. --- kdelibs-3.5.5a.dfsg.1.orig/kdeprint/cups/kmcupsuimanager.cpp 2006-10-26 19:31:11.000000000 +0300
  143. +++ kdelibs-3.5.5a.dfsg.1/kdeprint/cups/kmcupsuimanager.cpp 2006-10-26 21:34:02.000000000 +0300
  144. @@ -135,7 +135,7 @@
  145. QString uri;
  146. req.setOperation(CUPS_GET_DEVICES);
  147. - uri = QString::fromLocal8Bit("ipp://%1/printers/").arg(CupsInfos::self()->hostaddr());
  148. + uri = CupsInfos::self()->ippAssembleURI("/printers/");
  149. req.addURI(IPP_TAG_OPERATION,"printer-uri",uri);
  150. if (req.doRequest("/"))
  151. --- kdelibs-3.5.5a.dfsg.1.orig/kdeprint/cups/kmwfax.cpp 2006-10-26 19:31:11.000000000 +0300
  152. +++ kdelibs-3.5.5a.dfsg.1/kdeprint/cups/kmwfax.cpp 2006-10-26 21:34:54.000000000 +0300
  153. @@ -48,7 +48,7 @@
  154. // initialize
  155. IppRequest req;
  156. req.setOperation(CUPS_GET_DEVICES);
  157. - QString uri = QString::fromLatin1("ipp://%1:%2/printers/").arg(CupsInfos::self()->host()).arg(CupsInfos::self()->port());
  158. + QString uri = CupsInfos::self()->ippAssembleURI("/printers/");
  159. req.addURI(IPP_TAG_OPERATION,"printer-uri",uri);
  160. if (req.doRequest("/"))
  161. {
  162. --- kdelibs-3.5.5a.dfsg.1.orig/kdeprint/cups/kmwippprinter.cpp 2006-10-26 19:31:11.000000000 +0300
  163. +++ kdelibs-3.5.5a.dfsg.1/kdeprint/cups/kmwippprinter.cpp 2006-10-26 21:41:20.000000000 +0300
  164. @@ -157,7 +157,7 @@
  165. req.setOperation(IPP_GET_PRINTER_ATTRIBUTES);
  166. req.setHost(item->text(1));
  167. req.setPort(item->text(2).toInt());
  168. - uri = QString::fromLatin1("ipp://%1:%2/ipp").arg(item->text(1)).arg(item->text(2));
  169. + uri = IppRequest::assembleURI(item->text(1), item->text(2).toInt(), "/ipp");
  170. req.addURI(IPP_TAG_OPERATION,"printer-uri",uri);
  171. keys.append("printer-name");
  172. keys.append("printer-state");
  173. @@ -176,7 +176,7 @@
  174. if (req.uri("printer-uri-supported",value))
  175. {
  176. if (value[0] == '/')
  177. - value.prepend(QString::fromLatin1("ipp://%1:%2").arg(item->text(1)).arg(item->text(2)));
  178. + value = IppRequest::assembleURI(item->text(1), item->text(2).toInt(), value);
  179. m_uri->setText(value);
  180. }
  181. if (req.text("printer-make-and-model",value) && !value.isEmpty()) txt.append(i18n("<b>Model</b>: %1<br>").arg(value));
  182. @@ -203,7 +203,7 @@
  183. void KMWIppPrinter::slotIppReport()
  184. {
  185. IppRequest req;
  186. - QString uri("ipp://%1:%2/ipp");
  187. + QString uri;
  188. QListViewItem *item = m_list->currentItem();
  189. if (item)
  190. @@ -211,7 +211,7 @@
  191. req.setOperation(IPP_GET_PRINTER_ATTRIBUTES);
  192. req.setHost(item->text(1));
  193. req.setPort(item->text(2).toInt());
  194. - uri = uri.arg(item->text(1)).arg(item->text(2));
  195. + uri = IppRequest::assembleURI(item->text(1), item->text(2).toInt(), "/ipp");
  196. req.addURI(IPP_TAG_OPERATION, "printer-uri", uri);
  197. if (req.doRequest("/ipp/"))
  198. {
  199. --- kdelibs-3.5.5a.dfsg.1.orig/kdeprint/cups/kmwippselect.cpp 2006-10-26 19:31:11.000000000 +0300
  200. +++ kdelibs-3.5.5a.dfsg.1/kdeprint/cups/kmwippselect.cpp 2006-10-26 21:32:34.000000000 +0300
  201. @@ -75,7 +75,7 @@
  202. IppRequest req;
  203. QString uri;
  204. req.setOperation(CUPS_GET_PRINTERS);
  205. - uri = QString::fromLatin1("ipp://%1:%2/printers/").arg(url.host()).arg(url.port());
  206. + uri = IppRequest::assembleURI(url.host(), url.port(), "/printers/");
  207. req.addURI(IPP_TAG_OPERATION,"printer-uri",uri);
  208. req.addKeyword(IPP_TAG_OPERATION,"requested-attributes",QString::fromLatin1("printer-name"));
  209. if (req.doRequest("/printers/"))