@Override public void messageReceived(final IoSession session, final Object message) { final StunMessage vsm = (StunMessage) message; vsm.accept(this.visitor); }
private UUID getTransactionKey(final StunMessage message) { return message.getTransactionId(); }
final int length = stunMessage.getTotalLength(); final ByteBuffer buf = ByteBuffer.allocate(length); stunMessage); final StunMessageType type = stunMessage.getType(); MinaUtils.putUnsignedShort(buf, type.toInt()); MinaUtils.putUnsignedShort(buf, stunMessage.getBodyLength()); final UUID transactionId = stunMessage.getTransactionId(); stunMessage.getAttributes();
public InetSocketAddress get(final StunMessage msg) { return m_transactionIdsToRemoteAddresses.get(msg.getTransactionId()); }
private T notifyTransaction(final StunMessage response) { final StunClientTransaction<T> ct = this.m_transactionTracker.getClientTransaction(response); m_log.debug("Accessed transaction: {}", ct); if (ct == null) { // This will happen fairly frequently with UDP because messages // are retransmitted in case any are lost. When responses are // received, the transaction ID is removed, so we won't recognize // the IDs of subsequent responses. m_log.debug("No matching transaction for response: {}", response); return null; } return response.accept(ct); }
private Object notifyWaiters(final StunMessage request, final StunMessage response) { synchronized (m_requestLock) { this.m_idsToResponses.put(request.getTransactionId(), response); m_requestLock.notifyAll(); } return null; }
public void encode(final IoSession session, final Object msg, final ProtocolEncoderOutput out) throws Exception { m_log.debug("Encoding TURN/STUN message: {}", msg); final StunMessage stunMessage = (StunMessage) msg; final TurnStunMessageMapper mapper = (TurnStunMessageMapper) session.getAttribute( "REMOTE_ADDRESS_MAP"); final StunMessageVisitor<ByteBuffer> visitor = new SendIndicationStunMessageVisitor(out, mapper); stunMessage.accept(visitor); }
private boolean isSameTransaction(final StunMessage response) { if (!this.m_request.getTransactionId().equals( response.getTransactionId())) { m_log.error("Unexpected transaction ID. Expected " + this.m_request.getTransactionId() + " but was " + response.getTransactionId()); return false; } else { setTransactionTime(); return true; } }
@Override public void messageReceived(final IoSession session, final Object message) { m_log.debug("Received message: {}", message); if (session.isClosing() || !session.isConnected()) { m_log.debug("Ignoring message on closing session..."); return; } final StunMessage stunMessage = (StunMessage) message; // The visitor will handle the particular message type, allowing for // variation between, for example, client and server visitor // implementations. final StunMessageVisitor visitor = this.m_visitorFactory .createVisitor(session); m_log.debug("Sending message to visitor: {}", visitor); stunMessage.accept(visitor); }
private Object notifyWaiters(final StunMessage request, final StunMessage response) { synchronized (request) { this.m_idsToResponses.put(request.getTransactionId(), response); request.notify(); } return null; }
try sm.accept(visitor);
protected void waitIfNoResponse(final StunMessage request, final long waitTime) { LOG.debug("Waiting " + waitTime + " milliseconds..."); if (waitTime == 0L) return; if (!m_idsToResponses.containsKey(request.getTransactionId())) { try { LOG.debug("Actually waiting..."); request.wait(waitTime); } catch (final InterruptedException e) { // This can happen if multiple STUN clients are started in // a thread pool, for example. LOG.info("Interrupt", e); } } }
final InetSocketAddress isa = message.accept(visitor); if (isa == null) { onFailure(m_stunServer);
public void mapMessage(final StunMessage message, final InetSocketAddress remoteAddress) { final UUID id = message.getTransactionId(); if (m_transactionIdsToRemoteAddresses.containsKey(id)) { m_log.debug("ID already in map for message: {}", message); final InetSocketAddress storedAddress = m_transactionIdsToRemoteAddresses.get(id); if (!remoteAddress.equals(storedAddress)) { m_log.error("Address mappings incorrect!!\n" + "Stored: {}\n" + "Received: {}", storedAddress, remoteAddress); } return; } m_transactionIdsToRemoteAddresses.put(id, remoteAddress); }
final IceCandidate newLocalCandidate = response.accept(visitor); if (newLocalCandidate == null)