home *** CD-ROM | disk | FTP | other *** search
/ Big Green CD 8 / BGCD_8_Dev.iso / NEXTSTEP / Connectivity / GateKeeper-2.1 / nsRPCServer.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-08-07  |  2.9 KB  |  132 lines

  1. /* Module nsRPC */
  2.  
  3. #define EXPORT_BOOLEAN
  4. #include <mach/boolean.h>
  5. #include <mach/message.h>
  6. #include <mach/mig_errors.h>
  7.  
  8. #ifndef    mig_internal
  9. #define    mig_internal    static
  10. #endif
  11.  
  12. #ifndef    TypeCheck
  13. #define    TypeCheck 1
  14. #endif
  15.  
  16. #ifndef    UseExternRCSId
  17. #ifdef    hc
  18. #define    UseExternRCSId        1
  19. #endif
  20. #endif
  21.  
  22. #ifndef    UseStaticMsgType
  23. #if    !defined(hc) || defined(__STDC__)
  24. #define    UseStaticMsgType    1
  25. #endif
  26. #endif
  27.  
  28. #define novalue void
  29.  
  30. #define msg_request_port    msg_local_port
  31. #define msg_reply_port        msg_remote_port
  32. #include <mach/std_types.h>
  33.  
  34. /* Routine pppUp */
  35. mig_internal novalue _XpppUp
  36.     (msg_header_t *InHeadP, msg_header_t *OutHeadP)
  37. {
  38.     typedef struct {
  39.         msg_header_t Head;
  40.     } Request;
  41.  
  42.     typedef struct {
  43.         msg_header_t Head;
  44.         msg_type_t RetCodeType;
  45.         kern_return_t RetCode;
  46.     } Reply;
  47.  
  48.     register Request *In0P = (Request *) InHeadP;
  49.     register Reply *OutP = (Reply *) OutHeadP;
  50.     extern kern_return_t pppUp (port_t server);
  51.  
  52. #if    TypeCheck
  53.     boolean_t msg_simple;
  54. #endif    TypeCheck
  55.  
  56.     unsigned int msg_size;
  57.  
  58. #if    TypeCheck
  59.     msg_size = In0P->Head.msg_size;
  60.     msg_simple = In0P->Head.msg_simple;
  61.     if ((msg_size != 24) || (msg_simple != TRUE))
  62.         { OutP->RetCode = MIG_BAD_ARGUMENTS; return; }
  63. #endif    TypeCheck
  64.  
  65.     OutP->RetCode = pppUp(In0P->Head.msg_request_port);
  66. #ifdef    label_punt0
  67. #undef    label_punt0
  68. punt0:
  69. #endif    label_punt0
  70.     if (OutP->RetCode != KERN_SUCCESS)
  71.         return;
  72.  
  73.     msg_size = 32;    
  74.  
  75.     OutP->Head.msg_simple = TRUE;
  76.     OutP->Head.msg_size = msg_size;
  77. }
  78.  
  79. boolean_t nsRPC_server
  80.     (msg_header_t *InHeadP, msg_header_t *OutHeadP)
  81. {
  82.     register msg_header_t *InP =  InHeadP;
  83.     register death_pill_t *OutP = (death_pill_t *) OutHeadP;
  84.  
  85. #if    UseStaticMsgType
  86.     static const msg_type_t RetCodeType = {
  87.         /* msg_type_name = */        MSG_TYPE_INTEGER_32,
  88.         /* msg_type_size = */        32,
  89.         /* msg_type_number = */        1,
  90.         /* msg_type_inline = */        TRUE,
  91.         /* msg_type_longform = */    FALSE,
  92.         /* msg_type_deallocate = */    FALSE,
  93.         /* msg_type_unused = */        0,
  94.     };
  95. #endif    UseStaticMsgType
  96.  
  97.     OutP->Head.msg_simple = TRUE;
  98.     OutP->Head.msg_size = sizeof *OutP;
  99.     OutP->Head.msg_type = InP->msg_type;
  100.     OutP->Head.msg_local_port = PORT_NULL;
  101.     OutP->Head.msg_remote_port = InP->msg_reply_port;
  102.     OutP->Head.msg_id = InP->msg_id + 100;
  103.  
  104. #if    UseStaticMsgType
  105.     OutP->RetCodeType = RetCodeType;
  106. #else    UseStaticMsgType
  107.     OutP->RetCodeType.msg_type_name = MSG_TYPE_INTEGER_32;
  108.     OutP->RetCodeType.msg_type_size = 32;
  109.     OutP->RetCodeType.msg_type_number = 1;
  110.     OutP->RetCodeType.msg_type_inline = TRUE;
  111.     OutP->RetCodeType.msg_type_longform = FALSE;
  112.     OutP->RetCodeType.msg_type_deallocate = FALSE;
  113. #endif    UseStaticMsgType
  114.     OutP->RetCode = MIG_BAD_ID;
  115.  
  116.     if ((InP->msg_id > 0) || (InP->msg_id < 0))
  117.         return FALSE;
  118.     else {
  119.         typedef novalue (*SERVER_STUB_PROC)
  120.             (msg_header_t *, msg_header_t *);
  121.         static const SERVER_STUB_PROC routines[] = {
  122.             _XpppUp,
  123.         };
  124.  
  125.         if (routines[InP->msg_id - 0])
  126.             (routines[InP->msg_id - 0]) (InP, &OutP->Head);
  127.          else
  128.             return FALSE;
  129.     }
  130.     return TRUE;
  131. }
  132.