6 * Copyright (C) 1987 by the Massachusetts Institute of Technology
9 * Revision 1.3 1987-06-04 01:35:01 wesommer
10 * Added a working query request handler.
12 * Revision 1.2 87/06/03 16:07:50 wesommer
15 * Revision 1.1 87/06/02 20:07:10 wesommer
21 static char *rcsid_sms_scall_c = "$Header$";
26 #include "sms_private.h"
27 #include "sms_server.h"
32 extern void clist_delete(), do_auth(), do_shutdown();
36 * Welcome to the (finite state) machine (highest level).
42 if (OP_STATUS(cp->pending_op) == OP_CANCELLED) {
43 (void) sprintf(buf1, "Closed connection (now %d client%s)",
46 com_err(whoami, 0, buf1);
53 /* Start recieving next request */
54 initialize_operation(cp->pending_op, sms_start_recv,
55 (char *)&cp->args, (int (*)())NULL);
56 queue_operation(cp->con, CON_INPUT, cp->pending_op);
57 cp->action = CL_RECEIVE;
60 /* Data is here. Process it & start it heading back */
61 do_call(cp); /* This may block for a while. */
62 initialize_operation(cp->pending_op, sms_start_send,
63 (char *)&cp->reply, (int (*)())NULL);
64 queue_operation(cp->con, CON_OUTPUT, cp->pending_op);
84 cl->reply.sms_argc = 0;
85 cl->reply.sms_status = 0;
86 if (((pn = cl->args->sms_procno) < 0) ||
87 (pn > SMS_MAX_PROC)) {
88 com_err(whoami, 0, "procno out of range");
89 cl->reply.sms_status = SMS_UNKNOWN_PROC;
93 fprintf(stderr, "[#%d] %s(", cl->id, procnames[pn]);
94 for (i=0; i < cl->args->sms_argc; i++) {
95 if (i) fputc(',', stderr);
96 frequote(stderr,cl->args->sms_argv[i]);
98 fprintf(stderr, ")\n");
103 cl->reply.sms_status = 0;
104 com_err(whoami, 0, "noop");
120 retr_callback(argc, argv, p_cp)
125 register client *cp = (client *)p_cp;
126 /* XXX MEM when are these freed?? */
128 * This takes too much advantage of the fact that
129 * serialization of the data happens during the queue operation.
131 sms_params *arg_tmp = (sms_params *)db_alloc(sizeof(sms_params));
132 OPERATION op_tmp = create_operation();
135 #ifdef notdef /* We really don't want this logged */
136 com_err(whoami, 0, "Returning next data:");
137 log_args(argc, argv);
140 arg_tmp->sms_status = SMS_MORE_DATA;
141 arg_tmp->sms_argc = argc;
142 arg_tmp->sms_argv = argv;
143 arg_tmp->sms_flattened = (char *)NULL;
144 arg_tmp->sms_argl = (int *)NULL;
145 reset_operation(op_tmp);
146 initialize_operation(op_tmp, sms_start_send, (char *)arg_tmp,
148 queue_operation(cp->con, CON_OUTPUT, op_tmp);
155 cl->reply.sms_argc = 0;
156 cl->reply.sms_status = 0;
159 com_err(whoami, 0, "Unauthenticated query rejected");
160 cl->reply.sms_status = EACCES;
163 com_err(whoami, 0, "Processing query: ");
164 log_args(cl->args->sms_argc, cl->args->sms_argv);
166 sms_process_query(cl->args->sms_argv[0],
167 cl->args->sms_argc-1,
168 cl->args->sms_argv+1,
172 com_err(whoami, 0, "Query complete.");