{
case HTTP_STATE_GET_SEND :
if ((!strncmp(con->uri, "/ppd/", 5) ||
- !strncmp(con->uri, "/printers/", 10)) &&
+ !strncmp(con->uri, "/printers/", 10) ||
+ !strncmp(con->uri, "/classes/", 9)) &&
!strcmp(con->uri + strlen(con->uri) - 4, ".ppd"))
{
/*
if (!strncmp(con->uri, "/ppd/", 5))
p = cupsdFindPrinter(con->uri + 5);
- else
+ else if (!strncmp(con->uri, "/printers/", 10))
p = cupsdFindPrinter(con->uri + 10);
+ else
+ {
+ p = cupsdFindClass(con->uri + 9);
+
+ if (p)
+ {
+ int i; /* Looping var */
+
+ for (i = 0; i < p->num_printers; i ++)
+ {
+ if (!(p->printers[i]->type & CUPS_PRINTER_CLASS))
+ {
+ char ppdname[1024];/* PPD filename */
+
+ snprintf(ppdname, sizeof(ppdname), "%s/ppd/%s.ppd",
+ ServerRoot, p->printers[i]->name);
+ if (!access(ppdname, 0))
+ {
+ p = p->printers[i];
+ break;
+ }
+ }
+ }
+
+ if (i >= p->num_printers)
+ p = NULL;
+ }
+ }
if (p)
{
else if (!strncmp(con->uri, "/printers/", 10))
p = cupsdFindPrinter(con->uri + 10);
else
- p = cupsdFindClass(con->uri + 9);
+ {
+ p = cupsdFindClass(con->uri + 9);
+
+ if (p)
+ {
+ int i; /* Looping var */
+
+ for (i = 0; i < p->num_printers; i ++)
+ {
+ if (!(p->printers[i]->type & CUPS_PRINTER_CLASS))
+ {
+ char ppdname[1024];/* PPD filename */
+
+ snprintf(ppdname, sizeof(ppdname), "%s/ppd/%s.ppd",
+ ServerRoot, p->printers[i]->name);
+ if (!access(ppdname, 0))
+ {
+ p = p->printers[i];
+ break;
+ }
+ }
+ }
+
+ if (i >= p->num_printers)
+ p = NULL;
+ }
+ }
if (p)
snprintf(con->uri, sizeof(con->uri), "/icons/%s.png", p->name);