Home | History | Annotate | Download | only in lpsched
      1     0  stevel /*
      2     0  stevel  * CDDL HEADER START
      3     0  stevel  *
      4     0  stevel  * The contents of this file are subject to the terms of the
      5  1676     jpk  * Common Development and Distribution License (the "License").
      6  1676     jpk  * You may not use this file except in compliance with the License.
      7     0  stevel  *
      8     0  stevel  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9     0  stevel  * or http://www.opensolaris.org/os/licensing.
     10     0  stevel  * See the License for the specific language governing permissions
     11     0  stevel  * and limitations under the License.
     12     0  stevel  *
     13     0  stevel  * When distributing Covered Code, include this CDDL HEADER in each
     14     0  stevel  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15     0  stevel  * If applicable, add the following below this CDDL HEADER, with the
     16     0  stevel  * fields enclosed by brackets "[]" replaced with your own identifying
     17     0  stevel  * information: Portions Copyright [yyyy] [name of copyright owner]
     18     0  stevel  *
     19     0  stevel  * CDDL HEADER END
     20     0  stevel  */
     21     0  stevel /*
     22  9982   Sonam  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
     23     0  stevel  * Use is subject to license terms.
     24     0  stevel  */
     25     0  stevel 
     26     0  stevel /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
     27     0  stevel /*	  All Rights Reserved  	*/
     28     0  stevel 
     29  9982   Sonam #include	"dispatch.h"
     30     0  stevel #include <syslog.h>
     31     0  stevel 
     32     0  stevel static void		r_H(),
     33     0  stevel 			r_HS();
     34     0  stevel 
     35     0  stevel static DISPATCH			dispatch_table[] = {
     36  9982   Sonam /* R_BAD_MESSAGE		*/	0,		D_BADMSG,
     37  9982   Sonam /* S_NEW_QUEUE			*/	0,			D_BADMSG,
     38  9982   Sonam /* R_NEW_QUEUE			*/	0,			D_BADMSG,
     39  9982   Sonam /* S_ALLOC_FILES		*/	s_alloc_files,		0,
     40  9982   Sonam /* R_ALLOC_FILES		*/	0,			D_BADMSG,
     41  9982   Sonam /* S_PRINT_REQUEST		*/	s_print_request,	0,
     42  9982   Sonam /* R_PRINT_REQUEST		*/	0,			D_BADMSG,
     43  9982   Sonam /* S_START_CHANGE_REQUEST	*/	s_start_change_request,	0,
     44  9982   Sonam /* R_START_CHANGE_REQUEST	*/	0,			D_BADMSG,
     45  9982   Sonam /* S_END_CHANGE_REQUEST		*/	s_end_change_request,	0,
     46  9982   Sonam /* R_END_CHANGE_REQUEST		*/	0,			D_BADMSG,
     47  9982   Sonam /* S_CANCEL_REQUEST		*/	s_cancel_request,	0,
     48  9982   Sonam /* R_CANCEL_REQUEST		*/	0,			D_BADMSG,
     49  9982   Sonam /* S_INQUIRE_REQUEST		*/	0,			D_BADMSG,
     50  9982   Sonam /* R_INQUIRE_REQUEST		*/	0,			D_BADMSG,
     51  9982   Sonam /* S_LOAD_PRINTER		*/	s_load_printer,		D_ADMIN,
     52  9982   Sonam /* R_LOAD_PRINTER		*/	r_H,			D_BADMSG,
     53  9982   Sonam /* S_UNLOAD_PRINTER		*/	s_unload_printer,	D_ADMIN,
     54  9982   Sonam /* R_UNLOAD_PRINTER		*/	r_H,			D_BADMSG,
     55  9982   Sonam /* S_INQUIRE_PRINTER_STATUS	*/	s_inquire_printer_status, 0,
     56  9982   Sonam /* R_INQUIRE_PRINTER_STATUS	*/	0,			D_BADMSG,
     57  9982   Sonam /* S_LOAD_CLASS			*/	s_load_class,		D_ADMIN,
     58  9982   Sonam /* R_LOAD_CLASS			*/	r_H,			D_BADMSG,
     59  9982   Sonam /* S_UNLOAD_CLASS		*/	s_unload_class,		D_ADMIN,
     60  9982   Sonam /* R_UNLOAD_CLASS		*/	r_H,			D_BADMSG,
     61  9982   Sonam /* S_INQUIRE_CLASS		*/	s_inquire_class,	0,
     62  9982   Sonam /* R_INQUIRE_CLASS		*/	0,			D_BADMSG,
     63  9982   Sonam /* S_MOUNT			*/	s_mount,		D_ADMIN,
     64  9982   Sonam /* R_MOUNT			*/	r_H,			D_BADMSG,
     65  9982   Sonam /* S_UNMOUNT			*/	s_unmount,		D_ADMIN,
     66  9982   Sonam /* R_UNMOUNT			*/	r_H,			D_BADMSG,
     67  9982   Sonam /* S_MOVE_REQUEST		*/	s_move_request,		D_ADMIN,
     68  9982   Sonam /* R_MOVE_REQUEST		*/	r_H,			D_BADMSG,
     69  9982   Sonam /* S_MOVE_DEST			*/	s_move_dest,		D_ADMIN,
     70  9982   Sonam /* R_MOVE_DEST			*/	r_HS,			D_BADMSG,
     71  9982   Sonam /* S_ACCEPT_DEST		*/	s_accept_dest,		D_ADMIN,
     72  9982   Sonam /* R_ACCEPT_DEST		*/	r_H,			D_BADMSG,
     73  9982   Sonam /* S_REJECT_DEST		*/	s_reject_dest,		D_ADMIN,
     74  9982   Sonam /* R_REJECT_DEST		*/	r_H,			D_BADMSG,
     75  9982   Sonam /* S_ENABLE_DEST		*/	s_enable_dest,		D_ADMIN,
     76  9982   Sonam /* R_ENABLE_DEST		*/	r_H,			D_BADMSG,
     77  9982   Sonam /* S_DISABLE_DEST		*/	s_disable_dest,		D_ADMIN,
     78  9982   Sonam /* R_DISABLE_DEST		*/	r_HS,			D_BADMSG,
     79  9982   Sonam /* S_LOAD_FILTER_TABLE		*/	s_load_filter_table,	D_ADMIN,
     80  9982   Sonam /* R_LOAD_FILTER_TABLE		*/	r_H,			D_BADMSG,
     81  9982   Sonam /* S_UNLOAD_FILTER_TABLE	*/	s_unload_filter_table,	D_ADMIN,
     82  9982   Sonam /* R_UNLOAD_FILTER_TABLE	*/	r_H,			D_BADMSG,
     83  9982   Sonam /* S_LOAD_PRINTWHEEL		*/	s_load_printwheel,	D_ADMIN,
     84  9982   Sonam /* R_LOAD_PRINTWHEEL		*/	r_H,			D_BADMSG,
     85  9982   Sonam /* S_UNLOAD_PRINTWHEEL		*/	s_unload_printwheel,	D_ADMIN,
     86  9982   Sonam /* R_UNLOAD_PRINTWHEEL		*/	r_H,			D_BADMSG,
     87  9982   Sonam /* S_LOAD_USER_FILE		*/	s_load_user_file,	D_ADMIN,
     88  9982   Sonam /* R_LOAD_USER_FILE		*/	r_H,			D_BADMSG,
     89  9982   Sonam /* S_UNLOAD_USER_FILE		*/	s_unload_user_file,	D_ADMIN,
     90  9982   Sonam /* R_UNLOAD_USER_FILE		*/	r_H,			D_BADMSG,
     91  9982   Sonam /* S_LOAD_FORM			*/	s_load_form,		D_ADMIN,
     92  9982   Sonam /* R_LOAD_FORM			*/	r_H,			D_BADMSG,
     93  9982   Sonam /* S_UNLOAD_FORM		*/	s_unload_form,		D_ADMIN,
     94  9982   Sonam /* R_UNLOAD_FORM		*/	r_H,			D_BADMSG,
     95  9982   Sonam /* S_GETSTATUS			*/	0,			D_ADMIN,
     96  9982   Sonam /* R_GETSTATUS			*/	0,			D_BADMSG,
     97  9982   Sonam /* S_QUIET_ALERT		*/	s_quiet_alert,		D_ADMIN,
     98  9982   Sonam /* R_QUIET_ALERT		*/	r_H,			D_BADMSG,
     99  9982   Sonam /* S_SEND_FAULT			*/	s_send_fault,		0,
    100  9982   Sonam /* R_SEND_FAULT			*/	0,			D_BADMSG,
    101  9982   Sonam /* S_SHUTDOWN			*/	s_shutdown,		D_ADMIN,
    102  9982   Sonam /* R_SHUTDOWN			*/	r_H,			D_BADMSG,
    103  9982   Sonam /* S_GOODBYE			*/	0,			D_BADMSG,
    104  9982   Sonam /* S_CHILD_DONE			*/	s_child_done,		0,
    105  9982   Sonam /* I_GET_TYPE			*/	0,			D_BADMSG,
    106  9982   Sonam /* I_QUEUE_CHK			*/	0,			D_BADMSG,
    107  9982   Sonam /* R_CONNECT			*/	0,			D_BADMSG,
    108  9982   Sonam /* S_GET_STATUS			*/	0,			D_BADMSG,
    109  9982   Sonam /* R_GET_STATUS			*/	0,			D_BADMSG,
    110  9982   Sonam /* S_INQUIRE_REQUEST_RANK	*/	s_inquire_request_rank,	0,
    111  9982   Sonam /* R_INQUIRE_REQUEST_RANK	*/	0,			D_BADMSG,
    112  9982   Sonam /* S_CANCEL			*/	s_cancel,		0,
    113  9982   Sonam /* R_CANCEL			*/	0,			D_BADMSG,
    114  9982   Sonam /* S_NEW_CHILD			*/	0,			D_BADMSG,
    115  9982   Sonam /* R_NEW_CHILD			*/	0,			D_BADMSG,
    116  9982   Sonam /* S_SEND_JOB			*/	0,			D_BADMSG,
    117  9982   Sonam /* R_SEND_JOB			*/	0,			D_BADMSG,
    118  9982   Sonam /* S_JOB_COMPLETED		*/	0,			D_BADMSG,
    119  9982   Sonam /* R_JOB_COMPLETED		*/	0,			D_BADMSG,
    120  9982   Sonam /* S_INQUIRE_REMOTE_PRINTER	*/	0,			D_BADMSG,
    121  9982   Sonam /* R_INQUIRE_REMOTE_PRINTER	*/	0,			D_BADMSG,
    122  9982   Sonam /* S_LOAD_SYSTEM		*/	0,			D_BADMSG,
    123  9982   Sonam /* R_LOAD_SYSTEM		*/	0,			D_BADMSG,
    124  9982   Sonam /* S_UNLOAD_SYSTEM		*/	0,			D_BADMSG,
    125  9982   Sonam /* R_UNLOAD_SYSTEM		*/	0,			D_BADMSG,
    126  9982   Sonam /* S_CLEAR_FAULT		*/	s_clear_fault,		0,
    127  9982   Sonam /* R_CLEAR_FAULT		*/	0,			D_BADMSG,
    128  9982   Sonam /* S_MOUNT_TRAY			*/	s_mount_tray,		D_ADMIN,
    129  9982   Sonam /* R_MOUNT_TRAY			*/	r_H,			D_BADMSG,
    130  9982   Sonam /* S_UNMOUNT_TRAY		*/	s_unmount_tray,		D_ADMIN,
    131  9982   Sonam /* R_UNMOUNT_TRAY		*/	r_H,			D_BADMSG,
    132  9982   Sonam /* S_MAX_TRAYS			*/	s_max_trays,		D_ADMIN,
    133  9982   Sonam /* R_MAX_TRAYS			*/	r_H,			D_BADMSG,
    134  9982   Sonam /* S_PAPER_CHANGED		*/	s_paper_changed,	0,
    135  9982   Sonam /* R_PAPER_CHANGED		*/	0,			D_BADMSG,
    136  9982   Sonam /* S_PAPER_ALLOWED		*/	s_paper_allowed,	0,
    137  9982   Sonam /* R_PAPER_ALLOWED		*/	0,	D_BADMSG,
    138  9982   Sonam /* S_PASS_PEER_CONNECTION	*/  s_pass_peer_connection,	0,
    139  9982   Sonam /* R_PASS_PEER_CONNECTION	*/  0,			D_BADMSG,
    140     0  stevel };
    141     0  stevel 
    142  9982   Sonam static char	*dispatch_names[] = {
    143     0  stevel "R_BAD_MESSAGE",
    144     0  stevel "S_NEW_QUEUE",
    145     0  stevel "R_NEW_QUEUE",
    146     0  stevel "S_ALLOC_FILES",
    147     0  stevel "R_ALLOC_FILES",
    148     0  stevel "S_PRINT_REQUEST",
    149     0  stevel "R_PRINT_REQUEST",
    150     0  stevel "S_START_CHANGE_REQUEST",
    151     0  stevel "R_START_CHANGE_REQUEST",
    152     0  stevel "S_END_CHANGE_REQUEST",
    153     0  stevel "R_END_CHANGE_REQUEST",
    154     0  stevel "S_CANCEL_REQUEST",
    155     0  stevel "R_CANCEL_REQUEST",
    156     0  stevel "S_INQUIRE_REQUEST",
    157     0  stevel "R_INQUIRE_REQUEST",
    158     0  stevel "S_LOAD_PRINTER",
    159     0  stevel "R_LOAD_PRINTER",
    160     0  stevel "S_UNLOAD_PRINTER",
    161     0  stevel "R_UNLOAD_PRINTER",
    162     0  stevel "S_INQUIRE_PRINTER_STATUS",
    163     0  stevel "R_INQUIRE_PRINTER_STATUS",
    164     0  stevel "S_LOAD_CLASS",
    165     0  stevel "R_LOAD_CLASS",
    166     0  stevel "S_UNLOAD_CLASS",
    167     0  stevel "R_UNLOAD_CLASS",
    168     0  stevel "S_INQUIRE_CLASS",
    169     0  stevel "R_INQUIRE_CLASS",
    170     0  stevel "S_MOUNT",
    171     0  stevel "R_MOUNT",
    172     0  stevel "S_UNMOUNT",
    173     0  stevel "R_UNMOUNT",
    174     0  stevel "S_MOVE_REQUEST",
    175     0  stevel "R_MOVE_REQUEST",
    176     0  stevel "S_MOVE_DEST",
    177     0  stevel "R_MOVE_DEST",
    178     0  stevel "S_ACCEPT_DEST",
    179     0  stevel "R_ACCEPT_DEST",
    180     0  stevel "S_REJECT_DEST",
    181     0  stevel "R_REJECT_DEST",
    182     0  stevel "S_ENABLE_DEST",
    183     0  stevel "R_ENABLE_DEST",
    184     0  stevel "S_DISABLE_DEST",
    185     0  stevel "R_DISABLE_DEST",
    186     0  stevel "S_LOAD_FILTER_TABLE",
    187     0  stevel "R_LOAD_FILTER_TABLE",
    188     0  stevel "S_UNLOAD_FILTER_TABLE",
    189     0  stevel "R_UNLOAD_FILTER_TABLE",
    190     0  stevel "S_LOAD_PRINTWHEEL",
    191     0  stevel "R_LOAD_PRINTWHEEL",
    192     0  stevel "S_UNLOAD_PRINTWHEEL",
    193     0  stevel "R_UNLOAD_PRINTWHEEL",
    194     0  stevel "S_LOAD_USER_FILE",
    195     0  stevel "R_LOAD_USER_FILE",
    196     0  stevel "S_UNLOAD_USER_FILE",
    197     0  stevel "R_UNLOAD_USER_FILE",
    198     0  stevel "S_LOAD_FORM",
    199     0  stevel "R_LOAD_FORM",
    200     0  stevel "S_UNLOAD_FORM",
    201     0  stevel "R_UNLOAD_FORM",
    202     0  stevel "S_GETSTATUS",
    203     0  stevel "R_GETSTATUS",
    204     0  stevel "S_QUIET_ALERT",
    205     0  stevel "R_QUIET_ALERT",
    206     0  stevel "S_SEND_FAULT",
    207     0  stevel "R_SEND_FAULT",
    208     0  stevel "S_SHUTDOWN",
    209     0  stevel "R_SHUTDOWN",
    210     0  stevel "S_GOODBYE",
    211     0  stevel "S_CHILD_DONE",
    212     0  stevel "I_GET_TYPE",
    213     0  stevel "I_QUEUE_CHK",
    214     0  stevel "R_CONNECT",
    215     0  stevel "S_GET_STATUS",
    216     0  stevel "R_GET_STATUS",
    217     0  stevel "S_INQUIRE_REQUEST_RANK",
    218     0  stevel "R_INQUIRE_REQUEST_RANK",
    219     0  stevel "S_CANCEL",
    220     0  stevel "R_CANCEL",
    221     0  stevel "S_NEW_CHILD",
    222     0  stevel "R_NEW_CHILD",
    223     0  stevel "S_SEND_JOB",
    224     0  stevel "R_SEND_JOB",
    225     0  stevel "S_JOB_COMPLETED",
    226     0  stevel "R_JOB_COMPLETED",
    227     0  stevel "S_INQUIRE_REMOTE_PRINTER",
    228     0  stevel "R_INQUIRE_REMOTE_PRINTER",
    229     0  stevel "S_LOAD_SYSTEM",
    230     0  stevel "R_LOAD_SYSTEM",
    231     0  stevel "S_UNLOAD_SYSTEM",
    232     0  stevel "R_UNLOAD_SYSTEM",
    233     0  stevel "S_CLEAR_FAULT",
    234     0  stevel "R_CLEAR_FAULT",
    235     0  stevel "S_MOUNT_TRAY",
    236     0  stevel "R_MOUNT_TRAY",
    237     0  stevel "S_UNMOUNT_TRAY",
    238     0  stevel "R_UNMOUNT_TRAY",
    239     0  stevel "S_MAX_TRAYS",
    240     0  stevel "R_MAX_TRAYS",
    241     0  stevel "S_PAPER_CHANGED",
    242     0  stevel "R_PAPER_CHANGED",
    243     0  stevel "S_PAPER_ALLOWED",
    244     0  stevel "R_PAPER_ALLOWED",
    245  1676     jpk "S_PASS_PEER_CONNECTION",
    246  1676     jpk "R_PASS_PEER_CONNECTION",
    247     0  stevel };
    248     0  stevel 
    249     0  stevel /* see include/msgs.h */
    250  9982   Sonam static char	*status_names[] = {
    251     0  stevel "MOK",
    252     0  stevel "MOKMORE",
    253     0  stevel "MOKREMOTE",
    254     0  stevel "MMORERR",
    255     0  stevel "MNODEST",
    256     0  stevel "MERRDEST",
    257     0  stevel "MDENYDEST",
    258     0  stevel "MNOMEDIA",
    259     0  stevel "MDENYMEDIA",
    260     0  stevel "MNOFILTER",
    261     0  stevel "MNOINFO",
    262     0  stevel "MNOMEM",
    263     0  stevel "MNOMOUNT",
    264     0  stevel "MNOOPEN",
    265     0  stevel "MNOPERM",
    266     0  stevel "MNOSTART",
    267     0  stevel "MUNKNOWN",
    268     0  stevel "M2LATE",
    269     0  stevel "MNOSPACE",
    270     0  stevel "MBUSY",
    271     0  stevel "MTRANSMITERR",
    272     0  stevel "MNOMORE",
    273     0  stevel "MGONEREMOTE",
    274     0  stevel "MNOTRAY"
    275     0  stevel };
    276     0  stevel 
    277  9982   Sonam #define	LAST_STATUS 23
    278     0  stevel 
    279  9982   Sonam /*
    280  9982   Sonam  * dispatchName() - ROUTINE TO GIVE ASCII DISPATCH NAME
    281  9982   Sonam  */
    282     0  stevel 
    283     0  stevel char *
    284     0  stevel dispatchName(int type)
    285     0  stevel {
    286     0  stevel 	if (type <= 0 || type > LAST_MESSAGE)
    287     0  stevel 		type = 0;
    288     0  stevel 	return (dispatch_names[type]);
    289     0  stevel }
    290     0  stevel 
    291     0  stevel char *
    292     0  stevel statusName(int status)
    293     0  stevel {
    294     0  stevel 	if (status < 0 || status > LAST_STATUS)
    295     0  stevel 		return ("unknown");
    296     0  stevel 	return (status_names[status]);
    297     0  stevel }
    298     0  stevel 
    299  9982   Sonam /*
    300  9982   Sonam  * dispatch() - DISPATCH A ROUTINE TO HANDLE A MESSAGE
    301  9982   Sonam  */
    302     0  stevel 
    303     0  stevel void
    304     0  stevel dispatch(int type, char *m, MESG *md)
    305     0  stevel {
    306     0  stevel 	register DISPATCH	*pd	= &dispatch_table[type];
    307     0  stevel 
    308  3125  jacobs 	syslog(LOG_DEBUG, "dispatch(%s, %s, 0x%8.8x)",
    309  9982   Sonam 	    dispatchName(type), m, md);
    310     0  stevel 
    311  9982   Sonam 	if (type <= 0 || type >= LAST_MESSAGE || pd->fncp == NULL)
    312  9982   Sonam 		mputm(md, R_BAD_MESSAGE);
    313     0  stevel 
    314     0  stevel 	else if (!pd->fncp || pd->flags & D_BADMSG)
    315  9982   Sonam 		mputm(md, R_BAD_MESSAGE);
    316     0  stevel 
    317     0  stevel 	else if (pd->flags & D_ADMIN && !md->admin)
    318     0  stevel 		if ((++pd)->fncp)
    319     0  stevel 			(*pd->fncp) (md, type+1);
    320     0  stevel 		else
    321  9982   Sonam 			mputm(md, R_BAD_MESSAGE);
    322     0  stevel 
    323     0  stevel 	else if (pd->flags & D_SYSTEM && md->type != MD_CHILD &&
    324  9982   Sonam 	    md->type != MD_BOUND)
    325     0  stevel 		if ((++pd)->fncp)
    326     0  stevel 			(*pd->fncp) (md, type+1);
    327     0  stevel 		else
    328  9982   Sonam 			mputm(md, R_BAD_MESSAGE);
    329     0  stevel 
    330     0  stevel 	else
    331     0  stevel 		(*pd->fncp) (m, md);
    332     0  stevel }
    333     0  stevel 
    334  9982   Sonam /*
    335  9982   Sonam  * r_H() - SEND MNOPERM RESPONSE MESSAGE
    336  9982   Sonam  * r_HS() - SEND MNOPERM RESPONSE MESSAGE
    337  9982   Sonam  */
    338     0  stevel 
    339     0  stevel static void
    340     0  stevel r_H(MESG *md, int type)
    341     0  stevel {
    342  9982   Sonam 	mputm(md, type, MNOPERM);
    343     0  stevel }
    344     0  stevel 
    345     0  stevel static void
    346     0  stevel r_HS(MESG *md, int type)
    347     0  stevel {
    348  9982   Sonam 	mputm(md, type, MNOPERM, "");
    349     0  stevel }
    350