home *** CD-ROM | disk | FTP | other *** search
- /* Module nsRPC */
-
- #define EXPORT_BOOLEAN
- #include <mach/boolean.h>
- #include <mach/message.h>
- #include <mach/mig_errors.h>
-
- #ifndef mig_internal
- #define mig_internal static
- #endif
-
- #ifndef TypeCheck
- #define TypeCheck 1
- #endif
-
- #ifndef UseExternRCSId
- #ifdef hc
- #define UseExternRCSId 1
- #endif
- #endif
-
- #ifndef UseStaticMsgType
- #if !defined(hc) || defined(__STDC__)
- #define UseStaticMsgType 1
- #endif
- #endif
-
- #define novalue void
-
- #define msg_request_port msg_local_port
- #define msg_reply_port msg_remote_port
- #include <mach/std_types.h>
-
- /* Routine pppUp */
- mig_internal novalue _XpppUp
- (msg_header_t *InHeadP, msg_header_t *OutHeadP)
- {
- typedef struct {
- msg_header_t Head;
- } Request;
-
- typedef struct {
- msg_header_t Head;
- msg_type_t RetCodeType;
- kern_return_t RetCode;
- } Reply;
-
- register Request *In0P = (Request *) InHeadP;
- register Reply *OutP = (Reply *) OutHeadP;
- extern kern_return_t pppUp (port_t server);
-
- #if TypeCheck
- boolean_t msg_simple;
- #endif TypeCheck
-
- unsigned int msg_size;
-
- #if TypeCheck
- msg_size = In0P->Head.msg_size;
- msg_simple = In0P->Head.msg_simple;
- if ((msg_size != 24) || (msg_simple != TRUE))
- { OutP->RetCode = MIG_BAD_ARGUMENTS; return; }
- #endif TypeCheck
-
- OutP->RetCode = pppUp(In0P->Head.msg_request_port);
- #ifdef label_punt0
- #undef label_punt0
- punt0:
- #endif label_punt0
- if (OutP->RetCode != KERN_SUCCESS)
- return;
-
- msg_size = 32;
-
- OutP->Head.msg_simple = TRUE;
- OutP->Head.msg_size = msg_size;
- }
-
- boolean_t nsRPC_server
- (msg_header_t *InHeadP, msg_header_t *OutHeadP)
- {
- register msg_header_t *InP = InHeadP;
- register death_pill_t *OutP = (death_pill_t *) OutHeadP;
-
- #if UseStaticMsgType
- static const msg_type_t RetCodeType = {
- /* msg_type_name = */ MSG_TYPE_INTEGER_32,
- /* msg_type_size = */ 32,
- /* msg_type_number = */ 1,
- /* msg_type_inline = */ TRUE,
- /* msg_type_longform = */ FALSE,
- /* msg_type_deallocate = */ FALSE,
- /* msg_type_unused = */ 0,
- };
- #endif UseStaticMsgType
-
- OutP->Head.msg_simple = TRUE;
- OutP->Head.msg_size = sizeof *OutP;
- OutP->Head.msg_type = InP->msg_type;
- OutP->Head.msg_local_port = PORT_NULL;
- OutP->Head.msg_remote_port = InP->msg_reply_port;
- OutP->Head.msg_id = InP->msg_id + 100;
-
- #if UseStaticMsgType
- OutP->RetCodeType = RetCodeType;
- #else UseStaticMsgType
- OutP->RetCodeType.msg_type_name = MSG_TYPE_INTEGER_32;
- OutP->RetCodeType.msg_type_size = 32;
- OutP->RetCodeType.msg_type_number = 1;
- OutP->RetCodeType.msg_type_inline = TRUE;
- OutP->RetCodeType.msg_type_longform = FALSE;
- OutP->RetCodeType.msg_type_deallocate = FALSE;
- #endif UseStaticMsgType
- OutP->RetCode = MIG_BAD_ID;
-
- if ((InP->msg_id > 0) || (InP->msg_id < 0))
- return FALSE;
- else {
- typedef novalue (*SERVER_STUB_PROC)
- (msg_header_t *, msg_header_t *);
- static const SERVER_STUB_PROC routines[] = {
- _XpppUp,
- };
-
- if (routines[InP->msg_id - 0])
- (routines[InP->msg_id - 0]) (InP, &OutP->Head);
- else
- return FALSE;
- }
- return TRUE;
- }
-