How to attach a different ppd toexisting printer using CUPS API

Azuri azuri.shah at fmr.com
Fri Dec 9 11:43:34 PST 2011


I am using following code

    ipp_t		*request;		/* IPP Request */
    char        uri_dev[HTTP_MAX_URI];
    http_t *http;
    http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption());
    request = ippNewRequest(CUPS_ADD_MODIFY_PRINTER);
    ipp_t *response_ppd;

     httpAssembleURIf(HTTP_URI_CODING_ALL, uri_dev, sizeof(uri_dev), "ipp", NULL,
     "localhost", 0, "/printers/%s", printerDefaultName);
     ipp_status_t status;
     ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "printer-name", NULL, printerDefaultName);
     ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "device-uri", NULL, uri_dev);
     ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "ppd-name", NULL, model);
     ippAddBoolean(request, IPP_TAG_PRINTER,"printer-is-accepting-jobs", 1);
     ippAddInteger(request, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", IPP_PRINTER_IDLE);
     /*ippDelete(cupsDoRequest(http, request, "/admin"));
     status = cupsLastError();

     if (status > IPP_OK_CONFLICT)
     {
     _cupsLangPrintf(stderr, "lpadmin: %s\n", cupsLastErrorString());
     }
     return;*/

    response_ppd = cupsDoFileRequest(http, request, "/admin/", model);


#if 0

    if ((response_ppd = cupsDoRequest(http, request_ppd, "/admin/")) == NULL)
    {
        //_cupsLangPrintf(stderr, "lpadmin: %s\n", cupsLastErrorString());
        NSAlert *alert = [[[NSAlert alloc]init]autorelease];
        [alert setMessageText:[NSString stringWithFormat:@"Error occured while attaching ppd. Printer could not be added."]];
        [alert runModal];

        return;
    }
    else if (response_ppd->request.status.status_code > IPP_OK_CONFLICT)
    {
        //_cupsLangPrintf(stderr, "lpadmin: %s\n", cupsLastErrorString());
        NSAlert *alert = [[[NSAlert alloc]init]autorelease];
        [alert setMessageText:[NSString stringWithFormat:@"Error occured while attaching ppd. Printer could not be added."]];
        [alert runModal];

        ippDelete(response_ppd);

        return;
    }
    else
    {
        ippDelete(response_ppd);
    }
#endif


    if (http)
    {
        httpClose(http);
    }






> Not surprisingly, the same code you use to add the printer with a generic PPD file will work to add a different generic PPD file - the CUPS-Add-Modify-Printer operation will add a new printer or modify an existing printer...
>
> On Dec 9, 2011, at 11:23 AM, Azuri wrote:
>
> > Say I have added printer using cups API and attached generic ppd file.
> > Now I want to attach generic2.ppd file instead of generic.ppd file for the same printer using CUPS. how do i do that. Can you please share the code snippet.
> >
> > Thanks,
> > Azuri
> > _______________________________________________
> > cups-dev mailing list
> > cups-dev at easysw.com
> > http://lists.easysw.com/mailman/listinfo/cups-dev
>
> _________________________________________________________
> Michael Sweet, Senior Printing System Engineer, PWG Chair
>





More information about the cups mailing list