public DataStructure createDataStructure() throws DataFormatException { MessageStatusMessage msg = new MessageStatusMessage(); msg.setSessionId(42); msg.setMessageId(41); msg.setSize(1024*1024*42L); msg.setStatus(MessageStatusMessage.STATUS_AVAILABLE); msg.setNonce(1); return msg; } public DataStructure createStructureToRead() { return new MessageStatusMessage(); }
@Override public String toString() { StringBuilder buf = new StringBuilder(); buf.append("[MessageStatusMessage: "); buf.append("\n\tSessionId: ").append(_sessionId); buf.append("\n\tNonce: ").append(_nonce); buf.append("\n\tMessageId: ").append(_messageId); buf.append("\n\tStatus: ").append(getStatusString(_status)); buf.append("\n\tSize: ").append(_size); buf.append("]"); return buf.toString(); } }
MessageStatusMessage msg = new MessageStatusMessage(); msg.setMessageId(_messageId.getMessageId()); msg.setSessionId(_sessId.getSessionId()); msg.setNonce(_messageNonce); msg.setSize(0); msg.setStatus(_status); + MessageStatusMessage.getStatusString(msg.getStatus()) + " for " + _sessId); } else { if (_log.shouldLog(Log.WARN)) _log.warn("Almost send an update for message " + _messageId + " to " + MessageStatusMessage.getStatusString(msg.getStatus()) + " for " + _sessId + " before they knew the messageId! delaying .5s"); if (_log.shouldLog(Log.DEBUG)) _log.info("Updating message status for message " + _messageId + " to " + MessageStatusMessage.getStatusString(msg.getStatus()) + " for " + _sessId + " (with nonce=2), retrying after " if (_log.shouldLog(Log.DEBUG)) _log.debug("Updating message status for message " + _messageId + " to " + MessageStatusMessage.getStatusString(msg.getStatus()) + " for " + _sessId + " (with nonce=2)");
_log.debug("Handle message " + message); MessageStatusMessage msg = (MessageStatusMessage) message; int status = msg.getStatus(); long id = msg.getMessageId(); switch (status) { case MessageStatusMessage.STATUS_AVAILABLE: ReceiveMessageBeginMessage m = new ReceiveMessageBeginMessage(); m.setMessageId(id); m.setSessionId(msg.getSessionId()); try { session.sendMessage(m); session.receiveStatus((int)id, msg.getNonce(), status); if (msg.isSuccessful()) { if (_log.shouldLog(Log.DEBUG)) _log.debug("Message delivery succeeded for message " + id); session.receiveStatus((int)id, msg.getNonce(), status); return;
public DataStructure createStructureToRead() { return new MessageStatusMessage(); } }
return new DisconnectMessage(); case MessageStatusMessage.MESSAGE_TYPE: return new MessageStatusMessage(); case MessagePayloadMessage.MESSAGE_TYPE: return new MessagePayloadMessage();
/** * Deliver notification to the client that the given message is available. */ private void messageAvailable(MessageId id, long size) throws I2CPMessageException { //if (_log.shouldLog(Log.DEBUG)) // _log.debug("Sending message available: " + id + " to sessionId " + _runner.getSessionId() // + " (with nonce=1)", new Exception("available")); MessageStatusMessage msg = new MessageStatusMessage(); msg.setMessageId(id.getMessageId()); SessionId sid = _runner.getSessionId(_toDest.calculateHash()); if (sid == null) { if (_log.shouldLog(Log.WARN)) _log.warn("No session for " + _toDest.calculateHash()); return; } msg.setSessionId(sid.getSessionId()); msg.setSize(size); // has to be >= 0, it is initialized to -1 msg.setNonce(1); msg.setStatus(MessageStatusMessage.STATUS_AVAILABLE); _runner.doSend(msg); }
/** * Send a notification to the client that their message (id specified) was accepted * for delivery (but not necessarily delivered) * Doesn't do anything if i2cp.messageReliability = "none" * or if the nonce is 0. * * @param id OUR id for the message * @param nonce HIS id for the message */ void ackSendMessage(SessionId sid, MessageId id, long nonce) { if (_dontSendMSM || nonce == 0) return; if (_log.shouldLog(Log.DEBUG)) _log.debug("Acking message send [accepted]" + id + " / " + nonce + " for sessionId " + sid); MessageStatusMessage status = new MessageStatusMessage(); status.setMessageId(id.getMessageId()); status.setSessionId(sid.getSessionId()); status.setSize(0L); status.setNonce(nonce); status.setStatus(MessageStatusMessage.STATUS_SEND_ACCEPTED); try { doSend(status); _acceptedPending.remove(id); } catch (I2CPMessageException ime) { if (_log.shouldLog(Log.WARN)) _log.warn("Error writing out the message status message", ime); } }
/** * No job queue, so super NPEs */ @Override void updateMessageDeliveryStatus(Destination dest, MessageId id, long messageNonce, int status) { if (messageNonce <= 0) return; MessageStatusMessage msg = new MessageStatusMessage(); msg.setMessageId(id.getMessageId()); msg.setSessionId(getSessionId(dest.calculateHash()).getSessionId()); // has to be >= 0, it is initialized to -1 msg.setNonce(messageNonce); msg.setSize(0); msg.setStatus(status); try { doSend(msg); } catch (I2CPMessageException ime) { _log.warn("Error updating the status for " + id, ime); } }
MessageStatusMessage status = new MessageStatusMessage(); status.setMessageId(_runner.getNextMessageId()); status.setSessionId(sid.getSessionId()); status.setSize(0); status.setNonce(message.getNonce()); status.setStatus(MessageStatusMessage.STATUS_SEND_FAILURE_BAD_SESSION); try { _runner.doSend(status);