home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3 (Developer)…68k, x86, SPARC, PA-RISC] / NeXTSTEP 3.3 Dev Intel.iso / NextLibrary / Documentation / NextDev / Examples / ServerVsHandler / simple_handler / simple_handler.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-01-27  |  1.2 KB  |  58 lines

  1. #include "simple_handler.h"
  2. #include "simpleServer.c"
  3. #include <sys/mig_errors.h>
  4.  
  5. /*
  6.  * The port argument in each of the following is actually a pointer
  7.  * to a structure containing pointers to functions to call for each of
  8.  * the following messages.
  9.  */
  10.  
  11. kern_return_t simple_puts (
  12.     port_t simple_port,
  13.     simple_msg_t string)
  14. {
  15.     simple_t *simple = (simple_t *)simple_port;
  16.  
  17.     if (simple->puts == 0)
  18.         return MIG_BAD_ID;
  19.     return (*simple->puts)(simple->arg, string);
  20. }
  21.  
  22. kern_return_t simple_vers (
  23.     port_t simple_port,
  24.     simple_msg_t string)
  25. {
  26.     simple_t *simple = (simple_t *)simple_port;
  27.  
  28.     if (simple->vers == 0)
  29.         return MIG_BAD_ID;
  30.     return (*simple->vers)(simple->arg, string);
  31. }
  32.  
  33. kern_return_t simple_handler (
  34.     msg_header_t *msg,
  35.     simple_t *simple)
  36. {
  37.     kern_return_t ret_code;
  38.     port_t local_port = msg->msg_local_port;
  39.     extern death_pill_t *simple_outmsg;
  40.  
  41.     msg->msg_local_port = (port_t)simple;
  42.  
  43.     simple_server(msg, (msg_header_t *)simple_outmsg);
  44.     ret_code = simple_outmsg->RetCode;
  45.  
  46.     if (simple_outmsg->RetCode == MIG_NO_REPLY)
  47.         ret_code = KERN_SUCCESS;
  48.     else
  49.         ret_code = msg_send(
  50.             &simple_outmsg->Head,
  51.               simple->timeout >= 0
  52.             ? SEND_TIMEOUT
  53.             : MSG_OPTION_NONE,
  54.             simple->timeout);
  55.  
  56.     return ret_code;
  57. }
  58.