home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Collection - Online Library - January 1996 / CKITOS2196.ISO / diskette / gg244090.dsk / unc.dsk / CHAPTER.10 / DB_SRV.C < prev    next >
C/C++ Source or Header  |  1993-10-28  |  3KB  |  90 lines

  1. /*****************************************************************************/
  2. /* Module: database_server.c                                                 */
  3. /*                                                                           */
  4. /* Description:                                                              */
  5. /*     This module does everything for explicit binding and then executes    */
  6. /*     the manager code.  This module makes use of TRY/ENDTRY macro to       */
  7. /*     catch the SIGTERM signal raised by Ctrl-C.                            */
  8. /*                                                                           */
  9. /*****************************************************************************/
  10. #include <pthread_exc.h>
  11. #include "db.h"
  12. #include "errorchk.h"
  13. #include <stdio.h>
  14. #include <stdlib.h>
  15.  
  16. #define MAX_CALL_REQUESTS 3
  17. #define MAX_CONC_CALLS_PROTSEQ  4       /* Max concurrent call per protocol.  */
  18.  
  19. int main( int argc, char *argv[] )
  20. {
  21.    unsigned32 st;
  22.    rpc_binding_vector_t  *bvec;
  23.    sigset_t              sigset;
  24.    pthread_t             this_thread = pthread_self();
  25.  
  26. #ifdef IBMOS2
  27.    pthread_inst_exception_handler();
  28. #endif
  29.  
  30.    printf("Registering server interface with RPC runtime...\n");
  31.    rpc_server_register_if( Database_v1_0_s_ifspec, NULL, NULL, &st );
  32.    ERRORCK( "rpc_server_register_if", st );
  33.  
  34.    switch ( (( argc > 1 ) ? *argv[1] | ' ' : 'a') ) {
  35.    case 't':
  36.       rpc_server_use_protseq ("ncacn_ip_tcp", MAX_CONC_CALLS_PROTSEQ, &st );
  37.       break;
  38.    case 'u':
  39.       rpc_server_use_protseq ("ncadg_ip_udp", MAX_CONC_CALLS_PROTSEQ, &st );
  40.       break;
  41.    case 'a':
  42.    default:
  43.       rpc_server_use_all_protseqs ( MAX_CONC_CALLS_PROTSEQ, &st );
  44.    }
  45.    ERRORCK( "rpc_server_use_all_protseqs", st );
  46.  
  47.    rpc_server_inq_bindings( &bvec, &st );
  48.    ERRORCK( "rpc_server_inq_binding", st );
  49.  
  50.    printf("Registering server endpoints with endpoint mapper (RPCD)...\n");
  51.    rpc_ep_register( Database_v1_0_s_ifspec, bvec, NULL,
  52.                     ( unsigned_char_t * )"Database server, version 1.0" , &st );
  53.    ERRORCK( "rpc_ep_register", st );
  54.  
  55.    rpc_ns_binding_export( rpc_c_ns_syntax_dce, ENTRY_NAME,
  56.          Database_v1_0_s_ifspec, bvec, NULL, &st );
  57.    ERRORCK( "rpc_ns_binding_export", st );
  58.  
  59.    sigemptyset ( &sigset );
  60.    sigaddset ( &sigset, SIGINT );
  61.    sigaddset ( &sigset, SIGTERM );
  62.    pthread_signal_to_cancel_np ( &sigset, &this_thread );
  63.  
  64.    TRY {
  65.       printf ( "Server %s listening...\n", ENTRY_NAME );
  66.       rpc_server_listen( MAX_CALL_REQUESTS, &st );
  67.    }
  68.    FINALLY {
  69.       printf("Unexporting server bindings from CDS namespace...\n");
  70.       rpc_ns_binding_unexport( rpc_c_ns_syntax_dce, ENTRY_NAME,
  71.             Database_v1_0_s_ifspec, NULL, &st );
  72.       ERRORCK( "rpc_ns_binding_unexport", st );
  73.  
  74.       printf("Unregistering server interface with RPC runtime...\n");
  75.       rpc_server_unregister_if( Database_v1_0_s_ifspec, NULL, &st );
  76.       ERRORCK( "rpc_server_unregister_if", st );
  77.  
  78.       printf("Unregistering server endpoints with endpoint mapper (RPCD)...\n");
  79.       rpc_ep_unregister( Database_v1_0_s_ifspec, bvec, NULL, &st );
  80.       ERRORCK( "rpc_ep_unregister", st );
  81.  
  82. #ifdef IBMOS2
  83.       pthread_dinst_exception_handler();
  84. #endif
  85.       exit( 0 );
  86.    }
  87.    ENDTRY
  88. }
  89.  
  90.