1600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/*
2600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Conditions Of Use
3600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*
4600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* This software was developed by employees of the National Institute of
5600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Standards and Technology (NIST), an agency of the Federal Government.
6600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Pursuant to title 15 Untied States Code Section 105, works of NIST
7600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* employees are not subject to copyright protection in the United States
8600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* and are considered to be in the public domain.  As a result, a formal
9600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* license is not needed to use the software.
10600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*
11600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* This software is provided by NIST as a service and is expressly
12600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* provided "AS IS."  NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
13600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
14600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
15600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* AND DATA ACCURACY.  NIST does not warrant or make any representations
16600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* regarding the use of the software or the results thereof, including but
17600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* not limited to the correctness, accuracy, reliability or usefulness of
18600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* the software.
19600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*
20600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Permission to use this software is contingent upon your acceptance
21600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* of the terms of this agreement
22600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*
23600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* .
24600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*
25600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*/
26600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpackage gov.nist.core.net;
27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.io.IOException;
29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.net.DatagramSocket;
30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.net.InetAddress;
31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.net.ServerSocket;
32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.net.Socket;
33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.net.SocketException;
34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// Added by Daniel J. Martinez Manzano <dani@dif.um.es>
36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport javax.net.ssl.SSLServerSocket;
37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport javax.net.ssl.SSLSocket;
38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/**
41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * basic interface to the network layer
42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @author m.andrews
44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */
46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic interface NetworkLayer {
47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Creates a server with the specified port, listen backlog, and local IP address to bind to.
50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * comparable to "new java.net.ServerSocket(port,backlog,bindAddress);"
51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param port
53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param backlog
54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param bindAddress
55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return the server socket
56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public ServerSocket createServerSocket(int port, int backlog,
58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            InetAddress bindAddress) throws IOException;
59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Creates an SSL server with the specified port, listen backlog, and local IP address to bind to.
62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Added by Daniel J. Martinez Manzano <dani@dif.um.es>
63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param port
65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param backlog
66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param bindAddress
67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return the server socket
68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public SSLServerSocket createSSLServerSocket(int port, int backlog,
70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            InetAddress bindAddress) throws IOException;
71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Creates a stream socket and connects it to the specified port number at the specified IP address.
74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * comparable to "new java.net.Socket(address, port);"
75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param address
77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param port
78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return the socket
79600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
80600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public Socket createSocket(InetAddress address, int port) throws IOException;
81600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
82600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
83600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Creates a stream socket and connects it to the specified port number at the specified IP address.
84600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * comparable to "new java.net.Socket(address, port,localaddress);"
85600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
86600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param address
87600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param port
88600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param localAddress
89600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return the socket
90600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
91600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public Socket createSocket(InetAddress address, int port, InetAddress localAddress) throws IOException;
92600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
93600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
94600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Creates a new Socket, binds it to myAddress:myPort and connects it to
95600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * address:port.
96600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
97600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param address the InetAddress that we'd like to connect to.
98600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param port the port that we'd like to connect to
99600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param myAddress the address that we are supposed to bind on or null
100600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *        for the "any" address.
101600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param myPort the port that we are supposed to bind on or 0 for a random
102600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * one.
103600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
104600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return a new Socket, bound on myAddress:myPort and connected to
105600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * address:port.
106600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @throws IOException if binding or connecting the socket fail for a reason
107600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * (exception relayed from the correspoonding Socket methods)
108600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
109600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public Socket createSocket(InetAddress address, int port,
110600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    InetAddress myAddress, int myPort)
111600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        throws IOException;
112600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
113600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
114600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Creates a stream SSL socket and connects it to the specified port number at the specified IP address.
115600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Added by Daniel J. Martinez Manzano <dani@dif.um.es>
116600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
117600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param address
118600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param port
119600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return the socket
120600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
121600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public SSLSocket createSSLSocket(InetAddress address, int port) throws IOException;
122600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
123600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
124600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Creates a stream SSL socket and connects it to the specified port number at the specified IP address.
125600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Added by Daniel J. Martinez Manzano <dani@dif.um.es>
126600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
127600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param address
128600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param port
129600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param localAddress -- my address.
130600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return the socket
131600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
132600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public SSLSocket createSSLSocket(InetAddress address, int port, InetAddress localAddress) throws IOException;
133600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
134600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
135600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Constructs a datagram socket and binds it to any available port on the local host machine.
136600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * comparable to "new java.net.DatagramSocket();"
137600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
138600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return the datagram socket
139600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
140600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public DatagramSocket createDatagramSocket() throws SocketException;
141600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
142600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
143600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Creates a datagram socket, bound to the specified local address.
144600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * comparable to "new java.net.DatagramSocket(port,laddr);"
145600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
146600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param port
147600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param laddr
148600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return the datagram socket
149600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
150600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public DatagramSocket createDatagramSocket(int port, InetAddress laddr)
151600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            throws SocketException;
152600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
153600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
154