/* * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.corba.se.spi.transport; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; import org.omg.CORBA.SystemException; import com.sun.org.omg.SendingContext.CodeBase; import com.sun.corba.se.pept.encoding.InputObject; import com.sun.corba.se.pept.encoding.OutputObject; import com.sun.corba.se.pept.protocol.MessageMediator; import com.sun.corba.se.pept.transport.Connection; import com.sun.corba.se.pept.transport.ResponseWaitingRoom; import com.sun.corba.se.spi.ior.IOR ; import com.sun.corba.se.spi.ior.iiop.GIOPVersion; import com.sun.corba.se.spi.orb.ORB; import com.sun.corba.se.spi.protocol.CorbaMessageMediator; import com.sun.corba.se.impl.encoding.CodeSetComponentInfo; import com.sun.corba.se.impl.logging.ORBUtilSystemException; /** * @author Harold Carr */ public interface CorbaConnection extends Connection, com.sun.corba.se.spi.legacy.connection.Connection { public boolean shouldUseDirectByteBuffers(); public boolean shouldReadGiopHeaderOnly(); public ByteBuffer read(int size, int offset, int length, long max_wait_time) throws IOException; public ByteBuffer read(ByteBuffer byteBuffer, int offset, int length, long max_wait_time) throws IOException; public void write(ByteBuffer byteBuffer) throws IOException; public void dprint(String msg); // // From iiop.Connection.java // public int getNextRequestId(); public ORB getBroker(); public CodeSetComponentInfo.CodeSetContext getCodeSetContext(); public void setCodeSetContext(CodeSetComponentInfo.CodeSetContext csc); // // from iiop.IIOPConnection.java // // Facade to ResponseWaitingRoom. public MessageMediator clientRequestMapGet(int requestId); public void clientReply_1_1_Put(MessageMediator x); public MessageMediator clientReply_1_1_Get(); public void clientReply_1_1_Remove(); public void serverRequest_1_1_Put(MessageMediator x); public MessageMediator serverRequest_1_1_Get(); public void serverRequest_1_1_Remove(); public boolean isPostInitialContexts(); // Can never be unset... public void setPostInitialContexts(); public void purgeCalls(SystemException systemException, boolean die, boolean lockHeld); // // Connection status // public static final int OPENING = 1; public static final int ESTABLISHED = 2; public static final int CLOSE_SENT = 3; public static final int CLOSE_RECVD = 4; public static final int ABORT = 5; // Begin Code Base methods --------------------------------------- // // Set this connection's code base IOR. The IOR comes from the // SendingContext. This is an optional service context, but all // JavaSoft ORBs send it. // // The set and get methods don't need to be synchronized since the // first possible get would occur during reading a valuetype, and // that would be after the set. // Sets this connection's code base IOR. This is done after // getting the IOR out of the SendingContext service context. // Our ORBs always send this, but it's optional in CORBA. void setCodeBaseIOR(IOR ior); IOR getCodeBaseIOR(); // Get a CodeBase stub to use in unmarshaling. The CachedCodeBase // won't connect to the remote codebase unless it's necessary. CodeBase getCodeBase(); // End Code Base methods ----------------------------------------- public void sendCloseConnection(GIOPVersion giopVersion) throws IOException; public void sendMessageError(GIOPVersion giopVersion) throws IOException; public void sendCancelRequest(GIOPVersion giopVersion, int requestId) throws IOException; public void sendCancelRequestWithLock(GIOPVersion giopVersion, int requestId) throws IOException; public ResponseWaitingRoom getResponseWaitingRoom(); public void serverRequestMapPut(int requestId, CorbaMessageMediator messageMediator); public CorbaMessageMediator serverRequestMapGet(int requestId); public void serverRequestMapRemove(int requestId); // REVISIT: WRONG: should not expose sockets here. public SocketChannel getSocketChannel(); // REVISIT - MessageMediator parameter? public void serverRequestProcessingBegins(); public void serverRequestProcessingEnds(); /** Clean up all connection resources. Used when shutting down an ORB. */ public void closeConnectionResources(); } // End of file.