home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************************
- Microsoft RPC Version 2.0
- Copyright Microsoft Corp. 1992, 1993, 1994- 1996
- cxhndl Example
-
- FILE: cxhndlp.c
-
- PURPOSE: Remote procedures used in server application cxhndls
-
- FUNCTIONS: RemoteOpen() - Open the file
- RemoteRead() - Read a buffer's worth of the file
- RemoteClose() - Close the file and shutdown server
- Shutdown() - Shutdown the server
-
- COMMENTS: This distributed application uses a context handle.
-
- ****************************************************************************/
-
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include "cxhndl.h" // header file generated by MIDL compiler
-
-
- typedef struct {
- FILE *hFile;
- char achFile[256];
- } FILE_CONTEXT_TYPE;
-
-
- /* This remote procedure opens a file on the server. */
- short RemoteOpen(PCONTEXT_HANDLE_TYPE *pphContext,
- unsigned char *pszFileName
- )
- {
- FILE *hFile;
- FILE_CONTEXT_TYPE *pFileContext;
-
- if ((hFile = fopen(pszFileName, "r")) == NULL) {
- *pphContext = (PCONTEXT_HANDLE_TYPE) NULL;
- return(-1);
- }
- else {
- pFileContext = (FILE_CONTEXT_TYPE *)
- midl_user_allocate(sizeof(FILE_CONTEXT_TYPE));
- pFileContext->hFile = hFile;
- strcpy(pFileContext->achFile, pszFileName);
- *pphContext = (PCONTEXT_HANDLE_TYPE) pFileContext;
- return(0);
- }
- }
-
- /* This remote procedure reads a file on the server. */
- short RemoteRead(PCONTEXT_HANDLE_TYPE phContext,
- unsigned char *pbBuf,
- short *pcbBuf)
- {
- FILE_CONTEXT_TYPE *pFileContext;
-
- printf("in RemoteRead\n");
-
- pFileContext = (FILE_CONTEXT_TYPE *) phContext;
- *pcbBuf = (short) fread(pbBuf,
- sizeof(char),
- BUFSIZE,
- pFileContext->hFile);
- return(*pcbBuf);
- }
-
- /* This remote procedure closes a file on the server. */
- short RemoteClose(PCONTEXT_HANDLE_TYPE *pphContext)
- {
- FILE_CONTEXT_TYPE *pFileContext;
-
- printf("in RemoteClose\n");
-
- pFileContext = (FILE_CONTEXT_TYPE *) *pphContext;
-
- if ( fclose( pFileContext->hFile ) == 0)
- {
- midl_user_free( *pphContext );
- *pphContext = NULL;
- return(0);
- }
- else
- /* Context Rundown routine will attempt to close it again */
- return(-1);
- }
-
- /* The Shutdown procedure tells the server to stop listening */
- /* for client requests. */
- void Shutdown(void)
- {
- RPC_STATUS status;
-
- printf("Calling RpcMgmtStopServerListening\n");
- status = RpcMgmtStopServerListening(NULL);
- printf("RpcMgmtStopServerListening returned: 0x%x\n", status);
- if (status) {
- exit(status);
- }
-
- printf("Calling RpcServerUnregisterIf\n");
- status = RpcServerUnregisterIf(NULL, NULL, FALSE);
- printf("RpcServerUnregisterIf returned 0x%x\n", status);
- if (status) {
- exit(status);
- }
- }
-
- /* The rundown routine is associated with the context handle type. */
- void __RPC_USER PCONTEXT_HANDLE_TYPE_rundown(PCONTEXT_HANDLE_TYPE phContext)
- {
- FILE_CONTEXT_TYPE *pFileContext;
-
- printf("Context rundown routine\n");
-
- if ( phContext )
- {
- pFileContext = (FILE_CONTEXT_TYPE *) phContext;
- if (pFileContext->hFile != NULL)
- fclose(pFileContext->hFile);
-
- midl_user_free( phContext );
- }
-
- }
-
- /* end file cxhndlp.c */
-