forked from interdroid/smartsockets
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TODO
212 lines (137 loc) · 7.61 KB
/
TODO
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
TODO:
Niels/Jonathan bumped into hub address confusion...
When hubs (or clients) are started and only get a partial hub address,
it is possible that the connection can still be created to the hub.
However, the client may not be reachable over the hub because its @
part of its address is invalid. Similarly, hubs may start gossiping
partial addresses which may or may not be reachable. When reachable, the
connections are closed again because they result in double links between
hubs. As a result, the set of 'known hubs' contains some garbage.
We can fix this by making a distinction between 'trusted' (machine
generated) and 'untrusted' (user provided) addresses. Both can be
gossiped and connected to. Once it is clear what the relation between
a untrusted and trusted address is, this should be gossiped as well.
This will allow hubs to map requests from untrusted to trusted
addresses.
Clients should not be allowed to publish an untrusted address of
themselves. Must check if this is possible now.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=
Ask Ganymed/Trilead developers to add our "connect to InetAddress" patch"
to the official release.
User friendlyness!!
X Create 'shared' directsocketfactory
Otherwise init gets screwed up when direct isn't loaded!
X Decent error when direct port is in use
Fix hub to only reply to 'named' lookup mcasts
Reduce 'INFO' output to something which is human-readable
Reduce output of hub when servicelink cannot be found
Fix example property/log4j files
MATHIJS: Add easy shutdown for hubs
MATHIJS: extend viz to show network name
MATHIJS: extend viz to show routing throughput
Cache info in servicelink instances ?
Web interface to proxies to make it easier to add addresses ?
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Don't remember context/reason;
? When only a partial address is known, direct connections are no problem.
Sending messages through the proxies fails, however, since the complete
address is required to find the machine...
? Clean up IPAddressSets to understand external/public/site/link ?
? Check 'winner' cache
- add cluster based caching
- check how the connection properties interact with serversockets
(e.g., what happens to reverse setups when I turn winner cache on)
? Check if client info is propagated correctly in proxies ...
? Allow STUN on a specific network instead of automatically using all.
- - - - - - - - - - - - - - - - - -
Done:
X Jonathan found a bug:
- Using VirtualSocketFactory and DirectSocketFactory, I just tried to
put null for the Map<String, Object> properties argument for socket
creation, and it result in an exception : Connection refused... It would
be more user friendly to detect the null value instead of forcing the
user to put "new HashMap<String, Object>()" when no specific property is
needed.
NOTE: I cannot reproduce this. The code seems to check for null -- J
- Clarification:
- DirectSocketFactory line 1779 : p can be null (it should not arrive,
but what if ?) and it results in a NPE.
solution : if(p == null) return getSocketFactory() else return new
DirectSocketFactory(p);
X Jonathan found a bug:
- When using the UPNP class, more precisely the addPortMapping(...)
method, I got a NullPointerException :
Exception in thread "main" java.lang.NullPointerException
at net.sbbi.upnp.messages.UPNPMessageFactory.getMessage(UPNPMessageFactory.java:87)
at ibis.smartsockets.util.UPNP.performMapping(UPNP.java:271)
at ibis.smartsockets.util.UPNP.addPortMapping(UPNP.java:367)
at jo.smartsocket.test.TestUPNP.main(TestUPNP.java:44)
This is due to the
"UPNPMessageFactory.getNewInstance(wanConnectionService);" call in
UPNP.java line 354 that return null, and is visibly assumed not null in
the call to "performMapping(...)" on line 367.
X Ronald found a bug
Een kleine buglet in smartsockets:
Exception in thread "Hub" java.util.ConcurrentModificationException
at java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:778)
at java.util.LinkedList$ListItr.next(LinkedList.java:713)
at ibis.smartsockets.hub.state.HubList.toString(HubList.java:205)
at ibis.smartsockets.hub.Hub.gossip(Hub.java:281)
at ibis.smartsockets.hub.Hub.run(Hub.java:378)
Gebeurt als ik een snel na elkaar connections opbouw.
X Fix shared direct socket factory (Hub+Virtual+No ssh)
X Add extra call to create address with retry, backoff, etc.
X Change current connect call to use 'sane' timeouts for each module
X Add return to sender to hub and use this to reduce 'fail' time for modules
X CHECK: hub administration !!! Gossip sometimes fails if hub crashes and is
X directy restarted: seems the administration of the receiver is confused...
X CHECK: with Ibis it very freqently occurs that the initial TCP ibis setup
fails due to an unlucky pick of the identifier (picking the same time twice)
As a result, the whole init process is repeated, but then runs into problems
since the servicelink still exists but already has all the modules registered.
This will also be a problem when mutiple Ibises are created or even simpler,
multiple VirtualSocketFactories ...
- Fix for Ibis -> base the name on a port number. These are unique per
machine unlike timestamps.
- Fix for virtualsocketfactory ? Bit harder... maybe create new
servicelink and new SocketAddressSet for each ??
X Create single app to start proxy + router
X Use UDP mcast to find local routers
X Merge bouncer into proxy
X Proxy should retry connecting to unreachable proxies (may be passed
by user and not ready yet).
X Add STUN support to DirectFactory to find external address.
X Support multiple servers for STUN
X Make sure STUN doesn't take too long ...
X Add TCP splicing to Virtual
X Add cache to Virtual which remembers best connection setup order
X Add user readable name to proxy to make visualization easier to read
X Reuses inter router links ?
X Fix hub to only accept connections from the 'right' virtual clusters
(currently it only replies to the right cluster with UDP mcast, but accepts
any connection).
Create Factory for service links
X NIO support
X Routing for Mathijs...
X Check if the UDP mcast discovery works on DAS3..
X Find a way to get MAC addresses...
Smart idea: (IS THIS TRUE) ????
If there is no shared third point between two machines, then splicing
will never work because the networks are not directly connected.
X Add ssh tunneling to DirectSocketFactory ?
- How do you known where to tunnel to ?
X Think of smart way to use bouncers ? -> replaced by STUN
X Add UDP/STUN like module to Virtual ? -> using STUN directly
X Have multiple instances of VirtualSocketFactory based on properties ?
X Make up unique ID for machines that only have local IP's (UUID ?)
--------------------------------------------------------------------------------
Version 2.0
Add hierarchical clustering
-- eg. 'das2.vu' or 'grid5000.orsay'
UDP support ?
Add support for multiple proxy addresses to VirtualSocketFactory ?
Add parallel streams (where ? Direct or Virtual or just Routers ?)
Machine may have multiple external addresses (multiple networks, each with NAT) ?
Icing on cake: have the VirtualSocket transparently move from Routed
to splice/stun type connection....
Add parallel streams to routers ?