OSF DCE Application
Development Style Guide


Preface

1. Overview - Introduction to DCE Application Programming

1.1 Development Overview

1.2 Overview of DCE Application Development Steps

1.3 DCE Application Development Tools

1.3.1 The DCE UUID Generator

1.3.2 DCE Interface Definition Language

1.3.3 The DCE IDL Compiler

1.3.4 The Attribute Configuration File

1.3.5 The DCE Host Daemon

1.3.6 The DCE API

1.3.7 The DCE Control Program

1.4 The Interface Definition

1.4.1 Generating the Interface UUID

1.4.2 Writing the Interface Definition File

1.4.3 Writing the Attribute Configuration File

1.4.4 Processing the Files with the IDL Compiler

1.5 Server Initialization

1.5.1 Setting Up for Serviceability

1.5.2 Setting Up the Server's Objects

1.5.3 Setting Up Security

1.5.4 Defining the Manager Entry Point Vectors for Each Set of Operations

1.5.5 Registering the Server

1.5.6 Specifying Multithreadedness

1.5.7 Listening for Incoming Service Requests

1.5.8 Cleaning Up Code When the Server Terminates

1.6 The Client Binding and RPC Invocation

1.6.1 Importing the Binding Information from the Namespace

1.6.2 Annotating the Binding Handle for Security

1.6.3 Invoking Remote Procedure Calls

1.7 The Server's Manager of RPC Requests

1.7.1 Getting the Client's Credentials

1.7.2 Getting the Object's ACL

1.7.3 Making the Authorization Decision

1.7.4 Servicing the RPC Request

1.7.5 Returning the Results and Resuming Listening

1.8 About DCE Programming Style

1.8.1 Mechanism, Policy, and Style

1.8.2 Policy and Style Issues

1.8.3 General Policies

2. Overview - Threads

2.1 Thread Use Policy

2.1.1 Choosing to Thread

2.1.2 Specifying the Number of Threads

2.1.3 Scheduling Policies

2.2 Thread Safety

2.3 Threads Programming Topics

2.3.1 Thread Handles

2.3.2 Storage for Thread Specific Data

2.3.3 Canceling Threads

2.3.4 Signals

2.3.5 Forking in a Threaded Application

2.4 RPC Threads and RPC Cancel Semantics

3. Overview - Security

3.1 The Basic Security Model

3.2 Application Roles

3.3 Authentication Model

3.3.1 The DCE Authentication Model

3.3.2 Application-Level Authentication

3.3.3 Obtaining an Authentication Identity

3.3.4 The Authenticated RPC Call

3.3.5 Managing Keys

3.3.6 Default Server Authentication Steps

3.3.7 Default Client Authentication Steps

3.4 Authorization

3.4.1 Client Credential

3.4.2 Access Control Lists

3.4.3 ACL Managers

4. Overview - Binding

4.1 The Binding Model

4.1.1 Server Binding Model

4.1.2 Client Binding Model

4.1.3 Call Routing

4.1.4 Routing Policy

4.2 Binding Handles

4.3 Binding Methods

5. Overview - Using the DCE Name Service

5.1 Introduction to Using NSI

5.1.1 The UUID

5.1.2 Object UUIDs

5.1.3 Interface UUIDs

5.1.4 Summary: Names and UUIDs

5.2 Binding to an Object

5.3 Junctions

5.3.1 A Junction Example

5.3.2 Junctions and the ACL Editor

5.4 Name Service Terminology

5.4.1 CDS Entries

5.4.2 CDS Entry Attributes

5.5 Binding

5.5.1 Importing and Exporting Bindings

5.5.2 Summary

5.6 Partial Binding and the Endpoint Mapper

5.7 Interface Ambiguity and Partial Bindings

5.8 Using Object UUIDs to Avoid Binding Ambiguity

5.9 An Object-Oriented Namespace

5.10 Setting Up an Object-Oriented Namespace

5.11 Groups and Profiles

5.11.1 Group Entries

5.11.2 Profiles

5.11.3 Summary of Namespace Entry Types

5.12 Three Models for Accessing Binding Information

5.12.1 Access By Services

5.12.2 Access By Servers

5.12.3 Access By Objects

5.12.4 Summary of Binding Models

5.13 Models Based on Non-CDS Databases

5.13.1 Example of a Privately Managed Database

5.13.2 Combining Models

5.14 An Object-Oriented Model with Grouped Binding Information

5.15 Server and Client Steps

5.15.1 Server Export

5.15.2 Client Import

5.16 Global Organization of the Namespace

6. Overview - RPC Parameters

6.1 Execution Semantics

6.2 Parameter Semantics

6.2.1 Parameter Memory Management

6.2.2 6Client Side Allocation

6.2.3 Server Side Allocation

6.3 RPC Data Types

6.3.1 IDL to C Type Mappings

6.3.2 Character Handling

6.3.3 Pointers

6.3.4 Context Handles

6.3.5 Arrays

6.3.6 Structures and Unions

6.3.7 Pipes

6.3.8 The transmit_as Attribute

7. Overview - Errors and Messaging

7.1 Error Handling

7.2 Messaging Facilities

7.2.1 DCE Errors and DCE Messages

7.2.2 DCE Application Message APIs

7.3 Serviceability and Logging

7.4 Sample Code

8. Overview - Object-Oriented Applications with Distributed Objects

8.1 Kinds of Objects

8.2 Reference Counting: How Objects Keep Track of Multiple Clients

8.3 Using Interface Definitions to Design Classes

8.3.1 Using Static Functions in Interface Design

8.3.2 Adding an Interface Rather than Changing One

8.4 Binding to Distributed Objects Rather than Servers

8.5 Clients Manipulate Objects Maintained on Servers

8.6 Naming Objects

9. Overview - Server Management

9.1 Application Support for Server Management

9.2 Manager Initialization

10. Overview - A Sample Application

10.1 The Generic Server

10.2 Object Bind Interface

10.3 Manager and Client Illustrations

10.4 Message (sams) File

10.5 Makefile