1*7c478bd9Sstevel@tonic-gate /* 2*7c478bd9Sstevel@tonic-gate * CDDL HEADER START 3*7c478bd9Sstevel@tonic-gate * 4*7c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 5*7c478bd9Sstevel@tonic-gate * Common Development and Distribution License, Version 1.0 only 6*7c478bd9Sstevel@tonic-gate * (the "License"). You may not use this file except in compliance 7*7c478bd9Sstevel@tonic-gate * with the License. 8*7c478bd9Sstevel@tonic-gate * 9*7c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*7c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 11*7c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 12*7c478bd9Sstevel@tonic-gate * and limitations under the License. 13*7c478bd9Sstevel@tonic-gate * 14*7c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 15*7c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*7c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 17*7c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 18*7c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 19*7c478bd9Sstevel@tonic-gate * 20*7c478bd9Sstevel@tonic-gate * CDDL HEADER END 21*7c478bd9Sstevel@tonic-gate */ 22*7c478bd9Sstevel@tonic-gate /* 23*7c478bd9Sstevel@tonic-gate * Copyright 1993 Sun Microsystems, Inc. All rights reserved. 24*7c478bd9Sstevel@tonic-gate * Use is subject to license terms. 25*7c478bd9Sstevel@tonic-gate */ 26*7c478bd9Sstevel@tonic-gate 27*7c478bd9Sstevel@tonic-gate /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 28*7c478bd9Sstevel@tonic-gate /* All Rights Reserved */ 29*7c478bd9Sstevel@tonic-gate 30*7c478bd9Sstevel@tonic-gate 31*7c478bd9Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" /* SVr4.0 1.18 */ 32*7c478bd9Sstevel@tonic-gate 33*7c478bd9Sstevel@tonic-gate # include <sys/types.h> 34*7c478bd9Sstevel@tonic-gate # include <poll.h> 35*7c478bd9Sstevel@tonic-gate # include <stdarg.h> 36*7c478bd9Sstevel@tonic-gate # include <stropts.h> 37*7c478bd9Sstevel@tonic-gate 38*7c478bd9Sstevel@tonic-gate #if !defined(_LP_MSGS_H) 39*7c478bd9Sstevel@tonic-gate # define _LP_MSGS_H 40*7c478bd9Sstevel@tonic-gate 41*7c478bd9Sstevel@tonic-gate /* 42*7c478bd9Sstevel@tonic-gate * THE DISPATCH TABLE DEPENDS ON EACH R_... MESSAGE FOLLOWING 43*7c478bd9Sstevel@tonic-gate * IMMEDIATELY AFTER ITS CORRESPONDING S_... COUNTERPART. 44*7c478bd9Sstevel@tonic-gate * I.E R_... MESSAGE FOR A S_... MESSAGE IS (S_... + 1) 45*7c478bd9Sstevel@tonic-gate */ 46*7c478bd9Sstevel@tonic-gate # define R_BAD_MESSAGE 0 47*7c478bd9Sstevel@tonic-gate # define S_NEW_QUEUE 1 48*7c478bd9Sstevel@tonic-gate # define R_NEW_QUEUE 2 49*7c478bd9Sstevel@tonic-gate # define S_ALLOC_FILES 3 50*7c478bd9Sstevel@tonic-gate # define R_ALLOC_FILES 4 51*7c478bd9Sstevel@tonic-gate # define S_PRINT_REQUEST 5 52*7c478bd9Sstevel@tonic-gate # define R_PRINT_REQUEST 6 53*7c478bd9Sstevel@tonic-gate # define S_START_CHANGE_REQUEST 7 54*7c478bd9Sstevel@tonic-gate # define R_START_CHANGE_REQUEST 8 55*7c478bd9Sstevel@tonic-gate # define S_END_CHANGE_REQUEST 9 56*7c478bd9Sstevel@tonic-gate # define R_END_CHANGE_REQUEST 10 57*7c478bd9Sstevel@tonic-gate # define S_CANCEL_REQUEST 11 58*7c478bd9Sstevel@tonic-gate # define R_CANCEL_REQUEST 12 59*7c478bd9Sstevel@tonic-gate # define S_INQUIRE_REQUEST 13 60*7c478bd9Sstevel@tonic-gate # define R_INQUIRE_REQUEST 14 61*7c478bd9Sstevel@tonic-gate # define S_LOAD_PRINTER 15 62*7c478bd9Sstevel@tonic-gate # define R_LOAD_PRINTER 16 63*7c478bd9Sstevel@tonic-gate # define S_UNLOAD_PRINTER 17 64*7c478bd9Sstevel@tonic-gate # define R_UNLOAD_PRINTER 18 65*7c478bd9Sstevel@tonic-gate # define S_INQUIRE_PRINTER_STATUS 19 66*7c478bd9Sstevel@tonic-gate # define R_INQUIRE_PRINTER_STATUS 20 67*7c478bd9Sstevel@tonic-gate # define S_LOAD_CLASS 21 68*7c478bd9Sstevel@tonic-gate # define R_LOAD_CLASS 22 69*7c478bd9Sstevel@tonic-gate # define S_UNLOAD_CLASS 23 70*7c478bd9Sstevel@tonic-gate # define R_UNLOAD_CLASS 24 71*7c478bd9Sstevel@tonic-gate # define S_INQUIRE_CLASS 25 72*7c478bd9Sstevel@tonic-gate # define R_INQUIRE_CLASS 26 73*7c478bd9Sstevel@tonic-gate # define S_MOUNT 27 74*7c478bd9Sstevel@tonic-gate # define R_MOUNT 28 75*7c478bd9Sstevel@tonic-gate # define S_UNMOUNT 29 76*7c478bd9Sstevel@tonic-gate # define R_UNMOUNT 30 77*7c478bd9Sstevel@tonic-gate # define S_MOVE_REQUEST 31 78*7c478bd9Sstevel@tonic-gate # define R_MOVE_REQUEST 32 79*7c478bd9Sstevel@tonic-gate # define S_MOVE_DEST 33 80*7c478bd9Sstevel@tonic-gate # define R_MOVE_DEST 34 81*7c478bd9Sstevel@tonic-gate # define S_ACCEPT_DEST 35 82*7c478bd9Sstevel@tonic-gate # define R_ACCEPT_DEST 36 83*7c478bd9Sstevel@tonic-gate # define S_REJECT_DEST 37 84*7c478bd9Sstevel@tonic-gate # define R_REJECT_DEST 38 85*7c478bd9Sstevel@tonic-gate # define S_ENABLE_DEST 39 86*7c478bd9Sstevel@tonic-gate # define R_ENABLE_DEST 40 87*7c478bd9Sstevel@tonic-gate # define S_DISABLE_DEST 41 88*7c478bd9Sstevel@tonic-gate # define R_DISABLE_DEST 42 89*7c478bd9Sstevel@tonic-gate # define S_LOAD_FILTER_TABLE 43 90*7c478bd9Sstevel@tonic-gate # define R_LOAD_FILTER_TABLE 44 91*7c478bd9Sstevel@tonic-gate # define S_UNLOAD_FILTER_TABLE 45 92*7c478bd9Sstevel@tonic-gate # define R_UNLOAD_FILTER_TABLE 46 93*7c478bd9Sstevel@tonic-gate # define S_LOAD_PRINTWHEEL 47 94*7c478bd9Sstevel@tonic-gate # define R_LOAD_PRINTWHEEL 48 95*7c478bd9Sstevel@tonic-gate # define S_UNLOAD_PRINTWHEEL 49 96*7c478bd9Sstevel@tonic-gate # define R_UNLOAD_PRINTWHEEL 50 97*7c478bd9Sstevel@tonic-gate # define S_LOAD_USER_FILE 51 98*7c478bd9Sstevel@tonic-gate # define R_LOAD_USER_FILE 52 99*7c478bd9Sstevel@tonic-gate # define S_UNLOAD_USER_FILE 53 100*7c478bd9Sstevel@tonic-gate # define R_UNLOAD_USER_FILE 54 101*7c478bd9Sstevel@tonic-gate # define S_LOAD_FORM 55 102*7c478bd9Sstevel@tonic-gate # define R_LOAD_FORM 56 103*7c478bd9Sstevel@tonic-gate # define S_UNLOAD_FORM 57 104*7c478bd9Sstevel@tonic-gate # define R_UNLOAD_FORM 58 105*7c478bd9Sstevel@tonic-gate # define S_GETSTATUS 59 106*7c478bd9Sstevel@tonic-gate # define R_GETSTATUS 60 107*7c478bd9Sstevel@tonic-gate # define S_QUIET_ALERT 61 108*7c478bd9Sstevel@tonic-gate # define R_QUIET_ALERT 62 109*7c478bd9Sstevel@tonic-gate # define S_SEND_FAULT 63 110*7c478bd9Sstevel@tonic-gate # define R_SEND_FAULT 64 111*7c478bd9Sstevel@tonic-gate # define S_SHUTDOWN 65 112*7c478bd9Sstevel@tonic-gate # define R_SHUTDOWN 66 113*7c478bd9Sstevel@tonic-gate # define S_GOODBYE 67 114*7c478bd9Sstevel@tonic-gate # define S_CHILD_DONE 68 115*7c478bd9Sstevel@tonic-gate 116*7c478bd9Sstevel@tonic-gate /* 117*7c478bd9Sstevel@tonic-gate ** These are for use by the scheduler only 118*7c478bd9Sstevel@tonic-gate */ 119*7c478bd9Sstevel@tonic-gate # define I_GET_TYPE 69 120*7c478bd9Sstevel@tonic-gate # define I_QUEUE_CHK 70 121*7c478bd9Sstevel@tonic-gate # define R_CONNECT 71 122*7c478bd9Sstevel@tonic-gate 123*7c478bd9Sstevel@tonic-gate # define S_GET_STATUS 72 124*7c478bd9Sstevel@tonic-gate # define R_GET_STATUS 73 125*7c478bd9Sstevel@tonic-gate # define S_INQUIRE_REQUEST_RANK 74 126*7c478bd9Sstevel@tonic-gate # define R_INQUIRE_REQUEST_RANK 75 127*7c478bd9Sstevel@tonic-gate # define S_CANCEL 76 128*7c478bd9Sstevel@tonic-gate # define R_CANCEL 77 129*7c478bd9Sstevel@tonic-gate # define S_NEW_CHILD 78 130*7c478bd9Sstevel@tonic-gate # define R_NEW_CHILD 79 131*7c478bd9Sstevel@tonic-gate # define S_SEND_JOB 80 132*7c478bd9Sstevel@tonic-gate # define R_SEND_JOB 81 133*7c478bd9Sstevel@tonic-gate # define S_JOB_COMPLETED 82 134*7c478bd9Sstevel@tonic-gate # define R_JOB_COMPLETED 83 135*7c478bd9Sstevel@tonic-gate # define S_INQUIRE_REMOTE_PRINTER 84 136*7c478bd9Sstevel@tonic-gate # define R_INQUIRE_REMOTE_PRINTER 20 137*7c478bd9Sstevel@tonic-gate # define S_CHILD_SYNC 85 138*7c478bd9Sstevel@tonic-gate # define S_LOAD_SYSTEM 86 139*7c478bd9Sstevel@tonic-gate # define R_LOAD_SYSTEM 87 140*7c478bd9Sstevel@tonic-gate # define S_UNLOAD_SYSTEM 88 141*7c478bd9Sstevel@tonic-gate # define R_UNLOAD_SYSTEM 89 142*7c478bd9Sstevel@tonic-gate /* new messages */ 143*7c478bd9Sstevel@tonic-gate # define S_CLEAR_FAULT 90 144*7c478bd9Sstevel@tonic-gate # define R_CLEAR_FAULT 91 145*7c478bd9Sstevel@tonic-gate # define S_MOUNT_TRAY 92 146*7c478bd9Sstevel@tonic-gate # define R_MOUNT_TRAY 93 147*7c478bd9Sstevel@tonic-gate # define S_UNMOUNT_TRAY 94 148*7c478bd9Sstevel@tonic-gate # define R_UNMOUNT_TRAY 95 149*7c478bd9Sstevel@tonic-gate # define S_MAX_TRAYS 96 150*7c478bd9Sstevel@tonic-gate # define R_MAX_TRAYS 97 151*7c478bd9Sstevel@tonic-gate # define S_PAPER_CHANGED 98 152*7c478bd9Sstevel@tonic-gate # define R_PAPER_CHANGED 99 153*7c478bd9Sstevel@tonic-gate # define S_PAPER_ALLOWED 100 154*7c478bd9Sstevel@tonic-gate # define R_PAPER_ALLOWED 101 155*7c478bd9Sstevel@tonic-gate /* 156*7c478bd9Sstevel@tonic-gate ** Last available message 157*7c478bd9Sstevel@tonic-gate */ 158*7c478bd9Sstevel@tonic-gate # define LAST_MESSAGE 102 159*7c478bd9Sstevel@tonic-gate 160*7c478bd9Sstevel@tonic-gate /* 161*7c478bd9Sstevel@tonic-gate ** These are the possible status codes returned by the scheduler 162*7c478bd9Sstevel@tonic-gate */ 163*7c478bd9Sstevel@tonic-gate # define MOK 0 164*7c478bd9Sstevel@tonic-gate # define MOKMORE 1 165*7c478bd9Sstevel@tonic-gate # define MOKREMOTE 2 166*7c478bd9Sstevel@tonic-gate # define MMORERR 3 167*7c478bd9Sstevel@tonic-gate # define MNODEST 4 168*7c478bd9Sstevel@tonic-gate # define MERRDEST 5 169*7c478bd9Sstevel@tonic-gate # define MDENYDEST 6 170*7c478bd9Sstevel@tonic-gate # define MNOMEDIA 7 171*7c478bd9Sstevel@tonic-gate # define MDENYMEDIA 8 172*7c478bd9Sstevel@tonic-gate # define MNOFILTER 9 173*7c478bd9Sstevel@tonic-gate # define MNOINFO 10 174*7c478bd9Sstevel@tonic-gate # define MNOMEM 11 175*7c478bd9Sstevel@tonic-gate # define MNOMOUNT 12 176*7c478bd9Sstevel@tonic-gate # define MNOOPEN 13 177*7c478bd9Sstevel@tonic-gate # define MNOPERM 14 178*7c478bd9Sstevel@tonic-gate # define MNOSTART 15 179*7c478bd9Sstevel@tonic-gate # define MUNKNOWN 16 180*7c478bd9Sstevel@tonic-gate # define M2LATE 17 181*7c478bd9Sstevel@tonic-gate # define MNOSPACE 18 182*7c478bd9Sstevel@tonic-gate # define MBUSY 19 183*7c478bd9Sstevel@tonic-gate # define MTRANSMITERR 20 184*7c478bd9Sstevel@tonic-gate # define MNOMORE 21 185*7c478bd9Sstevel@tonic-gate # define MGONEREMOTE 22 186*7c478bd9Sstevel@tonic-gate # define MNOTRAY 23 187*7c478bd9Sstevel@tonic-gate 188*7c478bd9Sstevel@tonic-gate /* 189*7c478bd9Sstevel@tonic-gate ** Offsets and lengths of the various elements of the message header. 190*7c478bd9Sstevel@tonic-gate ** 191*7c478bd9Sstevel@tonic-gate ** Macro Data Type Size Comment 192*7c478bd9Sstevel@tonic-gate ** 193*7c478bd9Sstevel@tonic-gate ** HEAD_RESYNC 2 bytes (2) * 194*7c478bd9Sstevel@tonic-gate ** HEAD_AUTHCODE short + long (6) * 195*7c478bd9Sstevel@tonic-gate ** 196*7c478bd9Sstevel@tonic-gate ** HEAD_SIZE 4 bytes (4) \ 197*7c478bd9Sstevel@tonic-gate ** HEAD_TYPE 4 bytes (4) > message propper 198*7c478bd9Sstevel@tonic-gate ** HEAD_DATA n bytes (n) / 199*7c478bd9Sstevel@tonic-gate ** 200*7c478bd9Sstevel@tonic-gate ** TAIL_CHKSUM 4 bytes (4) * 201*7c478bd9Sstevel@tonic-gate ** TAIL_ENDSYNC 2 bytes (2) * 202*7c478bd9Sstevel@tonic-gate ** 203*7c478bd9Sstevel@tonic-gate ** Items marked with an asterisk are only used with the 3.2 204*7c478bd9Sstevel@tonic-gate ** Spooler protocol. 205*7c478bd9Sstevel@tonic-gate */ 206*7c478bd9Sstevel@tonic-gate 207*7c478bd9Sstevel@tonic-gate /* 208*7c478bd9Sstevel@tonic-gate ** 3.2 Protocol Header Information: 209*7c478bd9Sstevel@tonic-gate ** 2-byte message introduction 210*7c478bd9Sstevel@tonic-gate ** 6-byte client authorization data 211*7c478bd9Sstevel@tonic-gate */ 212*7c478bd9Sstevel@tonic-gate #define HEAD_RESYNC (0) 213*7c478bd9Sstevel@tonic-gate #define HEAD_RESYNC_LEN 2 214*7c478bd9Sstevel@tonic-gate #define HEAD_AUTHCODE (HEAD_RESYNC + HEAD_RESYNC_LEN) 215*7c478bd9Sstevel@tonic-gate #define HEAD_AUTHCODE_LEN (sizeof(short) + sizeof(long)) 216*7c478bd9Sstevel@tonic-gate 217*7c478bd9Sstevel@tonic-gate /* 218*7c478bd9Sstevel@tonic-gate ** 3.2 Protocol Message Information: 219*7c478bd9Sstevel@tonic-gate ** 4-byte message size 220*7c478bd9Sstevel@tonic-gate ** 4-byte message type 221*7c478bd9Sstevel@tonic-gate ** n-byte message data 222*7c478bd9Sstevel@tonic-gate */ 223*7c478bd9Sstevel@tonic-gate #define HEAD_SIZE (HEAD_AUTHCODE + HEAD_AUTHCODE_LEN) 224*7c478bd9Sstevel@tonic-gate #define HEAD_SIZE_LEN 4 225*7c478bd9Sstevel@tonic-gate #define HEAD_TYPE (HEAD_SIZE + HEAD_SIZE_LEN) 226*7c478bd9Sstevel@tonic-gate #define HEAD_TYPE_LEN 4 227*7c478bd9Sstevel@tonic-gate #define HEAD_DATA (HEAD_TYPE + HEAD_TYPE_LEN) 228*7c478bd9Sstevel@tonic-gate 229*7c478bd9Sstevel@tonic-gate /* 230*7c478bd9Sstevel@tonic-gate ** 3.2 Protocol Size of non-data header information 231*7c478bd9Sstevel@tonic-gate */ 232*7c478bd9Sstevel@tonic-gate #define HEAD_LEN HEAD_DATA 233*7c478bd9Sstevel@tonic-gate 234*7c478bd9Sstevel@tonic-gate /* 235*7c478bd9Sstevel@tonic-gate ** Equivalents for 4.0 protocol 236*7c478bd9Sstevel@tonic-gate */ 237*7c478bd9Sstevel@tonic-gate #define MESG_SIZE (0) 238*7c478bd9Sstevel@tonic-gate #define MESG_SIZE_LEN 4 239*7c478bd9Sstevel@tonic-gate #define MESG_TYPE (MESG_SIZE + MESG_SIZE_LEN) 240*7c478bd9Sstevel@tonic-gate #define MESG_TYPE_LEN 4 241*7c478bd9Sstevel@tonic-gate #define MESG_DATA (MESG_TYPE + MESG_TYPE_LEN) 242*7c478bd9Sstevel@tonic-gate 243*7c478bd9Sstevel@tonic-gate #define MESG_LEN MESG_DATA 244*7c478bd9Sstevel@tonic-gate 245*7c478bd9Sstevel@tonic-gate /* 246*7c478bd9Sstevel@tonic-gate ** 3.2 Protocol Trailer Information: 247*7c478bd9Sstevel@tonic-gate ** 4-byte message check sum 248*7c478bd9Sstevel@tonic-gate ** 2-byte message closing identifier 249*7c478bd9Sstevel@tonic-gate ** 250*7c478bd9Sstevel@tonic-gate ** "N" is the decoded value of buffer[HEAD_SIZE]. This must 251*7c478bd9Sstevel@tonic-gate ** be provided because messages are variable length. 252*7c478bd9Sstevel@tonic-gate */ 253*7c478bd9Sstevel@tonic-gate #define TAIL_ENDSYNC_LEN 2 254*7c478bd9Sstevel@tonic-gate #define TAIL_ENDSYNC(N) (N - TAIL_ENDSYNC_LEN) 255*7c478bd9Sstevel@tonic-gate #define TAIL_CHKSUM_LEN 4 256*7c478bd9Sstevel@tonic-gate #define TAIL_CHKSUM(N) (TAIL_ENDSYNC(N) - TAIL_CHKSUM_LEN) 257*7c478bd9Sstevel@tonic-gate 258*7c478bd9Sstevel@tonic-gate /* 259*7c478bd9Sstevel@tonic-gate ** 3.2 Protocol Size of non-data trailer information 260*7c478bd9Sstevel@tonic-gate */ 261*7c478bd9Sstevel@tonic-gate #define TAIL_LEN (TAIL_CHKSUM_LEN + TAIL_ENDSYNC_LEN) 262*7c478bd9Sstevel@tonic-gate 263*7c478bd9Sstevel@tonic-gate /* 264*7c478bd9Sstevel@tonic-gate ** 3.2 Protocol Size of all non-data information 265*7c478bd9Sstevel@tonic-gate ** (This is also the minimum size for 3.2 protocol messages) 266*7c478bd9Sstevel@tonic-gate */ 267*7c478bd9Sstevel@tonic-gate #define CONTROL_LEN (HEAD_LEN + TAIL_LEN) 268*7c478bd9Sstevel@tonic-gate 269*7c478bd9Sstevel@tonic-gate /* 270*7c478bd9Sstevel@tonic-gate ** Size of excess data induced by 3.2 Protocol. 271*7c478bd9Sstevel@tonic-gate ** (This is also the size differance between 3.2 & 4.0 protocols) 272*7c478bd9Sstevel@tonic-gate */ 273*7c478bd9Sstevel@tonic-gate #define EXCESS_3_2_LEN (HEAD_SIZE + TAIL_LEN) 274*7c478bd9Sstevel@tonic-gate /** 275*7c478bd9Sstevel@tonic-gate ** Checksum: 276*7c478bd9Sstevel@tonic-gate **/ 277*7c478bd9Sstevel@tonic-gate #define CALC_CHKSUM(B,SZ,RC) \ 278*7c478bd9Sstevel@tonic-gate if (SZ >= CONTROL_LEN) \ 279*7c478bd9Sstevel@tonic-gate { \ 280*7c478bd9Sstevel@tonic-gate register unsigned char *p = (unsigned char *)B, \ 281*7c478bd9Sstevel@tonic-gate *pend = p + SZ - TAIL_LEN; \ 282*7c478bd9Sstevel@tonic-gate RC = 0; \ 283*7c478bd9Sstevel@tonic-gate while (p < pend) \ 284*7c478bd9Sstevel@tonic-gate RC += *p++; /* let it overflow */ \ 285*7c478bd9Sstevel@tonic-gate } \ 286*7c478bd9Sstevel@tonic-gate else \ 287*7c478bd9Sstevel@tonic-gate return ((errno = EINVAL, -1)) 288*7c478bd9Sstevel@tonic-gate 289*7c478bd9Sstevel@tonic-gate /* 290*7c478bd9Sstevel@tonic-gate ** Largest size permitted for any given message 291*7c478bd9Sstevel@tonic-gate */ 292*7c478bd9Sstevel@tonic-gate # define MSGMAX 2048 293*7c478bd9Sstevel@tonic-gate 294*7c478bd9Sstevel@tonic-gate /* 295*7c478bd9Sstevel@tonic-gate ** Possible values of the type field of S_QUIET_ALERT 296*7c478bd9Sstevel@tonic-gate */ 297*7c478bd9Sstevel@tonic-gate # define QA_FORM 1 298*7c478bd9Sstevel@tonic-gate # define QA_PRINTER 2 299*7c478bd9Sstevel@tonic-gate # define QA_PRINTWHEEL 3 300*7c478bd9Sstevel@tonic-gate 301*7c478bd9Sstevel@tonic-gate typedef struct strbuf strbuf_t; /* STREAMS buffer */ 302*7c478bd9Sstevel@tonic-gate 303*7c478bd9Sstevel@tonic-gate typedef struct mque 304*7c478bd9Sstevel@tonic-gate { 305*7c478bd9Sstevel@tonic-gate struct mque *next; 306*7c478bd9Sstevel@tonic-gate struct strbuf *dat; 307*7c478bd9Sstevel@tonic-gate } MQUE; 308*7c478bd9Sstevel@tonic-gate 309*7c478bd9Sstevel@tonic-gate /* 310*7c478bd9Sstevel@tonic-gate ** Definition of a message descriptor 311*7c478bd9Sstevel@tonic-gate */ 312*7c478bd9Sstevel@tonic-gate typedef struct 313*7c478bd9Sstevel@tonic-gate { 314*7c478bd9Sstevel@tonic-gate short type; /* type of connection */ 315*7c478bd9Sstevel@tonic-gate int readfd; /* STREAM fd to read from */ 316*7c478bd9Sstevel@tonic-gate int writefd; /* STREAM fd to write to */ 317*7c478bd9Sstevel@tonic-gate int wait; /* number of systems waiting for */ 318*7c478bd9Sstevel@tonic-gate char *file; /* pipe name if type==MD_FIFO */ 319*7c478bd9Sstevel@tonic-gate short state; /* Current state of client */ 320*7c478bd9Sstevel@tonic-gate short admin; /* Non zero if admin */ 321*7c478bd9Sstevel@tonic-gate short event; /* Event returned from poll */ 322*7c478bd9Sstevel@tonic-gate MQUE * mque; /* backlogged message ptr */ 323*7c478bd9Sstevel@tonic-gate uid_t uid; /* Clients UID */ 324*7c478bd9Sstevel@tonic-gate gid_t gid; /* Clients GID */ 325*7c478bd9Sstevel@tonic-gate void (**on_discon)(); /* Clean up functions */ 326*7c478bd9Sstevel@tonic-gate } MESG; 327*7c478bd9Sstevel@tonic-gate 328*7c478bd9Sstevel@tonic-gate # define MDSIZE (sizeof(MESG)) 329*7c478bd9Sstevel@tonic-gate 330*7c478bd9Sstevel@tonic-gate /* 331*7c478bd9Sstevel@tonic-gate ** Possible values of MESG.state 332*7c478bd9Sstevel@tonic-gate */ 333*7c478bd9Sstevel@tonic-gate # define MDS_IDLE 0 334*7c478bd9Sstevel@tonic-gate 335*7c478bd9Sstevel@tonic-gate # define MDS_32PROTO 320 336*7c478bd9Sstevel@tonic-gate # define MDS_32CONNECT 321 337*7c478bd9Sstevel@tonic-gate 338*7c478bd9Sstevel@tonic-gate /* 339*7c478bd9Sstevel@tonic-gate ** Possible values of MESG.type 340*7c478bd9Sstevel@tonic-gate */ 341*7c478bd9Sstevel@tonic-gate # define MD_UNKNOWN 0 /* We don't know just yet */ 342*7c478bd9Sstevel@tonic-gate # define MD_STREAM 1 /* 4.0 STREAMS pipe protocol */ 343*7c478bd9Sstevel@tonic-gate # define MD_BOUND 2 /* 4.0 STREAMS fd protocol */ 344*7c478bd9Sstevel@tonic-gate # define MD_SYS_FIFO 3 /* 3.2 named-pipe protocol */ 345*7c478bd9Sstevel@tonic-gate # define MD_USR_FIFO 4 /* 3.2 named-pipe protocol */ 346*7c478bd9Sstevel@tonic-gate # define MD_MASTER 5 /* MD_STREAM used by lpsched */ 347*7c478bd9Sstevel@tonic-gate # define MD_CHILD 6 /* MD_STREAM to a child process */ 348*7c478bd9Sstevel@tonic-gate 349*7c478bd9Sstevel@tonic-gate /* 350*7c478bd9Sstevel@tonic-gate ** Definition for a FIFO buffer (used 351*7c478bd9Sstevel@tonic-gate ** in read_fifo. 352*7c478bd9Sstevel@tonic-gate */ 353*7c478bd9Sstevel@tonic-gate typedef struct 354*7c478bd9Sstevel@tonic-gate { 355*7c478bd9Sstevel@tonic-gate int full; 356*7c478bd9Sstevel@tonic-gate char save [MSGMAX], 357*7c478bd9Sstevel@tonic-gate *psave, 358*7c478bd9Sstevel@tonic-gate *psave_end; 359*7c478bd9Sstevel@tonic-gate } fifobuffer_t; 360*7c478bd9Sstevel@tonic-gate 361*7c478bd9Sstevel@tonic-gate /* 362*7c478bd9Sstevel@tonic-gate ** Definitions for the rest of the world and lint 363*7c478bd9Sstevel@tonic-gate */ 364*7c478bd9Sstevel@tonic-gate /* 365*7c478bd9Sstevel@tonic-gate ** Server functions in order of usage 366*7c478bd9Sstevel@tonic-gate */ 367*7c478bd9Sstevel@tonic-gate MESG * mcreate ( char * ); 368*7c478bd9Sstevel@tonic-gate int mlisteninit ( MESG * ); 369*7c478bd9Sstevel@tonic-gate MESG * mlisten ( void ); 370*7c478bd9Sstevel@tonic-gate int mlistenadd ( MESG *, short ); 371*7c478bd9Sstevel@tonic-gate int mon_discon ( MESG *, void (*)()); 372*7c478bd9Sstevel@tonic-gate MESG * mlistenreset ( void ); 373*7c478bd9Sstevel@tonic-gate int mdestroy ( MESG * ); 374*7c478bd9Sstevel@tonic-gate 375*7c478bd9Sstevel@tonic-gate /* 376*7c478bd9Sstevel@tonic-gate ** Client functions in order of typical usage 377*7c478bd9Sstevel@tonic-gate */ 378*7c478bd9Sstevel@tonic-gate MESG * mconnect ( char *, int, int ); 379*7c478bd9Sstevel@tonic-gate int mgetm ( MESG *, int, ... ); 380*7c478bd9Sstevel@tonic-gate int mwrite ( MESG *, char * ); 381*7c478bd9Sstevel@tonic-gate int mputm ( MESG *, int, ... ); 382*7c478bd9Sstevel@tonic-gate int mread ( MESG *, char *, int ); 383*7c478bd9Sstevel@tonic-gate short msize ( char * ); 384*7c478bd9Sstevel@tonic-gate short mpeek ( MESG * ); 385*7c478bd9Sstevel@tonic-gate int mdisconnect ( MESG * ); 386*7c478bd9Sstevel@tonic-gate 387*7c478bd9Sstevel@tonic-gate /* 388*7c478bd9Sstevel@tonic-gate ** This may be called to deallocate internal buffers allocated 389*7c478bd9Sstevel@tonic-gate ** by mgetm and mputm. Probably not useful except right before 390*7c478bd9Sstevel@tonic-gate ** a fork(). 391*7c478bd9Sstevel@tonic-gate */ 392*7c478bd9Sstevel@tonic-gate void __mbfree ( void ); 393*7c478bd9Sstevel@tonic-gate 394*7c478bd9Sstevel@tonic-gate /* 395*7c478bd9Sstevel@tonic-gate ** Client functions for pre-4.0 compatability 396*7c478bd9Sstevel@tonic-gate */ 397*7c478bd9Sstevel@tonic-gate int mclose ( void ); 398*7c478bd9Sstevel@tonic-gate int mneeds ( void ); 399*7c478bd9Sstevel@tonic-gate int mopen ( void ); 400*7c478bd9Sstevel@tonic-gate int mrecv ( char *, int ); 401*7c478bd9Sstevel@tonic-gate int msend ( char * ); 402*7c478bd9Sstevel@tonic-gate 403*7c478bd9Sstevel@tonic-gate int Putmsg (MESG *, strbuf_t *, strbuf_t *, int); 404*7c478bd9Sstevel@tonic-gate int Getmsg (MESG *, strbuf_t *, strbuf_t *, int *); 405*7c478bd9Sstevel@tonic-gate int read3_2 (MESG * md, char *msgbuf, int size); 406*7c478bd9Sstevel@tonic-gate int write3_2 (MESG *, char *, int); 407*7c478bd9Sstevel@tonic-gate int read_fifo (int, char *, unsigned int); 408*7c478bd9Sstevel@tonic-gate int write_fifo (int, char *, unsigned int); 409*7c478bd9Sstevel@tonic-gate int ResetFifoBuffer (int); 410*7c478bd9Sstevel@tonic-gate fifobuffer_t *GetFifoBuffer (int); 411*7c478bd9Sstevel@tonic-gate 412*7c478bd9Sstevel@tonic-gate /* 413*7c478bd9Sstevel@tonic-gate ** General purpose message manipulating functions 414*7c478bd9Sstevel@tonic-gate */ 415*7c478bd9Sstevel@tonic-gate char * htos ( char *, unsigned short ); 416*7c478bd9Sstevel@tonic-gate char * ltos ( char *, unsigned long ); 417*7c478bd9Sstevel@tonic-gate unsigned long stol ( char * ); 418*7c478bd9Sstevel@tonic-gate unsigned short stoh ( char * ); 419*7c478bd9Sstevel@tonic-gate int _getmessage ( char *, short, va_list ); 420*7c478bd9Sstevel@tonic-gate int _putmessage ( char *, short, va_list ); 421*7c478bd9Sstevel@tonic-gate int getmessage ( char *, short, ... ); 422*7c478bd9Sstevel@tonic-gate int putmessage ( char *, short, ... ); 423*7c478bd9Sstevel@tonic-gate 424*7c478bd9Sstevel@tonic-gate /* 425*7c478bd9Sstevel@tonic-gate ** This will yield the type of a message 426*7c478bd9Sstevel@tonic-gate */ 427*7c478bd9Sstevel@tonic-gate # define mtype(buffer) (getmessage(buffer, I_GET_TYPE)) 428*7c478bd9Sstevel@tonic-gate 429*7c478bd9Sstevel@tonic-gate /* 430*7c478bd9Sstevel@tonic-gate ** This will yeild the size of a message 431*7c478bd9Sstevel@tonic-gate */ 432*7c478bd9Sstevel@tonic-gate # define msize(buffer) (stoh(buffer)) 433*7c478bd9Sstevel@tonic-gate 434*7c478bd9Sstevel@tonic-gate /* 435*7c478bd9Sstevel@tonic-gate ** Pass this for the request-id argument of S_CANCEL 436*7c478bd9Sstevel@tonic-gate ** to obtain the effect of the 3.2 S_CANCEL_REQUEST. 437*7c478bd9Sstevel@tonic-gate */ 438*7c478bd9Sstevel@tonic-gate # define CURRENT_REQ "current" 439*7c478bd9Sstevel@tonic-gate 440*7c478bd9Sstevel@tonic-gate #endif /* !defined (_LP_MSGS_H) */ 441