1 /*
   2  * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 #include "IOP.idl"
  27 
  28 module GIOP { // IDL extended for version 1.1 and 1.2
  29 
  30         struct Version {
  31                 octet major;
  32                 octet minor;
  33         };
  34 
  35 
  36         // GIOP 1.0
  37 
  38         struct MessageHeader_1_0 { // Renamed from MessageHeader
  39                 char magic [4];
  40                 Version GIOP_version;
  41                 boolean byte_order;
  42                 octet message_type;
  43                 unsigned long message_size;
  44         };
  45 
  46         // GIOP 1.1
  47 
  48         struct MessageHeader_1_1 {
  49                 char magic [4];
  50                 Version GIOP_version;
  51                 octet flags; // GIOP 1.1 change
  52                 octet message_type;
  53                 unsigned long message_size;
  54         };
  55 
  56         // GIOP 1.2
  57         // Same Header contents for 1.1 and 1.2
  58         typedef MessageHeader_1_1 MessageHeader_1_2;
  59 
  60 
  61         // GIOP 1.0
  62         struct RequestHeader_1_0 { // Renamed from RequestHeader
  63                 IOP::ServiceContextList service_context;
  64                 unsigned long request_id;
  65                 boolean response_expected;
  66                 sequence<octet> object_key;
  67                 string operation;
  68                 sequence<octet> requesting_principal;
  69         };
  70 
  71         // GIOP 1.1
  72         struct RequestHeader_1_1 {
  73                 IOP::ServiceContextList service_context;
  74                 unsigned long request_id;
  75                 boolean response_expected;
  76                 octet reserved[3]; // Added in GIOP 1.1
  77                 sequence <octet> object_key;
  78                 string operation;
  79                 sequence<octet> requesting_principal;
  80         };
  81 
  82         // GIOP 1.2
  83         typedef short AddressingDisposition;
  84         const short KeyAddr = 0;
  85         const short ProfileAddr = 1;
  86         const short ReferenceAddr = 2;
  87         struct IORAddressingInfo {
  88                 unsigned long selected_profile_index;
  89                 IOP::IOR ior;
  90         };
  91         union TargetAddress switch (AddressingDisposition) {
  92                 case KeyAddr: sequence <octet> object_key;
  93                 case ProfileAddr: IOP::TaggedProfile profile;
  94                 case ReferenceAddr: IORAddressingInfo ior;
  95         };
  96         struct RequestHeader_1_2 {
  97                 unsigned long request_id;
  98                 octet response_flags;
  99                 octet reserved[3];
 100                 TargetAddress target;
 101                 string operation;
 102                 IOP::ServiceContextList service_context;
 103                 // Principal not in GIOP 1.2
 104         };
 105 
 106 
 107         #ifndef GIOP_1_2   //We're supporting all versions
 108 
 109         // GIOP 1.0 and 1.1
 110         enum ReplyStatusType_1_0 { // Renamed from ReplyStatusType
 111                 NO_EXCEPTION,
 112                 USER_EXCEPTION,
 113                 SYSTEM_EXCEPTION,
 114                 LOCATION_FORWARD
 115         };
 116 
 117         // GIOP 1.0
 118         struct ReplyHeader_1_0 { // Renamed from ReplyHeader
 119                 IOP::ServiceContextList service_context;
 120                 unsigned long request_id;
 121                 ReplyStatusType_1_0 reply_status;
 122         };
 123 
 124         // GIOP 1.1
 125         // Same Header contents for 1.0 and 1.1
 126         typedef ReplyHeader_1_0 ReplyHeader_1_1;
 127 
 128         #else
 129 
 130         // GIOP 1.2
 131         enum ReplyStatusType_1_2 {
 132                 NO_EXCEPTION,
 133                 USER_EXCEPTION,
 134                 SYSTEM_EXCEPTION,
 135                 LOCATION_FORWARD,
 136                 LOCATION_FORWARD_PERM,// new value for 1.2
 137                 NEEDS_ADDRESSING_MODE // new value for 1.2
 138         };
 139 
 140         struct ReplyHeader_1_2 {
 141                 unsigned long request_id;
 142                 ReplyStatusType_1_2 reply_status;
 143                 IOP::ServiceContextList service_context;
 144         };
 145 
 146         #endif // GIOP_1_2
 147 
 148 
 149         struct SystemExceptionReplyBody {
 150                 string exception_id;
 151                 unsigned long minor_code_value;
 152                 unsigned long completion_status;
 153         };
 154 
 155 
 156 
 157         struct CancelRequestHeader {
 158                 unsigned long request_id;
 159         };
 160 
 161 
 162 
 163         // GIOP 1.0
 164         struct LocateRequestHeader_1_0 { // Renamed LocationRequestHeader
 165                 unsigned long request_id;
 166                 sequence <octet> object_key;
 167         };
 168 
 169         // GIOP 1.1
 170         // Same Header contents for 1.0 and 1.1
 171         typedef LocateRequestHeader_1_0 LocateRequestHeader_1_1;
 172 
 173         // GIOP 1.2
 174         struct LocateRequestHeader_1_2 {
 175                 unsigned long request_id;
 176                 TargetAddress target;
 177         };
 178 
 179 
 180         #ifndef GIOP_1_2   // We're supporting all versions
 181 
 182         // GIOP 1.0 and 1.1
 183         enum LocateStatusType_1_0 { // Renamed from LocateStatusType
 184                 UNKNOWN_OBJECT,
 185                 OBJECT_HERE,
 186                 OBJECT_FORWARD
 187         };
 188 
 189 
 190         // GIOP 1.0
 191         struct LocateReplyHeader_1_0 { // Renamed from LocateReplyHeader
 192                 unsigned long request_id;
 193                 LocateStatusType_1_0 locate_status;
 194         };
 195 
 196         // GIOP 1.1
 197         // same Header contents for 1.0 and 1.1
 198         typedef LocateReplyHeader_1_0 LocateReplyHeader_1_1;
 199 
 200         #else
 201 
 202         // GIOP 1.2
 203         enum LocateStatusType_1_2 {
 204                 UNKNOWN_OBJECT,
 205                 OBJECT_HERE,
 206                 OBJECT_FORWARD,
 207                 OBJECT_FORWARD_PERM, // new value for GIOP 1.2
 208                 LOC_SYSTEM_EXCEPTION, // new value for GIOP 1.2
 209                 LOC_NEEDS_ADDRESSING_MODE // new value for GIOP 1.2
 210         };
 211 
 212         struct LocateReplyHeader_1_2 {
 213                 unsigned long request_id;
 214                 LocateStatusType_1_2 locate_status;
 215         };
 216 
 217         #endif // GIOP_1_2
 218 
 219 
 220         // GIOP 1.2
 221         struct FragmentHeader_1_2 {
 222                 unsigned long request_id;
 223         };
 224 };