/** {@inheritDoc} */ @Override public byte[] decode(GridNioSession ses, ByteBuffer buf) throws IOException, IgniteCheckedException { GridNioServerBuffer nioBuf = ses.meta(BUF_META_KEY); // Decode for a given session is called per one thread, so there should not be any concurrency issues. // However, we make some additional checks. if (nioBuf == null) { nioBuf = new GridNioServerBuffer(); GridNioServerBuffer old = ses.addMeta(BUF_META_KEY, nioBuf); assert old == null; } return nioBuf.read(buf); }
/** * Appends parameter of this filter to a meta with specified name. * * @param ses Session. * @param metaKey Meta key. */ private void chainMeta(GridNioSession ses, int metaKey) { String att = ses.meta(metaKey); att = (att == null ? "" : att) + param; ses.addMeta(metaKey, att); } }
/** {@inheritDoc} */ @Override public byte[] decode(GridNioSession ses, ByteBuffer buf) throws IOException, IgniteCheckedException { GridNioDelimitedBuffer nioBuf = ses.meta(BUF_META_KEY); // Decode for a given session is called per one thread, so there should not be any concurrency issues. // However, we make some additional checks. if (nioBuf == null) { nioBuf = new GridNioDelimitedBuffer(delim); GridNioDelimitedBuffer old = ses.addMeta(BUF_META_KEY, nioBuf); assert old == null; } return nioBuf.read(buf); }
/** {@inheritDoc} */ @Override public byte[] decode(GridNioSession ses, ByteBuffer buf) throws IOException, IgniteCheckedException { ClientListenerNioServerBuffer nioBuf = ses.meta(BUF_META_KEY); // Decode for a given session is called per one thread, so there should not be any concurrency issues. // However, we make some additional checks. if (nioBuf == null) { nioBuf = new ClientListenerNioServerBuffer(); ClientListenerNioServerBuffer old = ses.addMeta(BUF_META_KEY, nioBuf); assert old == null; } boolean checkHandshake = ses.meta(ClientListenerNioListener.CONN_CTX_HANDSHAKE_PASSED) == null; return nioBuf.read(buf, checkHandshake); }
ses.addMeta(PARSER_STATE.ordinal(), state);
ses.addMeta(SSL_META.ordinal(), sslMeta);
ses.addMeta(MARSHALLER.ordinal(), marsh);
ses.addMeta(HANDSHAKE_FINISH_META, fin);
/** * Tests correct parsing of client handshake packets. * * @throws Exception If failed. */ @Test public void testParseClientHandshake() throws Exception { for (int splitPos = 1; splitPos < 5; splitPos++) { log.info("Checking split position: " + splitPos); ByteBuffer tmp = clientHandshakePacket(); ByteBuffer[] split = split(tmp, splitPos); GridNioSession ses = new MockNioSession(); ses.addMeta(MARSHALLER.ordinal(), new GridClientOptimizedMarshaller()); GridTcpRestParser parser = new GridTcpRestParser(false); Collection<GridClientMessage> lst = new ArrayList<>(1); for (ByteBuffer buf : split) { GridClientMessage r; while (buf.hasRemaining() && (r = parser.decode(ses, buf)) != null) lst.add(r); assertTrue("Parser has left unparsed bytes.", buf.remaining() == 0); } assertEquals(1, lst.size()); GridClientHandshakeRequest req = (GridClientHandshakeRequest)F.first(lst); assertNotNull(req); assertEquals(U.bytesToShort(new byte[]{5, 0}, 0), req.version()); } }
ses.addMeta(MARSHALLER.ordinal(), new GridClientOptimizedMarshaller());
ses.addMeta(LAST_FUT.ordinal(), f);
ses.addMeta(GridRedisNioListener.CONN_CTX_META_KEY, cacheName);
/** * @throws Exception If failed. */ @Test public void testCustomMessages() throws Exception { GridClientCacheRequest req = new GridClientCacheRequest(CAS); req.key("key"); req.value(1); req.value2(2); req.clientId(UUID.randomUUID()); ByteBuffer raw = clientRequestPacket(req); GridNioSession ses = new MockNioSession(); ses.addMeta(MARSHALLER.ordinal(), new GridClientOptimizedMarshaller()); GridTcpRestParser parser = new GridTcpRestParser(false); GridClientMessage msg = parser.decode(ses, raw); assertNotNull(msg); assertEquals("Parser leaved unparsed bytes", 0, raw.remaining()); assertTrue(msg instanceof GridClientCacheRequest); GridClientCacheRequest res = (GridClientCacheRequest) msg; assertEquals("Invalid operation", req.operation(), res.operation()); assertEquals("Invalid clientId", req.clientId(), res.clientId()); assertEquals("Invalid key", req.key(), res.key()); assertEquals("Invalid value 1", req.value(), res.value()); assertEquals("Invalid value 2", req.value2(), res.value2()); }