001: /*
002: * %W% %E%
003: *
004: * Copyright 1990-2006 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: */
026:
027: package com.sun.jumpimpl.os;
028:
029: import java.io.IOException;
030:
031: import com.sun.jump.message.JUMPMessagable;
032: import com.sun.jump.message.JUMPTimedOutException;
033: import com.sun.jump.message.JUMPUnblockedException;
034: import com.sun.jump.os.JUMPMessageQueueInterface;
035:
036: /**
037: * This subclass of <code>JUMPMessageQueueInterface</code> implements
038: * JUMPMessageQueue for the linux OS.
039: */
040: public class JUMPMessageQueueInterfaceImpl extends
041: JUMPMessageQueueInterface {
042:
043: protected JUMPMessageQueueInterfaceImpl() {
044: }
045:
046: /**
047: * Get offset of non-OS data in message buffer
048: */
049: public native int getDataOffset();
050:
051: /**
052: * Send an asynchronous message to process pid
053: *
054: * @throws JUMPTargetNonexistentException
055: * @throws JUMPWouldBlockException
056: * @throws IOException
057: */
058: public native void sendMessageAsync(int pid, byte[] message,
059: boolean isResponse) throws IOException;
060:
061: /**
062: * Send a response to a process (return information in the message).
063: *
064: * @throws JUMPTargetNonexistentException
065: * @throws JUMPWouldBlockException
066: * @throws IOException
067: */
068: public native void sendMessageResponse(byte[] message,
069: boolean isResponse) throws IOException;
070:
071: /**
072: * Send a synchronous message and get byte[] back from which
073: * we can construct a JUMPMessage.
074: *
075: * @throws JUMPTimedOutException
076: * @throws JUMPTargetNonexistentException
077: * @throws JUMPWouldBlockException
078: * @throws IOException
079: */
080: public native byte[] sendMessageSync(int pid, byte[] message,
081: boolean isResponse, long timeout)
082: throws JUMPTimedOutException, IOException;
083:
084: /**
085: * @throws JUMPTimedOutException
086: * @throws JUMPUnblockedException
087: * @throws IOException
088: */
089: public native byte[] receiveMessage(String messageType, long timeout)
090: throws JUMPTimedOutException, IOException;
091:
092: /*
093: * Get return type for caller thread
094: */
095: public native String getReturnType();
096:
097: /**
098: * To make sure that the OS structures exist for the type we
099: * are listening to, before we start listening.
100: */
101: public native void reserve(String messageType) throws IOException;
102:
103: /**
104: * Free low-level structures when we're done listening.
105: */
106: public native void unreserve(String messageType);
107:
108: /**
109: * Causes a thread blocking in or about to block in
110: * receiveMessage(messageType) to throw JUMPUnblockedException.
111: */
112: public native void unblock(String messageType) throws IOException;
113: }
|