root/usr/src/cmd/lp/model/netpr/netpr.h
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef _NETPR_H
#define _NETPR_H

#ifdef  __cplusplus
extern "C" {
#endif

#define BSD     0
#define TCP     1
#define NOBANNER        0
#define BANNER  1

#define CONTROL_FIRST   0
#define DATA_FIRST      1

#define ERRORMSG        0
#define OKMSG           1

#define DEST_SEP        ":"

#define MAX_REQ_ID      3

#define ASCII_UULONG_MAX 22

#define XFER_REQUEST    2       /* \2printer\n */
#define XFER_CLEANUP    1       /* \1 */
#define XFER_CONTROL    2       /* \2size name\n */
#define XFER_DATA       3       /* \3size name\n */
#define PRINT_REQUEST   1       /* \1printer\n */
#define REMOVE_REQUEST  5       /* \5printer person [users|jobs ...]\n */
#define SHOW_QUEUE_SHORT_REQUEST  3     /* \3printer [users|jobs ...]\n */
#define SHOW_QUEUE_LONG_REQUEST  4      /* \4printer [users|jobs ...]\n */


#define E_SUCCESS                       0
#define E_FAILURE                       1
#define E_SYSTEM_ERROR                  2
#define E_BAD_FILE                      3
#define E_BAD_INPUT                     4
#define E_SYSTEM_ERR                    5
#define E_SEND_OK                       6
#define E_RETRY                         129
#define E_SIGPIPE                       130


#define NETWORK_ERROR_UNKNOWN           20
#define NETWORK_ERROR_HOST              21
#define NETWORK_ERROR_SERVICE           22
#define NETWORK_ERROR_PORT              23
#define NETWORK_ERROR_SEND_RESPONSE     24
#define NETWORK_ERROR_SEND_FAILED       25
#define NETWORK_ERROR_MSG_FAILED        26
#define NETWORK_ERROR_WRITE_FAILED      27
#define NETWORK_PRINTER_REFUSED_CONN    28
#define NETWORK_READ_RESPONSE_FAILED    29


#define MALLOC  (int size, char * msg)  \
        { \
                printf("File %s line %d\n", __FILE__, __LINE__); \
                printf("malloc: size: <%d>, for <%s>\n"); \
                malloc(size); \
        }


typedef struct np_data np_data_t;
typedef struct np_bsdjob np_bsdjob_t;
typedef struct job      np_job_t;
typedef struct np_tcp_job np_tcpjob_t;

/*
 * Contains the input data for this job.
 * Data is independent of protocol
 */

struct job {
        char    *filename;
        char    *request_id;
        char    *printer;
        char    *dest;
        char    *title;
        int     protocol;
        char    *username;
        int     timeout;
        int     banner;
        int     filesize;
};

struct np_tcp_job {
        np_job_t * gen_data;
        char * np_port;
        char * np_host;
};

struct np_data {
        char    *np_dfAfilename;
        char    *np_path_file;  /* /<path>/<filename> we are printing   */
        long    np_data_size;   /* using stat, XXX mmap better??        */
        char    *jobfile_data;
};


struct np_bsdjob {
        char            *np_filename;
        char            *np_request_id;
        char            *np_printer;
        char            *np_destination;
        char            *np_title;
        char            *np_username;
        int             np_timeout;
        int             np_banner;
        char            *np_host;
        int             np_print_order;
        char            *np_cfAfilename;
        char            *np_cfAfile;
        uint            np_cfAfilesize;
        char            np_df_letter;           /* [A-Z][a-z] use this one */
        np_data_t       *np_data;
};

extern char * long2str(long, char *);
extern void null_sighandler(int);
extern int open_network(char *, int);
extern int xfer_file(int, caddr_t, int, int);
extern int add_bsd_file(char *, np_bsdjob_t *);
extern int start_bsd_job(int, char *);
extern void done_and_close(int);
extern void panic();
extern char * alloc_str(char *);
extern np_bsdjob_t * create_bsd_job(np_job_t *, int, int);
extern np_tcpjob_t * create_tcp_job(np_job_t *, int);
extern int net_send_cmd(int, char *, ...);
extern np_job_t * init_job(void);
extern int bsd_print(int, caddr_t, np_bsdjob_t *);
extern int tcp_print(int, caddr_t, np_tcpjob_t *);
extern int tcp_open(char *, np_tcpjob_t *, int);
extern void tell_lptell(int, char *, ...);
extern int net_open(char *, int);
extern void parse_dest(char *, char **, char **, char *);
extern int check_file(char *);

#ifdef  __cplusplus
}
#endif

#endif  /* _NETPR_H */