package org.ifsoft.websockets; import org.jivesoftware.openfire.spi.ConnectionConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.security.cert.Certificate; import org.jivesoftware.openfire.SessionPacketRouter; import org.jivesoftware.openfire.auth.UnauthorizedException; import org.jivesoftware.openfire.net.VirtualConnection; import org.jivesoftware.openfire.session.LocalClientSession; import org.xmpp.packet.Packet; public class WSConnection extends VirtualConnection { private static Logger Log = LoggerFactory.getLogger( "WSConnection" ); private SessionPacketRouter router; private String remoteAddr; private String hostName; private LocalClientSession session; private XMPPServlet.XMPPWebSocket socket; private boolean isSecure = false; public WSConnection( String remoteAddr, String hostName ) { this.remoteAddr = remoteAddr; this.hostName = hostName; } public void setSocket( XMPPServlet.XMPPWebSocket socket ) { this.socket = socket; } public boolean isSecure() { return isSecure; } public void setSecure(boolean isSecure) { this.isSecure = isSecure; } public SessionPacketRouter getRouter() { return router; } public void setRouter(SessionPacketRouter router) { this.router = router; } public void closeVirtualConnection() { Log.debug("WSConnection - close "); this.socket.disconnect(); } public byte[] getAddress() { return remoteAddr.getBytes(); } public String getHostAddress() { return remoteAddr; // return wsSocket.getHostAddress(); } public String getHostName() { return ( hostName != null ) ? hostName : "0.0.0.0"; // return ( wsSocket.getHostName() == null ) ? wsSocket.getHostName() : "0.0.0.0"; } public void systemShutdown() { } public void deliver(Packet packet) throws UnauthorizedException { deliverRawText(packet.toXML()); } public void deliverRawText(String text) { this.socket.deliver(text); } @Override public ConnectionConfiguration getConfiguration() { // TODO Here we run into an issue with the ConnectionConfiguration introduced in Openfire 4: // it is not extensible in the sense that unforeseen connection types can be added. // For now, null is returned, as this object is likely to be unused (its lifecycle is // not managed by a ConnectionListener instance). return null; } public Certificate[] getPeerCertificates() { return null; } }