blob: 24a42db5683dc0cba26fdc6718d15994216d4412 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// BEGIN android-note
// address length was changed from long to int for performance reasons.
// END android-note
package org.apache.harmony.luni.platform;
import java.io.FileDescriptor;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.SocketImpl;
/*
* The interface for network methods.
*/
public interface INetworkSystem {
public void accept(FileDescriptor serverFd, SocketImpl newSocket, FileDescriptor clientFd)
throws IOException;
public void bind(FileDescriptor fd, InetAddress inetAddress, int port) throws SocketException;
public int read(FileDescriptor fd, byte[] data, int offset, int count) throws IOException;
public int readDirect(FileDescriptor fd, int address, int count) throws IOException;
public int write(FileDescriptor fd, byte[] data, int offset, int count) throws IOException;
public int writeDirect(FileDescriptor fd, int address, int offset, int count) throws IOException;
public boolean connectNonBlocking(FileDescriptor fd, InetAddress inetAddress, int port)
throws IOException;
public boolean isConnected(FileDescriptor fd, int timeout) throws IOException;
public int send(FileDescriptor fd, byte[] data, int offset, int length,
int port, InetAddress inetAddress) throws IOException;
public int sendDirect(FileDescriptor fd, int address, int offset, int length,
int port, InetAddress inetAddress) throws IOException;
public int recv(FileDescriptor fd, DatagramPacket packet, byte[] data, int offset,
int length, boolean peek, boolean connected) throws IOException;
public int recvDirect(FileDescriptor fd, DatagramPacket packet, int address, int offset,
int length, boolean peek, boolean connected) throws IOException;
public void disconnectDatagram(FileDescriptor fd) throws SocketException;
public void socket(FileDescriptor fd, boolean stream) throws SocketException;
public void shutdownInput(FileDescriptor descriptor) throws IOException;
public void shutdownOutput(FileDescriptor descriptor) throws IOException;
public void sendUrgentData(FileDescriptor fd, byte value);
public void listen(FileDescriptor fd, int backlog) throws SocketException;
public void connect(FileDescriptor fd, InetAddress inetAddress, int port, int timeout)
throws SocketException;
public InetAddress getSocketLocalAddress(FileDescriptor fd);
/**
* Select the given file descriptors for read and write operations.
*
* <p>The first {@code numReadable} file descriptors of {@code readFDs} will
* be selected for read-ready operations. The first {@code numWritable} file
* descriptors in {@code writeFDs} will be selected for write-ready
* operations. A file descriptor can appear in either or both and must not
* be null. If the file descriptor is closed during the select the behavior
* depends upon the underlying OS.
*
* @param readFDs
* all sockets interested in read and accept
* @param writeFDs
* all sockets interested in write and connect
* @param numReadable
* the size of the subset of readFDs to read or accept.
* @param numWritable
* the size of the subset of writeFDs to write or connect
* @param timeout
* timeout in milliseconds
* @param flags
* for output. Length must be at least {@code numReadable
* + numWritable}. Upon returning, each element describes the
* state of the descriptor in the corresponding read or write
* array. See {@code SelectorImpl.READABLE} and {@code
* SelectorImpl.WRITEABLE}
* @return true
* unless selection timed out or was interrupted
* @throws SocketException
*/
public boolean select(FileDescriptor[] readFDs, FileDescriptor[] writeFDs,
int numReadable, int numWritable, long timeout, int[] flags)
throws SocketException;
/*
* Query the IP stack for the local port to which this socket is bound.
*
* @param fd the socket descriptor
* @return int the local port to which the socket is bound
*/
public int getSocketLocalPort(FileDescriptor fd);
/*
* Query the IP stack for the nominated socket option.
*
* @param fd the socket descriptor @param opt the socket option type
* @return the nominated socket option value
*
* @throws SocketException if the option is invalid
*/
public Object getSocketOption(FileDescriptor fd, int opt)
throws SocketException;
/*
* Set the nominated socket option in the IP stack.
*
* @param fd the socket descriptor @param opt the option selector @param
* optVal the nominated option value
*
* @throws SocketException if the option is invalid or cannot be set
*/
public void setSocketOption(FileDescriptor fd, int opt, Object optVal)
throws SocketException;
public void close(FileDescriptor fd) throws IOException;
// TODO: change the single caller so that recv/recvDirect
// can mutate the InetAddress as a side-effect.
public void setInetAddress(InetAddress sender, byte[] address);
}