diff --git a/src/java/com/threerings/crowd/server/CrowdClient.java b/src/java/com/threerings/crowd/server/CrowdClient.java
index 5c5d3a0e8..a07c9e38e 100644
--- a/src/java/com/threerings/crowd/server/CrowdClient.java
+++ b/src/java/com/threerings/crowd/server/CrowdClient.java
@@ -1,9 +1,11 @@
//
-// $Id: CrowdClient.java,v 1.3 2001/10/11 04:07:51 mdb Exp $
+// $Id: CrowdClient.java,v 1.4 2001/12/03 20:14:51 mdb Exp $
package com.threerings.crowd.server;
+import com.threerings.presents.net.AuthResponseData;
import com.threerings.presents.server.PresentsClient;
+
import com.threerings.crowd.data.BodyObject;
/**
@@ -12,9 +14,9 @@ import com.threerings.crowd.data.BodyObject;
*/
public class CrowdClient extends PresentsClient
{
- protected void sessionWillStart ()
+ protected void sessionWillStart (AuthResponseData rdata)
{
- super.sessionWillStart();
+ super.sessionWillStart(rdata);
// cast our client object to a body object
_bodobj = (BodyObject)_clobj;
@@ -26,9 +28,9 @@ public class CrowdClient extends PresentsClient
CrowdServer.mapBody(_username, _bodobj);
}
- protected void sessionWillResume ()
+ protected void sessionWillResume (AuthResponseData rdata)
{
- super.sessionWillResume();
+ super.sessionWillResume(rdata);
// nothing to do here presently
}
diff --git a/src/java/com/threerings/presents/server/ClientManager.java b/src/java/com/threerings/presents/server/ClientManager.java
index d18480fc1..eca1057fc 100644
--- a/src/java/com/threerings/presents/server/ClientManager.java
+++ b/src/java/com/threerings/presents/server/ClientManager.java
@@ -1,5 +1,5 @@
//
-// $Id: ClientManager.java,v 1.11 2001/10/11 04:07:53 mdb Exp $
+// $Id: ClientManager.java,v 1.12 2001/12/03 20:14:51 mdb Exp $
package com.threerings.presents.server;
@@ -8,6 +8,8 @@ import java.util.HashMap;
import com.threerings.presents.Log;
import com.threerings.presents.data.ClientObject;
+import com.threerings.presents.net.AuthRequest;
+import com.threerings.presents.net.AuthResponse;
import com.threerings.presents.net.Credentials;
import com.threerings.presents.server.net.*;
@@ -83,16 +85,11 @@ public class ClientManager implements ConnectionObserver
return _clobjClass;
}
- /**
- * Called when a new connection is established with the connection
- * manager. Only fully authenticated connections will be passed on to
- * the connection observer.
- *
- * @param conn The newly established connection.
- */
- public synchronized
- void connectionEstablished (Connection conn, Credentials creds)
+ // documentation inherited
+ public synchronized void connectionEstablished (
+ Connection conn, AuthRequest req, AuthResponse rsp)
{
+ Credentials creds = req.getCredentials();
String username = creds.getUsername();
// see if there's a client already registered with this username
@@ -101,7 +98,7 @@ public class ClientManager implements ConnectionObserver
if (client != null) {
Log.info("Session resumed [username=" + username +
", conn=" + conn + "].");
- client.resumeSession(conn);
+ client.resumeSession(conn, rsp.getData());
} else {
Log.info("Session initiated [username=" + username +
@@ -109,7 +106,7 @@ public class ClientManager implements ConnectionObserver
// create a new client and stick'em in the table
try {
client = (PresentsClient)_clientClass.newInstance();
- client.startSession(this, username, conn);
+ client.startSession(this, username, conn, rsp.getData());
_usermap.put(username, client);
} catch (Exception e) {
Log.warning("Failed to instantiate client instance to " +
@@ -123,15 +120,7 @@ public class ClientManager implements ConnectionObserver
_conmap.put(conn, client);
}
- /**
- * Called if a connection fails for any reason. If a connection fails,
- * connectionClosed will not be called. This call to
- * connectionFailed is the last the observers will hear
- * about it.
- *
- * @param conn The connection in that failed.
- * @param fault The exception associated with the failure.
- */
+ // documentation inherited
public synchronized
void connectionFailed (Connection conn, IOException fault)
{
@@ -151,11 +140,7 @@ public class ClientManager implements ConnectionObserver
}
}
- /**
- * Called when a connection has been closed in an orderly manner.
- *
- * @param conn The recently closed connection.
- */
+ // documentation inherited
public synchronized void connectionClosed (Connection conn)
{
// remove the client from the connection map
diff --git a/src/java/com/threerings/presents/server/PresentsClient.java b/src/java/com/threerings/presents/server/PresentsClient.java
index 11928c0b3..96a0c71d5 100644
--- a/src/java/com/threerings/presents/server/PresentsClient.java
+++ b/src/java/com/threerings/presents/server/PresentsClient.java
@@ -1,5 +1,5 @@
//
-// $Id: PresentsClient.java,v 1.24 2001/10/24 00:36:40 mdb Exp $
+// $Id: PresentsClient.java,v 1.25 2001/12/03 20:14:51 mdb Exp $
package com.threerings.presents.server;
@@ -53,7 +53,8 @@ public class PresentsClient
* connection instance and begins a client session.
*/
protected void startSession (
- ClientManager cmgr, String username, Connection conn)
+ ClientManager cmgr, String username, Connection conn,
+ final AuthResponseData rdata)
{
_cmgr = cmgr;
_username = username;
@@ -66,7 +67,7 @@ public class PresentsClient
public void objectAvailable (DObject object)
{
setClientObject((ClientObject)object);
- sessionWillStart();
+ sessionWillStart(rdata);
sendBootstrap();
}
@@ -96,7 +97,8 @@ public class PresentsClient
* authenticates as this already established client. This must only be
* called from the congmr thread.
*/
- protected void resumeSession (Connection conn)
+ protected void resumeSession (
+ Connection conn, final AuthResponseData rdata)
{
Connection oldconn = getConnection();
@@ -122,7 +124,7 @@ public class PresentsClient
{
// now that we're on the dobjmgr thread we can resume our
// session resumption
- finishResumeSession();
+ finishResumeSession(rdata);
return false;
}
};
@@ -134,10 +136,10 @@ public class PresentsClient
* resumption. We call some call backs and send the bootstrap info to
* the client.
*/
- protected void finishResumeSession ()
+ protected void finishResumeSession (AuthResponseData rdata)
{
// let derived classes do any session resuming
- sessionWillResume();
+ sessionWillResume(rdata);
// send off a bootstrap notification immediately because we've
// already got our client object
@@ -237,8 +239,11 @@ public class PresentsClient
*
Note: This function will be called on the dobjmgr * thread which means that object manipulations are OK, but client * instance manipulations must done carefully. + * + * @param rdata the data object delivered to the client during the + * authentication phase. */ - protected void sessionWillStart () + protected void sessionWillStart (AuthResponseData rdata) { } @@ -252,8 +257,11 @@ public class PresentsClient *
Note: This function will be called on the dobjmgr * thread which means that object manipulations are OK, but client * instance manipulations must done carefully. + * + * @param rdata the data object delivered to the client during the + * authentication phase. */ - protected void sessionWillResume () + protected void sessionWillResume (AuthResponseData rdata) { } diff --git a/src/java/com/threerings/presents/server/net/AuthManager.java b/src/java/com/threerings/presents/server/net/AuthManager.java index 9c42fbc0f..7cb9e5343 100644 --- a/src/java/com/threerings/presents/server/net/AuthManager.java +++ b/src/java/com/threerings/presents/server/net/AuthManager.java @@ -1,5 +1,5 @@ // -// $Id: AuthManager.java,v 1.5 2001/10/11 04:07:53 mdb Exp $ +// $Id: AuthManager.java,v 1.6 2001/12/03 20:14:51 mdb Exp $ package com.threerings.presents.server.net; @@ -72,8 +72,13 @@ public class AuthManager extends LoopingThread // now ship the response back aconn.postMessage(rsp); + // stuff a reference to the auth response into the connection + // so that we have access to it later in the authentication + // process + aconn.setAuthResponse(rsp); + // if the authentication request was granted, let the - // connection manager know that we just authed a connection + // connection manager know that we just authed _conmgr.connectionDidAuthenticate(aconn); } catch (Exception e) { diff --git a/src/java/com/threerings/presents/server/net/AuthingConnection.java b/src/java/com/threerings/presents/server/net/AuthingConnection.java index 7b57f6347..c763c5600 100644 --- a/src/java/com/threerings/presents/server/net/AuthingConnection.java +++ b/src/java/com/threerings/presents/server/net/AuthingConnection.java @@ -1,5 +1,5 @@ // -// $Id: AuthingConnection.java,v 1.4 2001/10/11 04:07:53 mdb Exp $ +// $Id: AuthingConnection.java,v 1.5 2001/12/03 20:14:51 mdb Exp $ package com.threerings.presents.server.net; @@ -7,8 +7,9 @@ import java.io.IOException; import ninja2.core.io_core.nbio.NonblockingSocket; import com.threerings.presents.Log; -import com.threerings.presents.net.UpstreamMessage; import com.threerings.presents.net.AuthRequest; +import com.threerings.presents.net.AuthResponse; +import com.threerings.presents.net.UpstreamMessage; /** * The authing connection manages the client connection until @@ -58,14 +59,30 @@ public class AuthingConnection return _authreq; } + /** + * Returns the auth response delivered to the client (only valid after + * the auth request has been processed. + */ + public AuthResponse getAuthResponse () + { + return _authrsp; + } + + /** + * Stores a reference to the auth response delivered to this + * connection. This is called by the auth manager after delivering the + * auth response to the client. + */ + public void setAuthResponse (AuthResponse authrsp) + { + _authrsp = authrsp; + } + public String toString () { return "[mode=AUTHING, addr=" + _socket.getInetAddress() + "]"; } - protected int _state = AWAITING_AUTH_REQUEST; protected AuthRequest _authreq; - - protected static final int AWAITING_AUTH_REQUEST = 0; - protected static final int PROCESSING_AUTH_REQUEST = 1; + protected AuthResponse _authrsp; } diff --git a/src/java/com/threerings/presents/server/net/ConnectionManager.java b/src/java/com/threerings/presents/server/net/ConnectionManager.java index 6bee77451..3a05e0595 100644 --- a/src/java/com/threerings/presents/server/net/ConnectionManager.java +++ b/src/java/com/threerings/presents/server/net/ConnectionManager.java @@ -1,5 +1,5 @@ // -// $Id: ConnectionManager.java,v 1.13 2001/10/25 23:37:13 mdb Exp $ +// $Id: ConnectionManager.java,v 1.14 2001/12/03 20:14:51 mdb Exp $ package com.threerings.presents.server.net; @@ -14,7 +14,8 @@ import com.threerings.presents.Log; import com.threerings.presents.client.Client; import com.threerings.presents.io.FramingOutputStream; import com.threerings.presents.io.TypedObjectFactory; -import com.threerings.presents.net.Credentials; +import com.threerings.presents.net.AuthRequest; +import com.threerings.presents.net.AuthResponse; import com.threerings.presents.net.DownstreamMessage; import com.threerings.presents.server.PresentsServer; @@ -104,7 +105,8 @@ public class ConnectionManager extends LoopingThread * Notifies the connection observers of a connection event. Used * internally. */ - protected void notifyObservers (int code, Connection conn, Object arg) + protected void notifyObservers ( + int code, Connection conn, Object arg1, Object arg2) { synchronized (_observers) { for (int i = 0; i < _observers.size(); i++) { @@ -112,10 +114,11 @@ public class ConnectionManager extends LoopingThread (ConnectionObserver)_observers.get(i); switch (code) { case CONNECTION_ESTABLISHED: - obs.connectionEstablished(conn, (Credentials)arg); + obs.connectionEstablished(conn, (AuthRequest)arg1, + (AuthResponse)arg2); break; case CONNECTION_FAILED: - obs.connectionFailed(conn, (IOException)arg); + obs.connectionFailed(conn, (IOException)arg1); break; case CONNECTION_CLOSED: obs.connectionClosed(conn); @@ -171,7 +174,7 @@ public class ConnectionManager extends LoopingThread // and let our observers know about our new connection notifyObservers(CONNECTION_ESTABLISHED, rconn, - conn.getAuthRequest().getCredentials()); + conn.getAuthRequest(), conn.getAuthResponse()); } catch (IOException ioe) { Log.warning("Failure upgrading authing connection to " + @@ -279,7 +282,7 @@ public class ConnectionManager extends LoopingThread _selset.remove(conn.getSelectItem()); // let our observers know what's up - notifyObservers(CONNECTION_FAILED, conn, ioe); + notifyObservers(CONNECTION_FAILED, conn, ioe, null); } /** @@ -293,7 +296,7 @@ public class ConnectionManager extends LoopingThread _selset.remove(conn.getSelectItem()); // let our observers know what's up - notifyObservers(CONNECTION_CLOSED, conn, null); + notifyObservers(CONNECTION_CLOSED, conn, null, null); } /** diff --git a/src/java/com/threerings/presents/server/net/ConnectionObserver.java b/src/java/com/threerings/presents/server/net/ConnectionObserver.java index 6ff8b6676..077df3329 100644 --- a/src/java/com/threerings/presents/server/net/ConnectionObserver.java +++ b/src/java/com/threerings/presents/server/net/ConnectionObserver.java @@ -1,10 +1,11 @@ // -// $Id: ConnectionObserver.java,v 1.5 2001/10/11 04:07:53 mdb Exp $ +// $Id: ConnectionObserver.java,v 1.6 2001/12/03 20:14:51 mdb Exp $ package com.threerings.presents.server.net; import java.io.IOException; -import com.threerings.presents.net.Credentials; +import com.threerings.presents.net.AuthRequest; +import com.threerings.presents.net.AuthResponse; /** * A connection observer can be registered with the connection manager to @@ -24,10 +25,11 @@ public interface ConnectionObserver * the connection observer. * * @param conn The newly established connection. - * @param creds The credentials with which this connection - * (successfully) authenticated. + * @param req The auth request provided by the client. + * @param rsp The auth response provided to the client. */ - public void connectionEstablished (Connection conn, Credentials creds); + public void connectionEstablished ( + Connection conn, AuthRequest req, AuthResponse rsp); /** * Called if a connection fails for any reason. If a connection fails,