message_1_1.java
来自「java jdk 1.4的源码」· Java 代码 · 共 157 行
JAVA
157 行
/* * @(#)Message_1_1.java 1.9 03/01/23 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package com.sun.corba.se.internal.iiop.messages;import org.omg.CORBA.INTERNAL;import org.omg.CORBA.CompletionStatus;import com.sun.corba.se.internal.core.GIOPVersion;import com.sun.corba.se.internal.orbutil.MinorCodes;/* * This implements the GIOP 1.1 & 1.2 Message header. * * @author Ram Jeyaraman 05/14/2000 * @version 1.0 */public class Message_1_1 extends com.sun.corba.se.internal.iiop.messages.MessageBase { // Instance variables int magic = (int) 0; GIOPVersion GIOP_version = null; byte flags = (byte) 0; byte message_type = (byte) 0; int message_size = (int) 0; // Constructor Message_1_1() {} Message_1_1(int _magic, GIOPVersion _GIOP_version, byte _flags, byte _message_type, int _message_size) { magic = _magic; GIOP_version = _GIOP_version; flags = _flags; 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.flags & LITTLE_ENDIAN_BIT) == LITTLE_ENDIAN_BIT); } public boolean moreFragmentsToFollow() { return ( (this.flags & MORE_FRAGMENTS_BIT) == MORE_FRAGMENTS_BIT ); } // Mutator methods public void setSize(byte[] buf, int size) { this.message_size = size; // // Patch the size field in the header. // int patch = size - GIOPMessageHeaderLength; if (!isLittleEndian()) { buf[8] = (byte)((patch >>> 24) & 0xFF); buf[9] = (byte)((patch >>> 16) & 0xFF); buf[10] = (byte)((patch >>> 8) & 0xFF); buf[11] = (byte)((patch >>> 0) & 0xFF); } else { buf[8] = (byte)((patch >>> 0) & 0xFF); buf[9] = (byte)((patch >>> 8) & 0xFF); buf[10] = (byte)((patch >>> 16) & 0xFF); buf[11] = (byte)((patch >>> 24) & 0xFF); } } /** * Allows us to create a fragment message from any message type. */ public FragmentMessage createFragmentMessage() { // check for message type validity switch (this.message_type) { case GIOPCancelRequest : case GIOPCloseConnection : case GIOPMessageError : throw new INTERNAL(MinorCodes.FRAGMENTATION_DISALLOWED, CompletionStatus.COMPLETED_MAYBE); case GIOPLocateRequest : case GIOPLocateReply : if (this.GIOP_version.equals(GIOPVersion.V1_1)) { throw new INTERNAL(MinorCodes.FRAGMENTATION_DISALLOWED, CompletionStatus.COMPLETED_MAYBE); } break; } /* // A fragmented mesg can be created only if the current mesg' fragment // bit is set. Otherwise, raise error // too stringent check if ( (this.flags & MORE_FRAGMENTS_BIT) != MORE_FRAGMENTS_BIT ) { throw new INTERNAL(MinorCodes.FRAGMENTATION_DISALLOWED, CompletionStatus.COMPLETED_MAYBE); } */ if (this.GIOP_version.equals(GIOPVersion.V1_1)) { return new FragmentMessage_1_1(this); } else if (this.GIOP_version.equals(GIOPVersion.V1_2)) { return new FragmentMessage_1_2(this); } throw new INTERNAL(MinorCodes.GIOP_VERSION_ERROR, CompletionStatus.COMPLETED_MAYBE); } // IO methods // This should do nothing even if it is called. The Message Header is read // off a 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.flags = istream.read_octet(); 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_octet(this.flags); ostream.write_octet(this.message_type); ostream.write_ulong(this.message_size); }} // class Message_1_1
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?