355b4669e025ff377602b6fc7caaf30dbc218371jacobs/*
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * CDDL HEADER START
355b4669e025ff377602b6fc7caaf30dbc218371jacobs *
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * The contents of this file are subject to the terms of the
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * Common Development and Distribution License (the "License").
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * You may not use this file except in compliance with the License.
355b4669e025ff377602b6fc7caaf30dbc218371jacobs *
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * or http://www.opensolaris.org/os/licensing.
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * See the License for the specific language governing permissions
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * and limitations under the License.
355b4669e025ff377602b6fc7caaf30dbc218371jacobs *
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * When distributing Covered Code, include this CDDL HEADER in each
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * If applicable, add the following below this CDDL HEADER, with the
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * fields enclosed by brackets "[]" replaced with your own identifying
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * information: Portions Copyright [yyyy] [name of copyright owner]
355b4669e025ff377602b6fc7caaf30dbc218371jacobs *
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * CDDL HEADER END
355b4669e025ff377602b6fc7caaf30dbc218371jacobs */
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs/*
6b5764c36d253d178caa447fa2a6d7e0c7dfd6e6sonam gupta - Sun Microsystems - Bangalore India * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * Use is subject to license terms.
355b4669e025ff377602b6fc7caaf30dbc218371jacobs *
355b4669e025ff377602b6fc7caaf30dbc218371jacobs */
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs/* $Id: lpd-cancel.c 155 2006-04-26 02:34:54Z ktou $ */
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs#define __EXTENSIONS__ /* for strtok_r() */
355b4669e025ff377602b6fc7caaf30dbc218371jacobs#include <stdio.h>
355b4669e025ff377602b6fc7caaf30dbc218371jacobs#include <stdlib.h>
355b4669e025ff377602b6fc7caaf30dbc218371jacobs#include <unistd.h>
355b4669e025ff377602b6fc7caaf30dbc218371jacobs#include <string.h>
355b4669e025ff377602b6fc7caaf30dbc218371jacobs#include <papi_impl.h>
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapi_status_t
355b4669e025ff377602b6fc7caaf30dbc218371jacobslpd_cancel_job(service_t *svc, int id)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs{
355b4669e025ff377602b6fc7caaf30dbc218371jacobs papi_status_t status = PAPI_INTERNAL_ERROR;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs int fd;
752ec50eb29a9f48e3047116b6c8ceb8dedaefb3jacobs char *list[2];
355b4669e025ff377602b6fc7caaf30dbc218371jacobs char buf[128]; /* this should be overkill */
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if (svc == NULL)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (PAPI_BAD_ARGUMENT);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs snprintf(buf, sizeof (buf), "%d", id);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs list[0] = buf;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs list[1] = NULL;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
4bd2082ff2d009263265d7de938de336894b6009ceastha if ((fd = lpd_open(svc, 'c', list, 15)) < 0)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (PAPI_INTERNAL_ERROR);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs memset(buf, 0, sizeof (buf));
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if (fdgets(buf, sizeof (buf), fd) != NULL) {
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if (buf[0] == '\0')
355b4669e025ff377602b6fc7caaf30dbc218371jacobs status = PAPI_NOT_FOUND;
6b5764c36d253d178caa447fa2a6d7e0c7dfd6e6sonam gupta - Sun Microsystems - Bangalore India else if ((strstr(buf, "permission denied") != NULL) ||
6b5764c36d253d178caa447fa2a6d7e0c7dfd6e6sonam gupta - Sun Microsystems - Bangalore India (strstr(buf, "not-authorized") != NULL))
355b4669e025ff377602b6fc7caaf30dbc218371jacobs status = PAPI_NOT_AUTHORIZED;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs else if ((strstr(buf, "cancelled") != NULL) ||
6b5764c36d253d178caa447fa2a6d7e0c7dfd6e6sonam gupta - Sun Microsystems - Bangalore India (strstr(buf, "removed") != NULL))
355b4669e025ff377602b6fc7caaf30dbc218371jacobs status = PAPI_OK;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs } else
355b4669e025ff377602b6fc7caaf30dbc218371jacobs status = PAPI_NOT_FOUND;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs close(fd);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (status);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs}
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapi_status_t
355b4669e025ff377602b6fc7caaf30dbc218371jacobslpd_purge_jobs(service_t *svc, job_t ***jobs)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs{
355b4669e025ff377602b6fc7caaf30dbc218371jacobs papi_status_t status = PAPI_INTERNAL_ERROR;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs int fd;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs char *queue;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs char buf[256];
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if (svc == NULL)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (PAPI_BAD_ARGUMENT);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
4bd2082ff2d009263265d7de938de336894b6009ceastha if ((fd = lpd_open(svc, 'c', NULL, 15)) < 0)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (PAPI_INTERNAL_ERROR);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs queue = queue_name_from_uri(svc->uri);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs status = PAPI_OK;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs memset(buf, 0, sizeof (buf));
355b4669e025ff377602b6fc7caaf30dbc218371jacobs while (fdgets(buf, sizeof (buf), fd) != NULL) {
355b4669e025ff377602b6fc7caaf30dbc218371jacobs /* if we canceled it, add it to the list */
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if ((strstr(buf, "cancelled") != NULL) ||
355b4669e025ff377602b6fc7caaf30dbc218371jacobs (strstr(buf, "removed") != NULL)) {
355b4669e025ff377602b6fc7caaf30dbc218371jacobs job_t *job;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs papi_attribute_t **attributes = NULL;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs char *ptr, *iter = NULL;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs int id;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs ptr = strtok_r(buf, ":", &iter);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs papiAttributeListAddString(&attributes, PAPI_ATTR_EXCL,
6b5764c36d253d178caa447fa2a6d7e0c7dfd6e6sonam gupta - Sun Microsystems - Bangalore India "job-name", ptr);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs id = atoi(ptr);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs papiAttributeListAddInteger(&attributes, PAPI_ATTR_EXCL,
6b5764c36d253d178caa447fa2a6d7e0c7dfd6e6sonam gupta - Sun Microsystems - Bangalore India "job-id", id);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs papiAttributeListAddString(&attributes, PAPI_ATTR_EXCL,
6b5764c36d253d178caa447fa2a6d7e0c7dfd6e6sonam gupta - Sun Microsystems - Bangalore India "job-printer", queue);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if ((job = (job_t *)calloc(1, (sizeof (*job))))
6b5764c36d253d178caa447fa2a6d7e0c7dfd6e6sonam gupta - Sun Microsystems - Bangalore India != NULL) {
355b4669e025ff377602b6fc7caaf30dbc218371jacobs job->attributes = attributes;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs list_append(jobs, job);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs } else
355b4669e025ff377602b6fc7caaf30dbc218371jacobs papiAttributeListFree(attributes);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs } else if (strstr(buf, "permission denied") != NULL)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs status = PAPI_NOT_AUTHORIZED;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs }
355b4669e025ff377602b6fc7caaf30dbc218371jacobs close(fd);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (status);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs}