Skip to content

Commit

Permalink
Fix more null pointer exceptions
Browse files Browse the repository at this point in the history
If there is no network available, then the InetAddress.getByName will
fail, leaving server = null.  This then causes a NullPointerException
when the Socket goes to use it. Modified how the server variable is
handled in order to fix this.

Also modified RelayConnection so that a handler can only be added once
for a specific message.  This should prevent the bufferManager receiving
multiple callbacks once the connection is restored.
  • Loading branch information
ubergeek42 committed May 30, 2012
1 parent c59a978 commit 16afa1d
Showing 1 changed file with 14 additions and 10 deletions.
24 changes: 14 additions & 10 deletions weechat-relay/src/com/ubergeek42/weechat/relay/RelayConnection.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -26,13 +27,14 @@ public class RelayConnection {

private Socket sock = null;
private String password = null;
private String serverString = null;
private InetAddress server = null;
private int port;

private OutputStream outstream = null;
private InputStream instream = null;

private HashMap<String,ArrayList<RelayMessageHandler>> messageHandlers = new HashMap<String, ArrayList<RelayMessageHandler>>();
private HashMap<String,HashSet<RelayMessageHandler>> messageHandlers = new HashMap<String, HashSet<RelayMessageHandler>>();
private ArrayList<RelayConnectionHandler> connectionHandlers = new ArrayList<RelayConnectionHandler>();

private boolean connected = false;
Expand All @@ -44,11 +46,7 @@ public class RelayConnection {
* @param password - password for the relay server
*/
public RelayConnection(String server, String port, String password) {
try {
this.server = InetAddress.getByName(server);
} catch (UnknownHostException e) {
e.printStackTrace();
}
this.serverString = server;
this.port = Integer.parseInt(port);
this.password = password;
}
Expand All @@ -57,7 +55,7 @@ public RelayConnection(String server, String port, String password) {
* @return The server we are connected to
*/
public String getServer() {
return server.getHostName();
return serverString;
}

/**
Expand All @@ -73,9 +71,9 @@ public boolean isConnected() {
* @param wmh - The object to receive the callback
*/
public void addHandler(String id, RelayMessageHandler wmh) {
ArrayList<RelayMessageHandler> currentHandlers = messageHandlers.get(id);
HashSet<RelayMessageHandler> currentHandlers = messageHandlers.get(id);
if (currentHandlers == null)
currentHandlers = new ArrayList<RelayMessageHandler>();
currentHandlers = new HashSet<RelayMessageHandler>();
currentHandlers.add(wmh);
messageHandlers.put(id, currentHandlers);
}
Expand All @@ -85,6 +83,12 @@ public void addHandler(String id, RelayMessageHandler wmh) {
* TODO: proper error handling(should throw an exception)
*/
public void tryConnect() {
try {
server = InetAddress.getByName(serverString);
} catch (UnknownHostException e) {
e.printStackTrace();
return;
}
createSocketConnection.start();
}
/**
Expand Down Expand Up @@ -245,7 +249,7 @@ public void run() {
private void handleMessage(RelayMessage msg) {
String id = msg.getID();
if (messageHandlers.containsKey(id)) {
ArrayList<RelayMessageHandler> handlers = messageHandlers.get(id);
HashSet<RelayMessageHandler> handlers = messageHandlers.get(id);
for (RelayMessageHandler rmh : handlers) {
for(RelayObject obj: msg.getObjects()) {
rmh.handleMessage(obj, id);
Expand Down

0 comments on commit 16afa1d

Please sign in to comment.