void onReceiveFromRemote(final MuxClientRemote remote, final MuxPacket msg) { // Remote is MUX
			if (msg.syn()) { // New SubChannel
				Log.info(this.getClass().getSimpleName() + "::onReceiveFromRemote " + msg);
				openLocal(msg.getIdChannel(), msg.getIdEndPoint(), msg.getSourceAddress());
			} else if (msg.fin()) { // End SubChannel
				Log.info(this.getClass().getSimpleName() + "::onReceiveFromRemote " + msg);
				final MuxClientLocal local = getLocal(msg.getIdChannel());
				if (local != null)
					local.setShutdown();
			} else if (msg.ack()) { // Flow-Control ACK
				Log.debug(this.getClass().getSimpleName() + "::onReceiveFromRemote " + msg);
				final MuxClientLocal local = getLocal(msg.getIdChannel());
				if (local != null)
					local.unlock(msg.ackSize());
			} else if (msg.nop()) { // NOP
				Log.info(this.getClass().getSimpleName() + "::onReceiveFromRemote " + msg);
			} else { // Data
				Log.debug(this.getClass().getSimpleName() + "::onReceiveFromRemote " + msg);
				try {
					final MuxClientLocal local = getLocal(msg.getIdChannel());
					if (local == null)
						return;
					final RawPacket raw = context.allocateRawPacket();
					raw.put(msg.getIdChannel(), msg.getBufferLen(), msg.getBuffer());
					local.sendQueueLocal(raw);
				} catch (Exception e) {
					Log.error(this.getClass().getSimpleName() + "::onReceiveFromRemote " + e.toString(), e);
				}
			}
		}