/** * See SendMessageOptions for option details. * * Always uses sendNoEffort for now. * * @param proto 1-254 or 0 for unset; recommended: * I2PSession.PROTO_UNSPECIFIED * I2PSession.PROTO_STREAMING * I2PSession.PROTO_DATAGRAM * 255 disallowed * @param fromPort 1-65535 or 0 for unset * @param toPort 1-65535 or 0 for unset * @param options to be passed to the router * @since 0.9.2 */ @Override public boolean sendMessage(Destination dest, byte[] payload, int offset, int size, int proto, int fromPort, int toPort, SendMessageOptions options) throws I2PSessionException { payload = prepPayload(payload, offset, size, proto, fromPort, toPort, options.getGzip()); //if (_noEffort) { sendNoEffort(dest, payload, options); return true; //} else { // unimplemented //return sendBestEffort(dest, payload, options); //} }
/** * Send a message and request an asynchronous notification of delivery status. * * See I2PSessionMuxedImpl for proto/port details. * See SendMessageOptions for option details. * * @return the message ID to be used for later notification to the listener * @throws I2PSessionException on all errors * @since 0.9.14 */ @Override public long sendMessage(Destination dest, byte[] payload, int offset, int size, int proto, int fromPort, int toPort, SendMessageOptions options, SendMessageStatusListener listener) throws I2PSessionException { payload = prepPayload(payload, offset, size, proto, fromPort, toPort, options.getGzip()); long nonce = _sendMessageNonce.incrementAndGet(); long expires = Math.max(_context.clock().now() + 60*1000L, options.getTime()); MessageState state = new MessageState(_context, nonce, this, expires, listener); _sendingStates.put(Long.valueOf(nonce), state); _producer.sendMessage(this, dest, nonce, payload, options); return nonce; }