blob: 651dc05a4f9705c91aecd8f66ad1ed49c597aac3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
* Copyright (C) 2012 Brian P. Hinz
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This software 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 for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*/
// -=- Socket - abstract base-class for any kind of network stream/socket
package com.tigervnc.network;
import com.tigervnc.rdr.*;
import java.nio.channels.*;
import java.nio.channels.spi.SelectorProvider;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
abstract public class Socket {
public Socket(FileDescriptor fd) {
instream = new FdInStream(fd);
outstream = new FdOutStream(fd);
ownStreams = true; isShutdown_ = false;
queryConnection = false;
}
public FdInStream inStream() {return instream;}
public FdOutStream outStream() {return outstream;}
public FileDescriptor getFd() {return outstream.getFd();}
// if shutdown() is overridden then the override MUST call on to here
public void shutdown() {isShutdown_ = true;}
public void close() throws IOException {getFd().close();}
public final boolean isShutdown() {return isShutdown_;}
// information about this end of the socket
abstract public int getMyPort();
// information about the remote end of the socket
abstract public String getPeerAddress(); // a string e.g. "192.168.0.1"
abstract public String getPeerName();
abstract public int getPeerPort();
abstract public String getPeerEndpoint(); // <address>::<port>
// Is the remote end on the same machine?
abstract public boolean sameMachine();
public void setRequiresQuery() {queryConnection = true;}
public final boolean requiresQuery() {return queryConnection;}
protected Socket() {
instream = null; outstream = null; ownStreams = false;
isShutdown_ = false; queryConnection = false;
}
protected Socket(FdInStream i, FdOutStream o, boolean own) {
instream = i; outstream = o; ownStreams = own;
isShutdown_ = false; queryConnection = false;
}
protected FdInStream instream;
protected FdOutStream outstream;
boolean ownStreams;
boolean isShutdown_;
boolean queryConnection;
}
|