diff --git a/ocpp-common/src/main/java/eu/chargetime/ocpp/model/SessionInformation.java b/ocpp-common/src/main/java/eu/chargetime/ocpp/model/SessionInformation.java index 190cf5aa1..9687ec5c8 100644 --- a/ocpp-common/src/main/java/eu/chargetime/ocpp/model/SessionInformation.java +++ b/ocpp-common/src/main/java/eu/chargetime/ocpp/model/SessionInformation.java @@ -24,27 +24,40 @@ of this software and associated documentation files (the "Software"), to deal SOFTWARE. */ +import java.net.InetSocketAddress; + public class SessionInformation { private String identifier; + private InetSocketAddress address; public String getIdentifier() { return identifier; } + public InetSocketAddress getAddress() { return address; } public static class Builder { private String identifier; + private InetSocketAddress address; public Builder Identifier(String identifier) { this.identifier = identifier; return this; } + public Builder InternetAddress(InetSocketAddress address) { + this.address = address; + return this; + } + public SessionInformation build() { SessionInformation sessionInformation = new SessionInformation(); sessionInformation.identifier = this.identifier; + sessionInformation.address = this.address; return sessionInformation; } + + } } diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPClient.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPClient.java index 9a03a9387..bef10c641 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPClient.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPClient.java @@ -119,7 +119,7 @@ private void openWS() { server.createContext("/", new WSHttpHandler(WSDL_CHARGE_POINT, message -> { SOAPMessage soapMessage = null; try { - soapMessage = transmitter.relay(message).get(); + soapMessage = transmitter.relay(message.getMessage()).get(); } catch (InterruptedException e) { //e.printStackTrace(); } catch (ExecutionException e) { diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPMessageInfo.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPMessageInfo.java new file mode 100644 index 000000000..7cd08b126 --- /dev/null +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPMessageInfo.java @@ -0,0 +1,25 @@ +package eu.chargetime.ocpp; + +import javax.xml.soap.SOAPMessage; +import java.net.InetSocketAddress; + +/** + * Created by emil on 21.05.2017. + */ +public class SOAPMessageInfo { + private final InetSocketAddress address; + private final SOAPMessage message; + + public SOAPMessageInfo(InetSocketAddress address, SOAPMessage message) { + this.address = address; + this.message = message; + } + + public InetSocketAddress getAddress() { + return address; + } + + public SOAPMessage getMessage() { + return message; + } +} diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WSHttpHandler.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WSHttpHandler.java index e6cc24ad5..7e62b6434 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WSHttpHandler.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WSHttpHandler.java @@ -48,7 +48,7 @@ public void handle(HttpExchange httpExchange) throws IOException { sendWSDL(httpExchange); } else { SOAPMessage request = parse(httpExchange.getRequestBody()); - SOAPMessage confirmation = events.incomingRequest(request); + SOAPMessage confirmation = events.incomingRequest(new SOAPMessageInfo(httpExchange.getRemoteAddress(), request)); OutputStream responseStream = httpExchange.getResponseBody(); try { httpExchange.getResponseHeaders().add("Content-Type", "application/soap+xml; charset=utf-8"); diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WSHttpHandlerEvents.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WSHttpHandlerEvents.java index a4578fbf0..35952caef 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WSHttpHandlerEvents.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WSHttpHandlerEvents.java @@ -27,5 +27,5 @@ of this software and associated documentation files (the "Software"), to deal import javax.xml.soap.SOAPMessage; public interface WSHttpHandlerEvents { - SOAPMessage incomingRequest(SOAPMessage message); + SOAPMessage incomingRequest(SOAPMessageInfo messageInfo); } diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebServiceListener.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebServiceListener.java index 2cd45ede0..d48571fe0 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebServiceListener.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebServiceListener.java @@ -84,7 +84,8 @@ private void removeChargebox(String identity) { } @Override - public SOAPMessage incomingRequest(SOAPMessage message) { + public SOAPMessage incomingRequest(SOAPMessageInfo messageInfo) { + SOAPMessage message = messageInfo.getMessage(); String identity = SOAPSyncHelper.getHeaderValue(message, "chargeBoxIdentity"); if (!chargeBoxes.containsKey(identity)) { String toUrl = SOAPSyncHelper.getHeaderValue(message, "From"); @@ -99,7 +100,7 @@ public SOAPMessage incomingRequest(SOAPMessage message) { chargeBoxes.remove(identity); })); - SessionInformation information = new SessionInformation.Builder().Identifier(identity).build(); + SessionInformation information = new SessionInformation.Builder().Identifier(identity).InternetAddress(messageInfo.getAddress()).build(); events.newSession(session, information); chargeBoxes.put(identity, webServiceReceiver); } diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebSocketListener.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebSocketListener.java index 1d545e0fd..8a1c67fe0 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebSocketListener.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebSocketListener.java @@ -51,7 +51,10 @@ public void open(String hostname, int port, ListenerEvents handler) { public void onOpen(WebSocket webSocket, ClientHandshake clientHandshake) { WebSocketReceiver receiver = new WebSocketReceiver(message -> webSocket.send(message)); sockets.put(webSocket, receiver); - SessionInformation information = new SessionInformation.Builder().Identifier(clientHandshake.getResourceDescriptor()).build(); + SessionInformation information = new SessionInformation.Builder() + .Identifier(clientHandshake.getResourceDescriptor()) + .InternetAddress(webSocket.getRemoteSocketAddress()).build(); + handler.newSession(new Session(new JSONCommunicator(receiver), new Queue(), handleRequestAsync), information); }