Blame modules/printbackends/cups/gtkcupsutils.h

Packit 98cdb6
/* gtkcupsutils.h 
Packit 98cdb6
 * Copyright (C) 2006 John (J5) Palmieri <johnp@redhat.com>
Packit 98cdb6
 *
Packit 98cdb6
 * This library is free software; you can redistribute it and/or
Packit 98cdb6
 * modify it under the terms of the GNU Lesser General Public
Packit 98cdb6
 * License as published by the Free Software Foundation; either
Packit 98cdb6
 * version 2 of the License, or (at your option) any later version.
Packit 98cdb6
 *
Packit 98cdb6
 * This library is distributed in the hope that it will be useful,
Packit 98cdb6
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 98cdb6
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
Packit 98cdb6
 * Lesser General Public License for more details.
Packit 98cdb6
 *
Packit 98cdb6
 * You should have received a copy of the GNU Lesser General Public
Packit 98cdb6
 * License along with this library; if not, write to the
Packit 98cdb6
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit 98cdb6
 * Boston, MA 02111-1307, USA.
Packit 98cdb6
 */
Packit 98cdb6
 
Packit 98cdb6
#ifndef __GTK_CUPS_UTILS_H__
Packit 98cdb6
#define __GTK_CUPS_UTILS_H__
Packit 98cdb6
Packit 98cdb6
#include <glib.h>
Packit 98cdb6
#include <cups/cups.h>
Packit 98cdb6
#include <cups/language.h>
Packit 98cdb6
#include <cups/http.h>
Packit 98cdb6
#include <cups/ipp.h>
Packit 98cdb6
Packit 98cdb6
G_BEGIN_DECLS
Packit 98cdb6
Packit 98cdb6
typedef struct _GtkCupsRequest        GtkCupsRequest;
Packit 98cdb6
typedef struct _GtkCupsResult         GtkCupsResult;
Packit 98cdb6
typedef struct _GtkCupsConnectionTest GtkCupsConnectionTest;
Packit 98cdb6
Packit 98cdb6
typedef enum
Packit 98cdb6
{
Packit 98cdb6
  GTK_CUPS_ERROR_HTTP,
Packit 98cdb6
  GTK_CUPS_ERROR_IPP,
Packit 98cdb6
  GTK_CUPS_ERROR_IO,
Packit 98cdb6
  GTK_CUPS_ERROR_AUTH,
Packit 98cdb6
  GTK_CUPS_ERROR_GENERAL
Packit 98cdb6
} GtkCupsErrorType;
Packit 98cdb6
Packit 98cdb6
typedef enum
Packit 98cdb6
{
Packit 98cdb6
  GTK_CUPS_POST,
Packit 98cdb6
  GTK_CUPS_GET
Packit 98cdb6
} GtkCupsRequestType;
Packit 98cdb6
Packit 98cdb6
Packit 98cdb6
/** 
Packit 98cdb6
 * Direction we should be polling the http socket on.
Packit 98cdb6
 * We are either reading or writting at each state.
Packit 98cdb6
 * This makes it easy for mainloops to connect to poll.
Packit 98cdb6
 */
Packit 98cdb6
typedef enum
Packit 98cdb6
{
Packit 98cdb6
  GTK_CUPS_HTTP_IDLE,
Packit 98cdb6
  GTK_CUPS_HTTP_READ,
Packit 98cdb6
  GTK_CUPS_HTTP_WRITE
Packit 98cdb6
} GtkCupsPollState;
Packit 98cdb6
Packit 98cdb6
typedef enum
Packit 98cdb6
{
Packit 98cdb6
  GTK_CUPS_CONNECTION_AVAILABLE,
Packit 98cdb6
  GTK_CUPS_CONNECTION_NOT_AVAILABLE,
Packit 98cdb6
  GTK_CUPS_CONNECTION_IN_PROGRESS  
Packit 98cdb6
} GtkCupsConnectionState;
Packit 98cdb6
Packit 98cdb6
typedef enum
Packit 98cdb6
{
Packit 98cdb6
  GTK_CUPS_PASSWORD_NONE,
Packit 98cdb6
  GTK_CUPS_PASSWORD_REQUESTED,
Packit 98cdb6
  GTK_CUPS_PASSWORD_HAS,
Packit 98cdb6
  GTK_CUPS_PASSWORD_APPLIED,
Packit 98cdb6
  GTK_CUPS_PASSWORD_NOT_VALID
Packit 98cdb6
} GtkCupsPasswordState;
Packit 98cdb6
Packit 98cdb6
struct _GtkCupsRequest 
Packit 98cdb6
{
Packit 98cdb6
  GtkCupsRequestType type;
Packit 98cdb6
Packit 98cdb6
  http_t *http;
Packit 98cdb6
  http_status_t last_status;
Packit 98cdb6
  ipp_t *ipp_request;
Packit 98cdb6
Packit 98cdb6
  gchar *server;
Packit 98cdb6
  gchar *resource;
Packit 98cdb6
  GIOChannel *data_io;
Packit 98cdb6
  gint attempts;
Packit 98cdb6
Packit 98cdb6
  GtkCupsResult *result;
Packit 98cdb6
Packit 98cdb6
  gint state;
Packit 98cdb6
  GtkCupsPollState poll_state;
Packit 98cdb6
  guint64 bytes_received;
Packit 98cdb6
Packit 98cdb6
  gchar *password;
Packit 98cdb6
  gchar *username;
Packit 98cdb6
Packit 98cdb6
  gint own_http : 1;
Packit 98cdb6
  gint need_password : 1;
Packit 98cdb6
  gint need_auth_info : 1;
Packit 98cdb6
  gchar **auth_info_required;
Packit 98cdb6
  gchar **auth_info;
Packit 98cdb6
  GtkCupsPasswordState password_state;
Packit 98cdb6
};
Packit 98cdb6
Packit 98cdb6
struct _GtkCupsConnectionTest
Packit 98cdb6
{
Packit 98cdb6
#ifdef HAVE_CUPS_API_1_2
Packit 98cdb6
  GtkCupsConnectionState at_init;
Packit 98cdb6
  http_addrlist_t       *addrlist;
Packit 98cdb6
  http_addrlist_t       *current_addr;
Packit 98cdb6
  http_addrlist_t       *last_wrong_addr;
Packit 98cdb6
  gint                   socket;
Packit 98cdb6
#endif
Packit 98cdb6
};
Packit 98cdb6
Packit 98cdb6
#define GTK_CUPS_REQUEST_START 0
Packit 98cdb6
#define GTK_CUPS_REQUEST_DONE 500
Packit 98cdb6
Packit 98cdb6
/* POST states */
Packit 98cdb6
enum 
Packit 98cdb6
{
Packit 98cdb6
  GTK_CUPS_POST_CONNECT = GTK_CUPS_REQUEST_START,
Packit 98cdb6
  GTK_CUPS_POST_SEND,
Packit 98cdb6
  GTK_CUPS_POST_WRITE_REQUEST,
Packit 98cdb6
  GTK_CUPS_POST_WRITE_DATA,
Packit 98cdb6
  GTK_CUPS_POST_CHECK,
Packit 98cdb6
  GTK_CUPS_POST_AUTH,
Packit 98cdb6
  GTK_CUPS_POST_READ_RESPONSE,
Packit 98cdb6
  GTK_CUPS_POST_DONE = GTK_CUPS_REQUEST_DONE
Packit 98cdb6
};
Packit 98cdb6
Packit 98cdb6
/* GET states */
Packit 98cdb6
enum
Packit 98cdb6
{
Packit 98cdb6
  GTK_CUPS_GET_CONNECT = GTK_CUPS_REQUEST_START,
Packit 98cdb6
  GTK_CUPS_GET_SEND,
Packit 98cdb6
  GTK_CUPS_GET_CHECK,
Packit 98cdb6
  GTK_CUPS_GET_AUTH,
Packit 98cdb6
  GTK_CUPS_GET_READ_DATA,
Packit 98cdb6
  GTK_CUPS_GET_DONE = GTK_CUPS_REQUEST_DONE
Packit 98cdb6
};
Packit 98cdb6
Packit 98cdb6
GtkCupsRequest        * gtk_cups_request_new_with_username (http_t             *connection,
Packit 98cdb6
							    GtkCupsRequestType  req_type,
Packit 98cdb6
							    gint                operation_id,
Packit 98cdb6
							    GIOChannel         *data_io,
Packit 98cdb6
							    const char         *server,
Packit 98cdb6
							    const char         *resource,
Packit 98cdb6
							    const char         *username);
Packit 98cdb6
GtkCupsRequest        * gtk_cups_request_new               (http_t             *connection,
Packit 98cdb6
							    GtkCupsRequestType  req_type,
Packit 98cdb6
							    gint                operation_id,
Packit 98cdb6
							    GIOChannel         *data_io,
Packit 98cdb6
							    const char         *server,
Packit 98cdb6
							    const char         *resource);
Packit 98cdb6
void                    gtk_cups_request_ipp_add_string    (GtkCupsRequest     *request,
Packit 98cdb6
							    ipp_tag_t           group,
Packit 98cdb6
							    ipp_tag_t           tag,
Packit 98cdb6
							    const char         *name,
Packit 98cdb6
							    const char         *charset,
Packit 98cdb6
							    const char         *value);
Packit 98cdb6
void                    gtk_cups_request_ipp_add_strings   (GtkCupsRequest     *request,
Packit 98cdb6
							    ipp_tag_t           group,
Packit 98cdb6
							    ipp_tag_t           tag,
Packit 98cdb6
							    const char         *name,
Packit 98cdb6
							    int                 num_values,
Packit 98cdb6
							    const char         *charset,
Packit 98cdb6
							    const char * const *values);
Packit 98cdb6
const char            * gtk_cups_request_ipp_get_string    (GtkCupsRequest     *request,
Packit 98cdb6
							    ipp_tag_t           tag,
Packit 98cdb6
							    const char         *name);
Packit 98cdb6
gboolean                gtk_cups_request_read_write        (GtkCupsRequest     *request,
Packit 98cdb6
                                                            gboolean            connect_only);
Packit 98cdb6
GtkCupsPollState        gtk_cups_request_get_poll_state    (GtkCupsRequest     *request);
Packit 98cdb6
void                    gtk_cups_request_free              (GtkCupsRequest     *request);
Packit 98cdb6
GtkCupsResult         * gtk_cups_request_get_result        (GtkCupsRequest     *request);
Packit 98cdb6
gboolean                gtk_cups_request_is_done           (GtkCupsRequest     *request);
Packit 98cdb6
void                    gtk_cups_request_encode_option     (GtkCupsRequest     *request,
Packit 98cdb6
						            const gchar        *option,
Packit 98cdb6
							    const gchar        *value);
Packit 98cdb6
void                    gtk_cups_request_set_ipp_version   (GtkCupsRequest     *request,
Packit 98cdb6
							    gint                major,
Packit 98cdb6
							    gint                minor);
Packit 98cdb6
gboolean                gtk_cups_result_is_error           (GtkCupsResult      *result);
Packit 98cdb6
ipp_t                 * gtk_cups_result_get_response       (GtkCupsResult      *result);
Packit 98cdb6
GtkCupsErrorType        gtk_cups_result_get_error_type     (GtkCupsResult      *result);
Packit 98cdb6
int                     gtk_cups_result_get_error_status   (GtkCupsResult      *result);
Packit 98cdb6
int                     gtk_cups_result_get_error_code     (GtkCupsResult      *result);
Packit 98cdb6
const char            * gtk_cups_result_get_error_string   (GtkCupsResult      *result);
Packit 98cdb6
GtkCupsConnectionTest * gtk_cups_connection_test_new       (const char         *server,
Packit 98cdb6
                                                            const int           port);
Packit 98cdb6
GtkCupsConnectionState  gtk_cups_connection_test_get_state (GtkCupsConnectionTest *test);
Packit 98cdb6
void                    gtk_cups_connection_test_free      (GtkCupsConnectionTest *test);
Packit 98cdb6
Packit 98cdb6
G_END_DECLS
Packit 98cdb6
#endif