/* * @(#)Message_1_0.java 1.10 03/12/19 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package com.sun.corba.se.impl.protocol.giopmsgheaders; import java.nio.ByteBuffer; import org.omg.CORBA.INTERNAL; import org.omg.CORBA.CompletionStatus; import com.sun.corba.se.spi.ior.iiop.GIOPVersion; import com.sun.corba.se.spi.logging.CORBALogDomains ; import com.sun.corba.se.impl.logging.ORBUtilSystemException ; /* * This implements the GIOP 1.0 Message header. * * @author Ram Jeyaraman 05/14/2000 * @version 1.0 */ public class Message_1_0 extends com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase { private static ORBUtilSystemException wrapper = ORBUtilSystemException.get( CORBALogDomains.RPC_PROTOCOL ) ; // Instance variables int magic = (int) 0; GIOPVersion GIOP_version = null; boolean byte_order = false; byte message_type = (byte) 0; int message_size = (int) 0; // Constructor Message_1_0() { } Message_1_0(int _magic, boolean _byte_order, byte _message_type, int _message_size) { magic = _magic; GIOP_version = GIOPVersion.V1_0; byte_order = _byte_order; message_type = _message_type; message_size = _message_size; } // Accessor methods public GIOPVersion getGIOPVersion() { return this.GIOP_version; } public int getType() { return this.message_type; } public int getSize() { return this.message_size; } public boolean isLittleEndian() { return this.byte_order; } public boolean moreFragmentsToFollow() { return false; } // Mutator methods public void setSize(ByteBuffer byteBuffer, int size) { this.message_size = size; // // Patch the size field in the header. // int patch = size - GIOPMessageHeaderLength; if (!isLittleEndian()) { byteBuffer.put(8, (byte)((patch >>> 24) & 0xFF)); byteBuffer.put(9, (byte)((patch >>> 16) & 0xFF)); byteBuffer.put(10, (byte)((patch >>> 8) & 0xFF)); byteBuffer.put(11, (byte)((patch >>> 0) & 0xFF)); } else { byteBuffer.put(8, (byte)((patch >>> 0) & 0xFF)); byteBuffer.put(9, (byte)((patch >>> 8) & 0xFF)); byteBuffer.put(10, (byte)((patch >>> 16) & 0xFF)); byteBuffer.put(11, (byte)((patch >>> 24) & 0xFF)); } } public FragmentMessage createFragmentMessage() { throw wrapper.fragmentationDisallowed( CompletionStatus.COMPLETED_MAYBE); } // IO methods // This should do nothing even if it is called. The Message Header already // is read off java.io.InputStream (not a CDRInputStream) by IIOPConnection // in order to choose the correct CDR Version, msg_type, and msg_size. // So, we would never need to read the Message Header off a CDRInputStream. public void read(org.omg.CORBA.portable.InputStream istream) { /* this.magic = istream.read_long(); this.GIOP_version = (new GIOPVersion()).read(istream); this.byte_order = istream.read_boolean(); this.message_type = istream.read_octet(); this.message_size = istream.read_ulong(); */ } public void write(org.omg.CORBA.portable.OutputStream ostream) { ostream.write_long(this.magic); nullCheck(this.GIOP_version); this.GIOP_version.write(ostream); ostream.write_boolean(this.byte_order); ostream.write_octet(this.message_type); ostream.write_ulong(this.message_size); } } // class Message_1_0