/* * XDR-Definition der PDU's fuer Beispiel "Auftragsprotokoll". */ /* * Konstanten */ const MAX_SERVERNAME_LEN = 30; /* * Operationscodes */ enum OperationId { isInvokeReq, isResultReq, isRejectReq, isErrorReq }; /* * Gruende fuer Rejects */ enum RejectType { provider, user }; /* * Invoke-PDU */ struct IS_INVOKEDATA { int invokeId; string ServerName; int DataLen; opaque InvokeData<>; }; /* * Reject-PDU */ struct IS_REJECTDATA { int invokeId; int RejectType; int RejectReason; int DataLen; opaque RejectData<>; }; /* * Result-PDU */ struct IS_RESULTDATA { int invokeId; int DataLen; opaque ResultData<>; }; /* * Reject-PDU */ struct IS_ERRORDATA { int invokeId; int ErrorReason; int DataLen; opaque ErrorData<>; }; /* * Gesamt-PDU als Discriminated Union. Die PDU enthaelt in Abhaengigkeit * der Diskriminante Id eine der vier definierten PDUs des Protokolls. */ union IS_PDU switch (OperationId Id) { case isInvokeReq: IS_INVOKEDATA InvokeData; case isRejectReq: IS_REJECTDATA RejectData; case isResultReq: IS_RESULTDATA ResultData; case isErrorReq: IS_ERRORDATA ErrorData; default: void; };