RequestMessage_1_1.java revision 608:7e06bf1dcb09
1/*
2 * Copyright (c) 2000, 2003, 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
26package com.sun.corba.se.impl.protocol.giopmsgheaders;
27
28import org.omg.CORBA.Principal;
29import com.sun.corba.se.spi.servicecontext.ServiceContexts;
30import com.sun.corba.se.spi.ior.iiop.GIOPVersion;
31import com.sun.corba.se.spi.orb.ORB;
32import com.sun.corba.se.spi.ior.ObjectKey;
33
34import com.sun.corba.se.spi.logging.CORBALogDomains ;
35import com.sun.corba.se.impl.logging.ORBUtilSystemException ;
36
37/**
38 * This implements the GIOP 1.1 Request header.
39 *
40 * @author Ram Jeyaraman 05/14/2000
41 */
42
43public final class RequestMessage_1_1 extends Message_1_1
44        implements RequestMessage {
45
46    // Instance variables
47
48    private ORB orb = null;
49    private ORBUtilSystemException wrapper = null ;
50    private ServiceContexts service_contexts = null;
51    private int request_id = (int) 0;
52    private boolean response_expected = false;
53    private byte[] reserved = null; // Added in GIOP 1.1
54    private byte[] object_key = null;
55    private String operation = null;
56    private Principal requesting_principal = null;
57    private ObjectKey objectKey = null;
58
59    // Constructors
60
61    RequestMessage_1_1(ORB orb) {
62        this.orb = orb;
63        this.wrapper = ORBUtilSystemException.get( orb,
64            CORBALogDomains.RPC_PROTOCOL ) ;
65    }
66
67    RequestMessage_1_1(ORB orb, ServiceContexts _service_contexts,
68            int _request_id, boolean _response_expected, byte[] _reserved,
69            byte[] _object_key, String _operation,
70            Principal _requesting_principal) {
71        super(Message.GIOPBigMagic, GIOPVersion.V1_1, FLAG_NO_FRAG_BIG_ENDIAN,
72            Message.GIOPRequest, 0);
73        this.orb = orb;
74        this.wrapper = ORBUtilSystemException.get( orb,
75            CORBALogDomains.RPC_PROTOCOL ) ;
76        service_contexts = _service_contexts;
77        request_id = _request_id;
78        response_expected = _response_expected;
79        reserved = _reserved;
80        object_key = _object_key;
81        operation = _operation;
82        requesting_principal = _requesting_principal;
83    }
84
85    // Accessor methods (RequestMessage interface)
86
87    public ServiceContexts getServiceContexts() {
88        return this.service_contexts;
89    }
90
91    public int getRequestId() {
92        return this.request_id;
93    }
94
95    public boolean isResponseExpected() {
96        return this.response_expected;
97    }
98
99    public byte[] getReserved() {
100        return this.reserved;
101    }
102
103    public ObjectKey getObjectKey() {
104        if (this.objectKey == null) {
105            // this will raise a MARSHAL exception upon errors.
106            this.objectKey = MessageBase.extractObjectKey(object_key, orb);
107        }
108
109        return this.objectKey;
110    }
111
112    public String getOperation() {
113        return this.operation;
114    }
115
116    public Principal getPrincipal() {
117        return this.requesting_principal;
118    }
119
120    // IO methods
121
122    public void read(org.omg.CORBA.portable.InputStream istream) {
123        super.read(istream);
124        this.service_contexts
125            = new ServiceContexts((org.omg.CORBA_2_3.portable.InputStream) istream);
126        this.request_id = istream.read_ulong();
127        this.response_expected = istream.read_boolean();
128        this.reserved = new byte[3];
129        for (int _o0 = 0;_o0 < (3); ++_o0) {
130            this.reserved[_o0] = istream.read_octet();
131        }
132        int _len1 = istream.read_long();
133        this.object_key = new byte[_len1];
134        istream.read_octet_array(this.object_key, 0, _len1);
135        this.operation = istream.read_string();
136        this.requesting_principal = istream.read_Principal();
137    }
138
139    public void write(org.omg.CORBA.portable.OutputStream ostream) {
140        super.write(ostream);
141        if (this.service_contexts != null) {
142                service_contexts.write(
143                (org.omg.CORBA_2_3.portable.OutputStream) ostream,
144                GIOPVersion.V1_1);
145            } else {
146                ServiceContexts.writeNullServiceContext(
147                (org.omg.CORBA_2_3.portable.OutputStream) ostream);
148        }
149        ostream.write_ulong(this.request_id);
150        ostream.write_boolean(this.response_expected);
151        nullCheck(this.reserved);
152        if (this.reserved.length != (3)) {
153            throw wrapper.badReservedLength(
154                org.omg.CORBA.CompletionStatus.COMPLETED_MAYBE);
155        }
156        for (int _i0 = 0;_i0 < (3); ++_i0) {
157            ostream.write_octet(this.reserved[_i0]);
158        }
159        nullCheck(this.object_key);
160        ostream.write_long(this.object_key.length);
161        ostream.write_octet_array(this.object_key, 0, this.object_key.length);
162        ostream.write_string(this.operation);
163        if (this.requesting_principal != null) {
164            ostream.write_Principal(this.requesting_principal);
165        } else {
166            ostream.write_long(0);
167        }
168    }
169
170    public void callback(MessageHandler handler)
171        throws java.io.IOException
172    {
173        handler.handleInput(this);
174    }
175} // class RequestMessage_1_1
176