Annotation of q_a/samples/bndbuf/bndbufs.c, revision 1.1.1.1

1.1       root        1: /************************************************************************
                      2: *
                      3: *   bndbufs.c - sample program demonstrating the server initialization of
                      4: *       the distributed bounded buffer solution
                      5: *
                      6: *   Frederick Chong
                      7: *   Microsoft Developer Support
                      8: *   Copyright (c) 1992, 1993 Microsoft Corporation
                      9: *
                     10: *************************************************************************/
                     11: 
                     12: 
                     13: #include <windows.h>
                     14: #include <stdio.h>
                     15: #include <string.h>
                     16: #include <stdlib.h>
                     17: #include <malloc.h>
                     18: #include <rpc.h>
                     19: #include "common.h"
                     20: #include "bndbuf.h"
                     21: 
                     22: 
                     23: // Synchronization primitives to shared buffer
                     24: 
                     25: extern HANDLE hMutex;       // Handle to mutex
                     26: extern HANDLE hEmptySem;    // Handle to empty semaphore
                     27: extern HANDLE hFullSem;     // Handle to full semaphore
                     28: 
                     29: 
                     30: // This is the shared buffer
                     31: 
                     32: extern char buffer[MAX_ITEM][MAX_SIZE];
                     33: 
                     34: 
                     35: DWORD retCode;
                     36: 
                     37: 
                     38: /************************************************************************
                     39: 
                     40: void Usage(char * pszProgramName)
                     41: 
                     42: prints out the command line options for starting the server
                     43: 
                     44: *************************************************************************/
                     45: 
                     46: void Usage(char * pszProgramName)
                     47: {
                     48:     fprintf(stderr, "Usage:  %s\n", pszProgramName);
                     49:     fprintf(stderr, " -p protocol_sequence\n");
                     50:     fprintf(stderr, " -e endpoint\n");
                     51:     ExitProcess(1);
                     52: }
                     53: 
                     54: 
                     55: /*************************************************************************
                     56: 
                     57: void _CRTAPI1 main(int argc, char *argv[])
                     58: 
                     59: Parses the command line arguments which allow the user to override the
                     60: default protocol sequence and endpoint. It then initializes the
                     61: synchronization primitives to be used for the central buffer pool.
                     62: Finally, it registers its interface with the name service and then
                     63: listens for an incoming call.
                     64: 
                     65: **************************************************************************/
                     66: 
                     67: void _CRTAPI1 main(int argc, char *argv[])
                     68: {
                     69: 
                     70:     RPC_STATUS status;
                     71:     RPC_BINDING_VECTOR * pBindingVector;
                     72: 
                     73:     unsigned char * pszEndpoint         = "\\pipe\\boundbuf";
                     74:     unsigned char * pszProtocolSequence     = "ncacn_np";
                     75: 
                     76:     int i;
                     77: 
                     78: 
                     79:     // allow the user to override settings with command line switches
                     80:     for (i = 1; i < argc; i++)
                     81:     {
                     82:     if ((*argv[i] == '-') || (*argv[i] == '/'))
                     83:     {
                     84:         switch (tolower(*(argv[i]+1)))
                     85:         {
                     86:         case 'p':  // protocol sequence
                     87:             pszProtocolSequence = argv[++i];
                     88:             break;
                     89:         case 'e':
                     90:             pszEndpoint = argv[++i];
                     91:             break;
                     92:         case 'h':
                     93:         case '?':
                     94:         default:
                     95:             Usage(argv[0]);
                     96:         }
                     97:      }
                     98: 
                     99:         else
                    100:         Usage(argv[0]);
                    101:     }
                    102: 
                    103: 
                    104: 
                    105: 
                    106:     // Create semaphores and mutex for synchronization
                    107: 
                    108:     hMutex = CreateMutex(NULL,
                    109:              FALSE,
                    110:              "Buffer_Mutex");
                    111: 
                    112:     if (hMutex == NULL)
                    113:     {
                    114:         retCode = GetLastError();
                    115:         printf("\nCreateMutex returns error %d\n", retCode);
                    116:         ExitProcess(0);
                    117:     }
                    118: 
                    119: 
                    120:     if ((hEmptySem = CreateSemaphore(NULL,
                    121:                     MAX_ITEM,
                    122:                     MAX_ITEM,
                    123:                     "Empty_Sem")) == NULL)
                    124: 
                    125:     {
                    126:         retCode = GetLastError();
                    127:         printf("\nCreateSemaphore for empty returns error %d\n", retCode);
                    128:         ExitProcess(0);
                    129:     }
                    130: 
                    131: 
                    132:     if ((hFullSem = CreateSemaphore(NULL,
                    133:                     0,
                    134:                     MAX_ITEM,
                    135:                     "Full_Sem")) == NULL)
                    136: 
                    137:     {
                    138:         retCode = GetLastError();
                    139:         printf("\nCreateSemaphore for full returns error %d\n", retCode);
                    140:         ExitProcess(0);
                    141:     }
                    142: 
                    143: 
                    144: 
                    145: // Initialize RPC Interface server
                    146: 
                    147: 
                    148:     status = RpcServerUseProtseqEp((unsigned char *)pszProtocolSequence,
                    149:                    MAXCALLS,
                    150:                    pszEndpoint,
                    151:                    0);
                    152:     printf("RpcServerUseProtseqEp returned %d\n", status);
                    153:     if (status)
                    154:     ExitProcess(2);
                    155: 
                    156: 
                    157:     status = RpcServerRegisterIf(bndbufh_ServerIfHandle,
                    158:                  0,
                    159:                  0);
                    160:     printf("RpcServerRegisterIf returned %d\n", status);
                    161:     if (status)
                    162:     ExitProcess(2);
                    163: 
                    164: 
                    165:     status = RpcServerInqBindings(&pBindingVector);
                    166:     printf("RpcServerInqBindings returned %d\n", status);
                    167:     if (status)
                    168:     ExitProcess(2);
                    169: 
                    170: 
                    171:     status = RpcNsBindingExport(RPC_C_NS_SYNTAX_DEFAULT,    /* name syntax */
                    172:                 "/.:/Boundbuf_sample",      /* name */
                    173:                 bndbufh_ServerIfHandle,
                    174:                 pBindingVector,
                    175:                 NULL);
                    176:     printf("RpcNsBindingExport returned %d\n", status);
                    177:     if (status)
                    178:     ExitProcess(2);
                    179: 
                    180: 
                    181:     printf("Calling RpcServerListen\n");
                    182:     status = RpcServerListen(1,
                    183:                  MAXCALLS,
                    184:                  0);
                    185:     printf("RpcServerListen returned %d\n", status);
                    186:     if (status)
                    187:     ExitProcess(2);
                    188: 
                    189: }
                    190: 
                    191: 
                    192: /**************************************************************************
                    193:         MIDL allocate and free
                    194: ***************************************************************************/
                    195: 
                    196: void __RPC_FAR * __RPC_API MIDL_user_allocate(size_t len)
                    197: {
                    198:     return(malloc(len));
                    199: }
                    200: 
                    201: void __RPC_API MIDL_user_free(void __RPC_FAR * ptr)
                    202: {
                    203:     free(ptr);
                    204: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.