17c478bd9Sstevel@tonic-gate /* 27c478bd9Sstevel@tonic-gate * CDDL HEADER START 37c478bd9Sstevel@tonic-gate * 47c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 545916cd2Sjpk * Common Development and Distribution License (the "License"). 645916cd2Sjpk * You may not use this file except in compliance with the License. 77c478bd9Sstevel@tonic-gate * 87c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 107c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 117c478bd9Sstevel@tonic-gate * and limitations under the License. 127c478bd9Sstevel@tonic-gate * 137c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 147c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 167c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 177c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 187c478bd9Sstevel@tonic-gate * 197c478bd9Sstevel@tonic-gate * CDDL HEADER END 207c478bd9Sstevel@tonic-gate */ 217c478bd9Sstevel@tonic-gate /* 2245916cd2Sjpk * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 237c478bd9Sstevel@tonic-gate * Use is subject to license terms. 247c478bd9Sstevel@tonic-gate */ 257c478bd9Sstevel@tonic-gate 267c478bd9Sstevel@tonic-gate /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 277c478bd9Sstevel@tonic-gate /* All Rights Reserved */ 287c478bd9Sstevel@tonic-gate 297c478bd9Sstevel@tonic-gate 30*0a44ef6dSjacobs #pragma ident "%Z%%M% %I% %E% SMI" 317c478bd9Sstevel@tonic-gate 327c478bd9Sstevel@tonic-gate # include <sys/types.h> 337c478bd9Sstevel@tonic-gate # include <poll.h> 347c478bd9Sstevel@tonic-gate # include <stdarg.h> 357c478bd9Sstevel@tonic-gate # include <stropts.h> 367c478bd9Sstevel@tonic-gate 377c478bd9Sstevel@tonic-gate #if !defined(_LP_MSGS_H) 387c478bd9Sstevel@tonic-gate # define _LP_MSGS_H 397c478bd9Sstevel@tonic-gate 407c478bd9Sstevel@tonic-gate /* 417c478bd9Sstevel@tonic-gate * THE DISPATCH TABLE DEPENDS ON EACH R_... MESSAGE FOLLOWING 427c478bd9Sstevel@tonic-gate * IMMEDIATELY AFTER ITS CORRESPONDING S_... COUNTERPART. 437c478bd9Sstevel@tonic-gate * I.E R_... MESSAGE FOR A S_... MESSAGE IS (S_... + 1) 447c478bd9Sstevel@tonic-gate */ 457c478bd9Sstevel@tonic-gate # define R_BAD_MESSAGE 0 46*0a44ef6dSjacobs /* # define S_NEW_QUEUE 1 DEFUNCT */ 47*0a44ef6dSjacobs /* # define R_NEW_QUEUE 2 DEFUNCT */ 487c478bd9Sstevel@tonic-gate # define S_ALLOC_FILES 3 497c478bd9Sstevel@tonic-gate # define R_ALLOC_FILES 4 507c478bd9Sstevel@tonic-gate # define S_PRINT_REQUEST 5 517c478bd9Sstevel@tonic-gate # define R_PRINT_REQUEST 6 527c478bd9Sstevel@tonic-gate # define S_START_CHANGE_REQUEST 7 537c478bd9Sstevel@tonic-gate # define R_START_CHANGE_REQUEST 8 547c478bd9Sstevel@tonic-gate # define S_END_CHANGE_REQUEST 9 557c478bd9Sstevel@tonic-gate # define R_END_CHANGE_REQUEST 10 567c478bd9Sstevel@tonic-gate # define S_CANCEL_REQUEST 11 577c478bd9Sstevel@tonic-gate # define R_CANCEL_REQUEST 12 58*0a44ef6dSjacobs /* # define S_INQUIRE_REQUEST 13 DEFUNCT */ 59*0a44ef6dSjacobs /* # define R_INQUIRE_REQUEST 14 DEFUNCT */ 607c478bd9Sstevel@tonic-gate # define S_LOAD_PRINTER 15 617c478bd9Sstevel@tonic-gate # define R_LOAD_PRINTER 16 627c478bd9Sstevel@tonic-gate # define S_UNLOAD_PRINTER 17 637c478bd9Sstevel@tonic-gate # define R_UNLOAD_PRINTER 18 647c478bd9Sstevel@tonic-gate # define S_INQUIRE_PRINTER_STATUS 19 657c478bd9Sstevel@tonic-gate # define R_INQUIRE_PRINTER_STATUS 20 667c478bd9Sstevel@tonic-gate # define S_LOAD_CLASS 21 677c478bd9Sstevel@tonic-gate # define R_LOAD_CLASS 22 687c478bd9Sstevel@tonic-gate # define S_UNLOAD_CLASS 23 697c478bd9Sstevel@tonic-gate # define R_UNLOAD_CLASS 24 707c478bd9Sstevel@tonic-gate # define S_INQUIRE_CLASS 25 717c478bd9Sstevel@tonic-gate # define R_INQUIRE_CLASS 26 727c478bd9Sstevel@tonic-gate # define S_MOUNT 27 737c478bd9Sstevel@tonic-gate # define R_MOUNT 28 747c478bd9Sstevel@tonic-gate # define S_UNMOUNT 29 757c478bd9Sstevel@tonic-gate # define R_UNMOUNT 30 767c478bd9Sstevel@tonic-gate # define S_MOVE_REQUEST 31 777c478bd9Sstevel@tonic-gate # define R_MOVE_REQUEST 32 787c478bd9Sstevel@tonic-gate # define S_MOVE_DEST 33 797c478bd9Sstevel@tonic-gate # define R_MOVE_DEST 34 807c478bd9Sstevel@tonic-gate # define S_ACCEPT_DEST 35 817c478bd9Sstevel@tonic-gate # define R_ACCEPT_DEST 36 827c478bd9Sstevel@tonic-gate # define S_REJECT_DEST 37 837c478bd9Sstevel@tonic-gate # define R_REJECT_DEST 38 847c478bd9Sstevel@tonic-gate # define S_ENABLE_DEST 39 857c478bd9Sstevel@tonic-gate # define R_ENABLE_DEST 40 867c478bd9Sstevel@tonic-gate # define S_DISABLE_DEST 41 877c478bd9Sstevel@tonic-gate # define R_DISABLE_DEST 42 887c478bd9Sstevel@tonic-gate # define S_LOAD_FILTER_TABLE 43 897c478bd9Sstevel@tonic-gate # define R_LOAD_FILTER_TABLE 44 907c478bd9Sstevel@tonic-gate # define S_UNLOAD_FILTER_TABLE 45 917c478bd9Sstevel@tonic-gate # define R_UNLOAD_FILTER_TABLE 46 927c478bd9Sstevel@tonic-gate # define S_LOAD_PRINTWHEEL 47 937c478bd9Sstevel@tonic-gate # define R_LOAD_PRINTWHEEL 48 947c478bd9Sstevel@tonic-gate # define S_UNLOAD_PRINTWHEEL 49 957c478bd9Sstevel@tonic-gate # define R_UNLOAD_PRINTWHEEL 50 967c478bd9Sstevel@tonic-gate # define S_LOAD_USER_FILE 51 977c478bd9Sstevel@tonic-gate # define R_LOAD_USER_FILE 52 987c478bd9Sstevel@tonic-gate # define S_UNLOAD_USER_FILE 53 997c478bd9Sstevel@tonic-gate # define R_UNLOAD_USER_FILE 54 1007c478bd9Sstevel@tonic-gate # define S_LOAD_FORM 55 1017c478bd9Sstevel@tonic-gate # define R_LOAD_FORM 56 1027c478bd9Sstevel@tonic-gate # define S_UNLOAD_FORM 57 1037c478bd9Sstevel@tonic-gate # define R_UNLOAD_FORM 58 104*0a44ef6dSjacobs /* # define S_GETSTATUS 59 DEFUNCT */ 105*0a44ef6dSjacobs /* # define R_GETSTATUS 60 DEFUNCT */ 1067c478bd9Sstevel@tonic-gate # define S_QUIET_ALERT 61 1077c478bd9Sstevel@tonic-gate # define R_QUIET_ALERT 62 1087c478bd9Sstevel@tonic-gate # define S_SEND_FAULT 63 1097c478bd9Sstevel@tonic-gate # define R_SEND_FAULT 64 1107c478bd9Sstevel@tonic-gate # define S_SHUTDOWN 65 1117c478bd9Sstevel@tonic-gate # define R_SHUTDOWN 66 1127c478bd9Sstevel@tonic-gate # define S_GOODBYE 67 1137c478bd9Sstevel@tonic-gate # define S_CHILD_DONE 68 1147c478bd9Sstevel@tonic-gate 1157c478bd9Sstevel@tonic-gate /* 1167c478bd9Sstevel@tonic-gate ** These are for use by the scheduler only 1177c478bd9Sstevel@tonic-gate */ 1187c478bd9Sstevel@tonic-gate # define I_GET_TYPE 69 1197c478bd9Sstevel@tonic-gate # define I_QUEUE_CHK 70 120*0a44ef6dSjacobs /* # define R_CONNECT 71 DEFUNCT */ 1217c478bd9Sstevel@tonic-gate 122*0a44ef6dSjacobs /* # define S_GET_STATUS 72 DEFUNCT */ 123*0a44ef6dSjacobs /* # define R_GET_STATUS 73 DEFUNCT */ 1247c478bd9Sstevel@tonic-gate # define S_INQUIRE_REQUEST_RANK 74 1257c478bd9Sstevel@tonic-gate # define R_INQUIRE_REQUEST_RANK 75 1267c478bd9Sstevel@tonic-gate # define S_CANCEL 76 1277c478bd9Sstevel@tonic-gate # define R_CANCEL 77 128*0a44ef6dSjacobs /* # define S_NEW_CHILD 78 DEFUNCT */ 129*0a44ef6dSjacobs /* # define R_NEW_CHILD 79 DEFUNCT */ 130*0a44ef6dSjacobs /* # define S_SEND_JOB 80 DEFUNCT */ 131*0a44ef6dSjacobs /* # define R_SEND_JOB 81 DEFUNCT */ 132*0a44ef6dSjacobs /* # define S_JOB_COMPLETED 82 DEFUNCT */ 133*0a44ef6dSjacobs /* # define R_JOB_COMPLETED 83 DEFUNCT */ 134*0a44ef6dSjacobs /* # define S_INQUIRE_REMOTE_PRINTER 84 DEFUNCT */ 135*0a44ef6dSjacobs /* # define R_INQUIRE_REMOTE_PRINTER 20 DEFUNCT */ 136*0a44ef6dSjacobs /* # define S_CHILD_SYNC 85 DEFUNCT */ 137*0a44ef6dSjacobs /* # define S_LOAD_SYSTEM 86 DEFUNCT */ 138*0a44ef6dSjacobs /* # define R_LOAD_SYSTEM 87 DEFUNCT */ 139*0a44ef6dSjacobs /* # define S_UNLOAD_SYSTEM 88 DEFUNCT */ 140*0a44ef6dSjacobs /* # define R_UNLOAD_SYSTEM 89 DEFUNCT */ 1417c478bd9Sstevel@tonic-gate /* new messages */ 1427c478bd9Sstevel@tonic-gate # define S_CLEAR_FAULT 90 1437c478bd9Sstevel@tonic-gate # define R_CLEAR_FAULT 91 1447c478bd9Sstevel@tonic-gate # define S_MOUNT_TRAY 92 1457c478bd9Sstevel@tonic-gate # define R_MOUNT_TRAY 93 1467c478bd9Sstevel@tonic-gate # define S_UNMOUNT_TRAY 94 1477c478bd9Sstevel@tonic-gate # define R_UNMOUNT_TRAY 95 1487c478bd9Sstevel@tonic-gate # define S_MAX_TRAYS 96 1497c478bd9Sstevel@tonic-gate # define R_MAX_TRAYS 97 1507c478bd9Sstevel@tonic-gate # define S_PAPER_CHANGED 98 1517c478bd9Sstevel@tonic-gate # define R_PAPER_CHANGED 99 1527c478bd9Sstevel@tonic-gate # define S_PAPER_ALLOWED 100 1537c478bd9Sstevel@tonic-gate # define R_PAPER_ALLOWED 101 15445916cd2Sjpk # define S_PASS_PEER_CONNECTION 102 15545916cd2Sjpk # define R_PASS_PEER_CONNECTION 103 1567c478bd9Sstevel@tonic-gate /* 1577c478bd9Sstevel@tonic-gate ** Last available message 1587c478bd9Sstevel@tonic-gate */ 15945916cd2Sjpk # define LAST_MESSAGE 104 1607c478bd9Sstevel@tonic-gate 1617c478bd9Sstevel@tonic-gate /* 1627c478bd9Sstevel@tonic-gate ** These are the possible status codes returned by the scheduler 1637c478bd9Sstevel@tonic-gate */ 1647c478bd9Sstevel@tonic-gate # define MOK 0 1657c478bd9Sstevel@tonic-gate # define MOKMORE 1 1667c478bd9Sstevel@tonic-gate # define MOKREMOTE 2 1677c478bd9Sstevel@tonic-gate # define MMORERR 3 1687c478bd9Sstevel@tonic-gate # define MNODEST 4 1697c478bd9Sstevel@tonic-gate # define MERRDEST 5 1707c478bd9Sstevel@tonic-gate # define MDENYDEST 6 1717c478bd9Sstevel@tonic-gate # define MNOMEDIA 7 1727c478bd9Sstevel@tonic-gate # define MDENYMEDIA 8 1737c478bd9Sstevel@tonic-gate # define MNOFILTER 9 1747c478bd9Sstevel@tonic-gate # define MNOINFO 10 1757c478bd9Sstevel@tonic-gate # define MNOMEM 11 1767c478bd9Sstevel@tonic-gate # define MNOMOUNT 12 1777c478bd9Sstevel@tonic-gate # define MNOOPEN 13 1787c478bd9Sstevel@tonic-gate # define MNOPERM 14 1797c478bd9Sstevel@tonic-gate # define MNOSTART 15 1807c478bd9Sstevel@tonic-gate # define MUNKNOWN 16 1817c478bd9Sstevel@tonic-gate # define M2LATE 17 1827c478bd9Sstevel@tonic-gate # define MNOSPACE 18 1837c478bd9Sstevel@tonic-gate # define MBUSY 19 1847c478bd9Sstevel@tonic-gate # define MTRANSMITERR 20 1857c478bd9Sstevel@tonic-gate # define MNOMORE 21 1867c478bd9Sstevel@tonic-gate # define MGONEREMOTE 22 1877c478bd9Sstevel@tonic-gate # define MNOTRAY 23 1887c478bd9Sstevel@tonic-gate 1897c478bd9Sstevel@tonic-gate /* 1907c478bd9Sstevel@tonic-gate ** Offsets and lengths of the various elements of the message header. 1917c478bd9Sstevel@tonic-gate ** 1927c478bd9Sstevel@tonic-gate ** Macro Data Type Size Comment 1937c478bd9Sstevel@tonic-gate ** 1947c478bd9Sstevel@tonic-gate ** HEAD_RESYNC 2 bytes (2) * 1957c478bd9Sstevel@tonic-gate ** HEAD_AUTHCODE short + long (6) * 1967c478bd9Sstevel@tonic-gate ** 1977c478bd9Sstevel@tonic-gate ** HEAD_SIZE 4 bytes (4) \ 1987c478bd9Sstevel@tonic-gate ** HEAD_TYPE 4 bytes (4) > message propper 1997c478bd9Sstevel@tonic-gate ** HEAD_DATA n bytes (n) / 2007c478bd9Sstevel@tonic-gate ** 2017c478bd9Sstevel@tonic-gate ** TAIL_CHKSUM 4 bytes (4) * 2027c478bd9Sstevel@tonic-gate ** TAIL_ENDSYNC 2 bytes (2) * 2037c478bd9Sstevel@tonic-gate ** 2047c478bd9Sstevel@tonic-gate ** Items marked with an asterisk are only used with the 3.2 2057c478bd9Sstevel@tonic-gate ** Spooler protocol. 2067c478bd9Sstevel@tonic-gate */ 2077c478bd9Sstevel@tonic-gate 2087c478bd9Sstevel@tonic-gate /* 2097c478bd9Sstevel@tonic-gate ** 3.2 Protocol Header Information: 2107c478bd9Sstevel@tonic-gate ** 2-byte message introduction 2117c478bd9Sstevel@tonic-gate ** 6-byte client authorization data 2127c478bd9Sstevel@tonic-gate */ 2137c478bd9Sstevel@tonic-gate #define HEAD_RESYNC (0) 2147c478bd9Sstevel@tonic-gate #define HEAD_RESYNC_LEN 2 2157c478bd9Sstevel@tonic-gate #define HEAD_AUTHCODE (HEAD_RESYNC + HEAD_RESYNC_LEN) 2167c478bd9Sstevel@tonic-gate #define HEAD_AUTHCODE_LEN (sizeof(short) + sizeof(long)) 2177c478bd9Sstevel@tonic-gate 2187c478bd9Sstevel@tonic-gate /* 2197c478bd9Sstevel@tonic-gate ** 3.2 Protocol Message Information: 2207c478bd9Sstevel@tonic-gate ** 4-byte message size 2217c478bd9Sstevel@tonic-gate ** 4-byte message type 2227c478bd9Sstevel@tonic-gate ** n-byte message data 2237c478bd9Sstevel@tonic-gate */ 2247c478bd9Sstevel@tonic-gate #define HEAD_SIZE (HEAD_AUTHCODE + HEAD_AUTHCODE_LEN) 2257c478bd9Sstevel@tonic-gate #define HEAD_SIZE_LEN 4 2267c478bd9Sstevel@tonic-gate #define HEAD_TYPE (HEAD_SIZE + HEAD_SIZE_LEN) 2277c478bd9Sstevel@tonic-gate #define HEAD_TYPE_LEN 4 2287c478bd9Sstevel@tonic-gate #define HEAD_DATA (HEAD_TYPE + HEAD_TYPE_LEN) 2297c478bd9Sstevel@tonic-gate 2307c478bd9Sstevel@tonic-gate /* 2317c478bd9Sstevel@tonic-gate ** 3.2 Protocol Size of non-data header information 2327c478bd9Sstevel@tonic-gate */ 2337c478bd9Sstevel@tonic-gate #define HEAD_LEN HEAD_DATA 2347c478bd9Sstevel@tonic-gate 2357c478bd9Sstevel@tonic-gate /* 2367c478bd9Sstevel@tonic-gate ** Equivalents for 4.0 protocol 2377c478bd9Sstevel@tonic-gate */ 2387c478bd9Sstevel@tonic-gate #define MESG_SIZE (0) 2397c478bd9Sstevel@tonic-gate #define MESG_SIZE_LEN 4 2407c478bd9Sstevel@tonic-gate #define MESG_TYPE (MESG_SIZE + MESG_SIZE_LEN) 2417c478bd9Sstevel@tonic-gate #define MESG_TYPE_LEN 4 2427c478bd9Sstevel@tonic-gate #define MESG_DATA (MESG_TYPE + MESG_TYPE_LEN) 2437c478bd9Sstevel@tonic-gate 2447c478bd9Sstevel@tonic-gate #define MESG_LEN MESG_DATA 2457c478bd9Sstevel@tonic-gate 2467c478bd9Sstevel@tonic-gate /* 2477c478bd9Sstevel@tonic-gate ** 3.2 Protocol Trailer Information: 2487c478bd9Sstevel@tonic-gate ** 4-byte message check sum 2497c478bd9Sstevel@tonic-gate ** 2-byte message closing identifier 2507c478bd9Sstevel@tonic-gate ** 2517c478bd9Sstevel@tonic-gate ** "N" is the decoded value of buffer[HEAD_SIZE]. This must 2527c478bd9Sstevel@tonic-gate ** be provided because messages are variable length. 2537c478bd9Sstevel@tonic-gate */ 2547c478bd9Sstevel@tonic-gate #define TAIL_ENDSYNC_LEN 2 2557c478bd9Sstevel@tonic-gate #define TAIL_ENDSYNC(N) (N - TAIL_ENDSYNC_LEN) 2567c478bd9Sstevel@tonic-gate #define TAIL_CHKSUM_LEN 4 2577c478bd9Sstevel@tonic-gate #define TAIL_CHKSUM(N) (TAIL_ENDSYNC(N) - TAIL_CHKSUM_LEN) 2587c478bd9Sstevel@tonic-gate 2597c478bd9Sstevel@tonic-gate /* 2607c478bd9Sstevel@tonic-gate ** 3.2 Protocol Size of non-data trailer information 2617c478bd9Sstevel@tonic-gate */ 2627c478bd9Sstevel@tonic-gate #define TAIL_LEN (TAIL_CHKSUM_LEN + TAIL_ENDSYNC_LEN) 2637c478bd9Sstevel@tonic-gate 2647c478bd9Sstevel@tonic-gate /* 2657c478bd9Sstevel@tonic-gate ** 3.2 Protocol Size of all non-data information 2667c478bd9Sstevel@tonic-gate ** (This is also the minimum size for 3.2 protocol messages) 2677c478bd9Sstevel@tonic-gate */ 2687c478bd9Sstevel@tonic-gate #define CONTROL_LEN (HEAD_LEN + TAIL_LEN) 2697c478bd9Sstevel@tonic-gate 2707c478bd9Sstevel@tonic-gate /* 2717c478bd9Sstevel@tonic-gate ** Size of excess data induced by 3.2 Protocol. 2727c478bd9Sstevel@tonic-gate ** (This is also the size differance between 3.2 & 4.0 protocols) 2737c478bd9Sstevel@tonic-gate */ 2747c478bd9Sstevel@tonic-gate #define EXCESS_3_2_LEN (HEAD_SIZE + TAIL_LEN) 2757c478bd9Sstevel@tonic-gate /** 2767c478bd9Sstevel@tonic-gate ** Checksum: 2777c478bd9Sstevel@tonic-gate **/ 2787c478bd9Sstevel@tonic-gate #define CALC_CHKSUM(B,SZ,RC) \ 2797c478bd9Sstevel@tonic-gate if (SZ >= CONTROL_LEN) \ 2807c478bd9Sstevel@tonic-gate { \ 2817c478bd9Sstevel@tonic-gate register unsigned char *p = (unsigned char *)B, \ 2827c478bd9Sstevel@tonic-gate *pend = p + SZ - TAIL_LEN; \ 2837c478bd9Sstevel@tonic-gate RC = 0; \ 2847c478bd9Sstevel@tonic-gate while (p < pend) \ 2857c478bd9Sstevel@tonic-gate RC += *p++; /* let it overflow */ \ 2867c478bd9Sstevel@tonic-gate } \ 2877c478bd9Sstevel@tonic-gate else \ 2887c478bd9Sstevel@tonic-gate return ((errno = EINVAL, -1)) 2897c478bd9Sstevel@tonic-gate 2907c478bd9Sstevel@tonic-gate /* 2917c478bd9Sstevel@tonic-gate ** Largest size permitted for any given message 2927c478bd9Sstevel@tonic-gate */ 2937c478bd9Sstevel@tonic-gate # define MSGMAX 2048 2947c478bd9Sstevel@tonic-gate 2957c478bd9Sstevel@tonic-gate /* 2967c478bd9Sstevel@tonic-gate ** Possible values of the type field of S_QUIET_ALERT 2977c478bd9Sstevel@tonic-gate */ 2987c478bd9Sstevel@tonic-gate # define QA_FORM 1 2997c478bd9Sstevel@tonic-gate # define QA_PRINTER 2 3007c478bd9Sstevel@tonic-gate # define QA_PRINTWHEEL 3 3017c478bd9Sstevel@tonic-gate 3027c478bd9Sstevel@tonic-gate typedef struct strbuf strbuf_t; /* STREAMS buffer */ 3037c478bd9Sstevel@tonic-gate 3047c478bd9Sstevel@tonic-gate typedef struct mque 3057c478bd9Sstevel@tonic-gate { 3067c478bd9Sstevel@tonic-gate struct mque *next; 3077c478bd9Sstevel@tonic-gate struct strbuf *dat; 3087c478bd9Sstevel@tonic-gate } MQUE; 3097c478bd9Sstevel@tonic-gate 3107c478bd9Sstevel@tonic-gate /* 3117c478bd9Sstevel@tonic-gate ** Definition of a message descriptor 3127c478bd9Sstevel@tonic-gate */ 3137c478bd9Sstevel@tonic-gate typedef struct 3147c478bd9Sstevel@tonic-gate { 3157c478bd9Sstevel@tonic-gate short type; /* type of connection */ 3167c478bd9Sstevel@tonic-gate int readfd; /* STREAM fd to read from */ 3177c478bd9Sstevel@tonic-gate int writefd; /* STREAM fd to write to */ 3187c478bd9Sstevel@tonic-gate int wait; /* number of systems waiting for */ 3197c478bd9Sstevel@tonic-gate char *file; /* pipe name if type==MD_FIFO */ 3207c478bd9Sstevel@tonic-gate short state; /* Current state of client */ 3217c478bd9Sstevel@tonic-gate short admin; /* Non zero if admin */ 3227c478bd9Sstevel@tonic-gate short event; /* Event returned from poll */ 3237c478bd9Sstevel@tonic-gate MQUE * mque; /* backlogged message ptr */ 3247c478bd9Sstevel@tonic-gate uid_t uid; /* Clients UID */ 3257c478bd9Sstevel@tonic-gate gid_t gid; /* Clients GID */ 32645916cd2Sjpk char * slabel; /* Clients SLABEL */ 3277c478bd9Sstevel@tonic-gate void (**on_discon)(); /* Clean up functions */ 3287c478bd9Sstevel@tonic-gate } MESG; 3297c478bd9Sstevel@tonic-gate 3307c478bd9Sstevel@tonic-gate # define MDSIZE (sizeof(MESG)) 3317c478bd9Sstevel@tonic-gate 3327c478bd9Sstevel@tonic-gate /* 3337c478bd9Sstevel@tonic-gate ** Possible values of MESG.state 3347c478bd9Sstevel@tonic-gate */ 3357c478bd9Sstevel@tonic-gate # define MDS_IDLE 0 3367c478bd9Sstevel@tonic-gate 3377c478bd9Sstevel@tonic-gate # define MDS_32PROTO 320 3387c478bd9Sstevel@tonic-gate # define MDS_32CONNECT 321 3397c478bd9Sstevel@tonic-gate 3407c478bd9Sstevel@tonic-gate /* 3417c478bd9Sstevel@tonic-gate ** Possible values of MESG.type 3427c478bd9Sstevel@tonic-gate */ 3437c478bd9Sstevel@tonic-gate # define MD_UNKNOWN 0 /* We don't know just yet */ 3447c478bd9Sstevel@tonic-gate # define MD_STREAM 1 /* 4.0 STREAMS pipe protocol */ 3457c478bd9Sstevel@tonic-gate # define MD_BOUND 2 /* 4.0 STREAMS fd protocol */ 3467c478bd9Sstevel@tonic-gate # define MD_SYS_FIFO 3 /* 3.2 named-pipe protocol */ 3477c478bd9Sstevel@tonic-gate # define MD_USR_FIFO 4 /* 3.2 named-pipe protocol */ 3487c478bd9Sstevel@tonic-gate # define MD_MASTER 5 /* MD_STREAM used by lpsched */ 3497c478bd9Sstevel@tonic-gate # define MD_CHILD 6 /* MD_STREAM to a child process */ 3507c478bd9Sstevel@tonic-gate 3517c478bd9Sstevel@tonic-gate /* 3527c478bd9Sstevel@tonic-gate ** Definition for a FIFO buffer (used 3537c478bd9Sstevel@tonic-gate ** in read_fifo. 3547c478bd9Sstevel@tonic-gate */ 3557c478bd9Sstevel@tonic-gate typedef struct 3567c478bd9Sstevel@tonic-gate { 3577c478bd9Sstevel@tonic-gate int full; 3587c478bd9Sstevel@tonic-gate char save [MSGMAX], 3597c478bd9Sstevel@tonic-gate *psave, 3607c478bd9Sstevel@tonic-gate *psave_end; 3617c478bd9Sstevel@tonic-gate } fifobuffer_t; 3627c478bd9Sstevel@tonic-gate 3637c478bd9Sstevel@tonic-gate /* 3647c478bd9Sstevel@tonic-gate ** Definitions for the rest of the world and lint 3657c478bd9Sstevel@tonic-gate */ 3667c478bd9Sstevel@tonic-gate /* 3677c478bd9Sstevel@tonic-gate ** Server functions in order of usage 3687c478bd9Sstevel@tonic-gate */ 3697c478bd9Sstevel@tonic-gate MESG * mcreate ( char * ); 3707c478bd9Sstevel@tonic-gate int mlisteninit ( MESG * ); 3717c478bd9Sstevel@tonic-gate MESG * mlisten ( void ); 3727c478bd9Sstevel@tonic-gate int mlistenadd ( MESG *, short ); 3737c478bd9Sstevel@tonic-gate int mon_discon ( MESG *, void (*)()); 3747c478bd9Sstevel@tonic-gate MESG * mlistenreset ( void ); 3757c478bd9Sstevel@tonic-gate int mdestroy ( MESG * ); 3767c478bd9Sstevel@tonic-gate 3777c478bd9Sstevel@tonic-gate /* 3787c478bd9Sstevel@tonic-gate ** Client functions in order of typical usage 3797c478bd9Sstevel@tonic-gate */ 3807c478bd9Sstevel@tonic-gate MESG * mconnect ( char *, int, int ); 3817c478bd9Sstevel@tonic-gate int mgetm ( MESG *, int, ... ); 3827c478bd9Sstevel@tonic-gate int mwrite ( MESG *, char * ); 3837c478bd9Sstevel@tonic-gate int mputm ( MESG *, int, ... ); 3847c478bd9Sstevel@tonic-gate int mread ( MESG *, char *, int ); 3857c478bd9Sstevel@tonic-gate short msize ( char * ); 3867c478bd9Sstevel@tonic-gate short mpeek ( MESG * ); 3877c478bd9Sstevel@tonic-gate int mdisconnect ( MESG * ); 3887c478bd9Sstevel@tonic-gate 3897c478bd9Sstevel@tonic-gate /* 3907c478bd9Sstevel@tonic-gate ** This may be called to deallocate internal buffers allocated 3917c478bd9Sstevel@tonic-gate ** by mgetm and mputm. Probably not useful except right before 3927c478bd9Sstevel@tonic-gate ** a fork(). 3937c478bd9Sstevel@tonic-gate */ 3947c478bd9Sstevel@tonic-gate void __mbfree ( void ); 3957c478bd9Sstevel@tonic-gate 3967c478bd9Sstevel@tonic-gate /* 3977c478bd9Sstevel@tonic-gate ** Client functions for pre-4.0 compatability 3987c478bd9Sstevel@tonic-gate */ 3997c478bd9Sstevel@tonic-gate int mclose ( void ); 4007c478bd9Sstevel@tonic-gate int mneeds ( void ); 4017c478bd9Sstevel@tonic-gate int mopen ( void ); 4027c478bd9Sstevel@tonic-gate int mrecv ( char *, int ); 4037c478bd9Sstevel@tonic-gate int msend ( char * ); 4047c478bd9Sstevel@tonic-gate 4057c478bd9Sstevel@tonic-gate int Putmsg (MESG *, strbuf_t *, strbuf_t *, int); 4067c478bd9Sstevel@tonic-gate int Getmsg (MESG *, strbuf_t *, strbuf_t *, int *); 4077c478bd9Sstevel@tonic-gate int read3_2 (MESG * md, char *msgbuf, int size); 4087c478bd9Sstevel@tonic-gate int write3_2 (MESG *, char *, int); 4097c478bd9Sstevel@tonic-gate int read_fifo (int, char *, unsigned int); 4107c478bd9Sstevel@tonic-gate int write_fifo (int, char *, unsigned int); 4117c478bd9Sstevel@tonic-gate int ResetFifoBuffer (int); 4127c478bd9Sstevel@tonic-gate fifobuffer_t *GetFifoBuffer (int); 4137c478bd9Sstevel@tonic-gate 4147c478bd9Sstevel@tonic-gate /* 4157c478bd9Sstevel@tonic-gate ** General purpose message manipulating functions 4167c478bd9Sstevel@tonic-gate */ 4177c478bd9Sstevel@tonic-gate char * htos ( char *, unsigned short ); 4187c478bd9Sstevel@tonic-gate char * ltos ( char *, unsigned long ); 4197c478bd9Sstevel@tonic-gate unsigned long stol ( char * ); 4207c478bd9Sstevel@tonic-gate unsigned short stoh ( char * ); 4217c478bd9Sstevel@tonic-gate int _getmessage ( char *, short, va_list ); 4227c478bd9Sstevel@tonic-gate int _putmessage ( char *, short, va_list ); 4237c478bd9Sstevel@tonic-gate int getmessage ( char *, short, ... ); 4247c478bd9Sstevel@tonic-gate int putmessage ( char *, short, ... ); 4257c478bd9Sstevel@tonic-gate 4267c478bd9Sstevel@tonic-gate /* 4277c478bd9Sstevel@tonic-gate ** This will yield the type of a message 4287c478bd9Sstevel@tonic-gate */ 4297c478bd9Sstevel@tonic-gate # define mtype(buffer) (getmessage(buffer, I_GET_TYPE)) 4307c478bd9Sstevel@tonic-gate 4317c478bd9Sstevel@tonic-gate /* 4327c478bd9Sstevel@tonic-gate ** This will yeild the size of a message 4337c478bd9Sstevel@tonic-gate */ 4347c478bd9Sstevel@tonic-gate # define msize(buffer) (stoh(buffer)) 4357c478bd9Sstevel@tonic-gate 4367c478bd9Sstevel@tonic-gate /* 4377c478bd9Sstevel@tonic-gate ** Pass this for the request-id argument of S_CANCEL 4387c478bd9Sstevel@tonic-gate ** to obtain the effect of the 3.2 S_CANCEL_REQUEST. 4397c478bd9Sstevel@tonic-gate */ 4407c478bd9Sstevel@tonic-gate # define CURRENT_REQ "current" 4417c478bd9Sstevel@tonic-gate 4427c478bd9Sstevel@tonic-gate #endif /* !defined (_LP_MSGS_H) */ 443