/** * Creates a new <code>ProtobufServerConnection</code> that processes messages received from an * edge client over a given <code>Socket</code>. */ public ProtobufServerConnection(Socket socket, InternalCache c, CachedRegionHelper helper, CacheServerStats stats, int hsTimeout, int socketBufferSize, String communicationModeStr, byte communicationMode, Acceptor acceptor, ClientProtocolProcessor clientProtocolProcessor, SecurityService securityService) throws IOException { super(socket, c, helper, stats, hsTimeout, socketBufferSize, communicationModeStr, communicationMode, acceptor, securityService); this.protocolProcessor = clientProtocolProcessor; this.output = new BufferedOutputStream(socket.getOutputStream(), socketBufferSize); setClientProxyMembershipId(); doHandShake(CommunicationMode.ProtobufClientServerProtocol.getModeNumber(), 0); }
@Override protected void doOneMessage() { Socket socket = this.getSocket(); try { InputStream inputStream = socket.getInputStream(); InternalCache cache = getCache(); cache.setReadSerializedForCurrentThread(true); try { this.setFlagProcessMessagesAsFalse(); this.setFlagProcessMessagesAsFalse(); setClientDisconnectedException(e); logger.debug("Encountered EOF while processing message: {}", e); } catch (IOException | IncompatibleVersionException e) { logger.warn(e); this.setFlagProcessMessagesAsFalse(); setClientDisconnectedException(e); } finally { acceptor.getClientHealthMonitor().receivedPing(this.clientProxyMembershipID);
private void setClientProxyMembershipId() { ServerLocation serverLocation = new ServerLocation( ((InetSocketAddress) this.getSocket().getRemoteSocketAddress()).getHostName(), this.getSocketPort()); DistributedMember distributedMember = new InternalDistributedMember(serverLocation); // no handshake for new client protocol. clientProxyMembershipID = new ClientProxyMembershipID(distributedMember); }
private ServerConnection createProtobufServerConnection(Socket socket, InternalCache cache, CachedRegionHelper helper, CacheServerStats stats, int hsTimeout, int socketBufferSize, String communicationModeStr, byte communicationMode, Acceptor acceptor, SecurityService securityService) throws IOException { ClientProtocolService service = getClientProtocolService(cache.getDistributedSystem(), acceptor.getServerName()); ClientProtocolProcessor processor = service.createProcessorForCache(cache, securityService); return new ProtobufServerConnection(socket, cache, helper, stats, hsTimeout, socketBufferSize, communicationModeStr, communicationMode, acceptor, processor, securityService); } }
@Override protected boolean doHandShake(byte endpointType, int queueSize) { ClientHealthMonitor clientHealthMonitor = getAcceptor().getClientHealthMonitor(); clientHealthMonitor.registerClient(clientProxyMembershipID); clientHealthMonitor.addConnection(clientProxyMembershipID, this); return true; }
@Test public void emergencyCloseClosesSocket() throws IOException { Socket socketMock = mock(Socket.class); when(socketMock.getInetAddress()).thenReturn(InetAddress.getByName("localhost")); AcceptorImpl acceptorStub = mock(AcceptorImpl.class); ClientProtocolProcessor clientProtocolProcessorMock = mock(ClientProtocolProcessor.class); ProtobufServerConnection protobufServerConnection = getServerConnection(socketMock, clientProtocolProcessorMock, acceptorStub); protobufServerConnection.emergencyClose(); Mockito.verify(socketMock).close(); }
private ProtobufServerConnection getServerConnection(Socket socketMock, ClientProtocolProcessor clientProtocolProcessorMock, AcceptorImpl acceptorStub) throws IOException { clientHealthMonitorMock = mock(ClientHealthMonitor.class); when(acceptorStub.getClientHealthMonitor()).thenReturn(clientHealthMonitorMock); InetSocketAddress inetSocketAddressStub = InetSocketAddress.createUnresolved("localhost", 9071); InetAddress inetAddressStub = mock(InetAddress.class); when(socketMock.getInetAddress()).thenReturn(InetAddress.getByName("localhost")); when(socketMock.getRemoteSocketAddress()).thenReturn(inetSocketAddressStub); when(socketMock.getInetAddress()).thenReturn(inetAddressStub); InternalCacheForClientAccess cache = mock(InternalCacheForClientAccess.class); when(cache.getCacheForProcessingClientRequests()).thenReturn(cache); CachedRegionHelper cachedRegionHelper = mock(CachedRegionHelper.class); when(cachedRegionHelper.getCache()).thenReturn(cache); return new ProtobufServerConnection(socketMock, cache, cachedRegionHelper, mock(CacheServerStats.class), 0, 1024, "", CommunicationMode.ProtobufClientServerProtocol.getModeNumber(), acceptorStub, clientProtocolProcessorMock, mock(SecurityService.class)); }
private ProtobufServerConnection getServerConnection(Socket socketMock, ClientProtocolProcessor clientProtocolProcessorMock, AcceptorImpl acceptorStub) throws IOException { ClientHealthMonitor clientHealthMonitorMock = mock(ClientHealthMonitor.class); when(acceptorStub.getClientHealthMonitor()).thenReturn(clientHealthMonitorMock); InetSocketAddress inetSocketAddressStub = InetSocketAddress.createUnresolved("localhost", 9071); InetAddress inetAddressStub = mock(InetAddress.class); when(socketMock.getInetAddress()).thenReturn(InetAddress.getByName("localhost")); when(socketMock.getRemoteSocketAddress()).thenReturn(inetSocketAddressStub); when(socketMock.getInetAddress()).thenReturn(inetAddressStub); InternalCacheForClientAccess cache = mock(InternalCacheForClientAccess.class); when(cache.getCacheForProcessingClientRequests()).thenReturn(cache); CachedRegionHelper cachedRegionHelper = mock(CachedRegionHelper.class); when(cachedRegionHelper.getCache()).thenReturn(cache); return new ProtobufServerConnection(socketMock, cache, cachedRegionHelper, mock(CacheServerStats.class), 0, 1024, "", CommunicationMode.ProtobufClientServerProtocol.getModeNumber(), acceptorStub, clientProtocolProcessorMock, mock(SecurityService.class)); }