diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LoginRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LoginRequestHandler.java index d3f63473a..7b6a47027 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LoginRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LoginRequestHandler.java @@ -2,14 +2,18 @@ package com.gempukku.lotro.async; import com.gempukku.lotro.game.Player; import org.jboss.netty.channel.MessageEvent; +import org.jboss.netty.handler.codec.http.CookieEncoder; import org.jboss.netty.handler.codec.http.HttpMethod; import org.jboss.netty.handler.codec.http.HttpRequest; import org.jboss.netty.handler.codec.http.multipart.HttpPostRequestDecoder; import java.lang.reflect.Type; import java.sql.SQLException; +import java.util.Collections; import java.util.Map; +import static org.jboss.netty.handler.codec.http.HttpHeaders.Names.SET_COOKIE; + public class LoginRequestHandler extends LotroServerRequestHandler implements UriRequestHandler { public LoginRequestHandler(Map context) { super(context); @@ -26,7 +30,7 @@ public class LoginRequestHandler extends LotroServerRequestHandler implements Ur Player player = _playerDao.loginUser(login, password); if (player != null) { if (player.getType().contains("u")) { - responseWriter.writeResponse(null, logUserReturningCookies(e, login)); + responseWriter.writeResponse(null, logUserReturningHeaders(e, login)); } else { responseWriter.writeError(403); } @@ -42,8 +46,13 @@ public class LoginRequestHandler extends LotroServerRequestHandler implements Ur } } - private Map logUserReturningCookies(MessageEvent e, String login) throws SQLException { + private Map logUserReturningHeaders(MessageEvent e, String login) throws SQLException { _playerDao.updateLastLoginIp(login, e.getChannel().getRemoteAddress().toString()); - return _loggedUserHolder.logUser(login); + + CookieEncoder cookieEncoder = new CookieEncoder(true); + for (Map.Entry cookie : _loggedUserHolder.logUser(login).entrySet()) + cookieEncoder.addCookie(cookie.getKey(), cookie.getValue()); + + return Collections.singletonMap(SET_COOKIE, cookieEncoder.encode()); } } diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroAsyncServer.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroAsyncServer.java index 36cbb27e3..7cfd1d5b7 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroAsyncServer.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroAsyncServer.java @@ -21,6 +21,6 @@ public class LotroAsyncServer { bootstrap.setOption("child.tcpNoDelay", true); bootstrap.setOption("child.keepAlive", true); - bootstrap.bind(new InetSocketAddress(80)); + bootstrap.bind(new InetSocketAddress(8080)); } } diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroHttpRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroHttpRequestHandler.java index f7057fb48..75ce5e1b8 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroHttpRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroHttpRequestHandler.java @@ -3,12 +3,10 @@ package com.gempukku.lotro.async; import org.apache.log4j.Logger; import org.jboss.netty.buffer.ChannelBuffers; import org.jboss.netty.channel.*; -import org.jboss.netty.handler.codec.http.*; -import static org.jboss.netty.handler.codec.http.HttpHeaders.Names.*; -import static org.jboss.netty.handler.codec.http.HttpHeaders.is100ContinueExpected; -import static org.jboss.netty.handler.codec.http.HttpHeaders.isKeepAlive; -import static org.jboss.netty.handler.codec.http.HttpResponseStatus.*; -import static org.jboss.netty.handler.codec.http.HttpVersion.HTTP_1_1; +import org.jboss.netty.handler.codec.http.DefaultHttpResponse; +import org.jboss.netty.handler.codec.http.HttpRequest; +import org.jboss.netty.handler.codec.http.HttpResponse; +import org.jboss.netty.handler.codec.http.HttpResponseStatus; import org.jboss.netty.util.CharsetUtil; import org.w3c.dom.Document; @@ -20,6 +18,12 @@ import java.io.*; import java.lang.reflect.Type; import java.util.Map; +import static org.jboss.netty.handler.codec.http.HttpHeaders.Names.*; +import static org.jboss.netty.handler.codec.http.HttpHeaders.is100ContinueExpected; +import static org.jboss.netty.handler.codec.http.HttpHeaders.isKeepAlive; +import static org.jboss.netty.handler.codec.http.HttpResponseStatus.*; +import static org.jboss.netty.handler.codec.http.HttpVersion.HTTP_1_1; + public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler { private Logger _log = Logger.getLogger(LotroHttpRequestHandler.class); @@ -50,7 +54,12 @@ public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler { ResponseWriter responseWriter = new ResponseWriter() { @Override public void writeError(int status) { - writeHttpErrorResponse(request, status, e); + writeHttpErrorResponse(request, status, null, e); + } + + @Override + public void writeError(int status, Map headers) { + writeHttpErrorResponse(request, status, headers, e); } @Override @@ -59,8 +68,8 @@ public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler { } @Override - public void writeResponse(Document document, Map addCookies) { - writeHttpResponse(request, document, addCookies, e); + public void writeResponse(Document document, Map headers) { + writeHttpResponse(request, document, headers, e); } @Override @@ -84,7 +93,7 @@ public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler { try { raf = new RandomAccessFile(file, "r"); } catch (FileNotFoundException fnfe) { - writeHttpErrorResponse(request, 404, e); + writeHttpErrorResponse(request, 404, null, e); return; } long fileLength = raf.length(); @@ -128,15 +137,20 @@ public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler { writeFuture.addListener(ChannelFutureListener.CLOSE); } } catch (IOException exp) { - writeHttpErrorResponse(request, 500, e); + writeHttpErrorResponse(request, 500, null, e); } } - private void writeHttpErrorResponse(HttpRequest request, int status, MessageEvent e) { + private void writeHttpErrorResponse(HttpRequest request, int status, Map headers, MessageEvent e) { boolean keepAlive = isKeepAlive(request); HttpResponse response = new DefaultHttpResponse(HTTP_1_1, HttpResponseStatus.valueOf(status)); + if (headers != null) { + for (Map.Entry header: headers.entrySet()) + response.setHeader(header.getKey(), header.getValue()); + } + if (keepAlive) { // Add 'Content-Length' header only for a keep-alive connection. response.setHeader(CONTENT_LENGTH, response.getContent().readableBytes()); @@ -148,7 +162,7 @@ public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler { } } - private void writeHttpResponse(HttpRequest request, Document document, Map addCookies, MessageEvent e) { + private void writeHttpResponse(HttpRequest request, Document document, Map headers, MessageEvent e) { // Decide whether to close the connection or not. boolean keepAlive = isKeepAlive(request); @@ -156,11 +170,9 @@ public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler { // Build the response object. HttpResponse response = new DefaultHttpResponse(HTTP_1_1, OK); - if (addCookies != null) { - CookieEncoder cookieEncoder = new CookieEncoder(true); - for (Map.Entry cookie : addCookies.entrySet()) - cookieEncoder.addCookie(cookie.getKey(), cookie.getValue()); - response.setHeader(SET_COOKIE, cookieEncoder.encode()); + if (headers != null) { + for (Map.Entry header: headers.entrySet()) + response.setHeader(header.getKey(), header.getValue()); } int length = 0; diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/ResponseWriter.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/ResponseWriter.java index c4715e7e2..4285bd7ca 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/ResponseWriter.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/ResponseWriter.java @@ -7,6 +7,7 @@ import java.util.Map; public interface ResponseWriter { public void writeError(int status); + public void writeError(int status, Map headers); public void writeFile(File file); diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/RootUriRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/RootUriRequestHandler.java index 657fe54c0..c0f75ac99 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/RootUriRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/RootUriRequestHandler.java @@ -4,6 +4,7 @@ import org.jboss.netty.channel.MessageEvent; import org.jboss.netty.handler.codec.http.HttpRequest; import java.lang.reflect.Type; +import java.util.Collections; import java.util.Map; public class RootUriRequestHandler implements UriRequestHandler { @@ -26,9 +27,11 @@ public class RootUriRequestHandler implements UriRequestHandler { public void handleRequest(String uri, HttpRequest request, Map context, ResponseWriter responseWriter, MessageEvent e) { if (uri.startsWith(_webContextPath)) { _webRequestHandler.handleRequest(uri.substring(_webContextPath.length()), request, context, responseWriter, e); + } else if (uri.equals("/gemp-lotr")) { + responseWriter.writeError(301, Collections.singletonMap("Location", "/gemp-lotr/")); } else if (uri.startsWith(_serverContextPath +"hall")) { _hallRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+4), request, context, responseWriter, e); - } else if (uri.startsWith(_serverContextPath+"deck")) { + } else if (uri.startsWith(_serverContextPath + "deck")) { _deckRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+4), request, context, responseWriter, e); } else if (uri.startsWith(_serverContextPath+"login")) { _loginRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+5), request, context, responseWriter, e); diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/WebRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/WebRequestHandler.java index 904658845..e84631428 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/WebRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/WebRequestHandler.java @@ -1,5 +1,6 @@ package com.gempukku.lotro.async; +import com.gempukku.lotro.common.ApplicationConfiguration; import org.jboss.netty.channel.MessageEvent; import org.jboss.netty.handler.codec.http.HttpRequest; @@ -8,7 +9,7 @@ import java.lang.reflect.Type; import java.util.Map; public class WebRequestHandler implements UriRequestHandler { - private String _root = "I:\\dev\\projects\\gemp-lotr\\gemp-lotr-web\\src\\main\\webapp\\"; + private String _root = ApplicationConfiguration.getProperty("web.folder"); @Override public void handleRequest(String uri, HttpRequest request, Map context, ResponseWriter responseWriter, MessageEvent e) {