public void send(final Plaintext plaintext) { if (plaintext.getAckMessage() != null) { long expires = UnixTime.now(+plaintext.getTTL()); LOG.info("Expires at " + expires); proofOfWorkService.doProofOfWorkWithAck(plaintext, expires); } else { send(plaintext.getFrom(), plaintext.getTo(), new Msg(plaintext), plaintext.getTTL()); } }
private void update(Connection connection, Plaintext message) throws SQLException, IOException { try (PreparedStatement ps = connection.prepareStatement( "UPDATE Message SET iv=?, type=?, sender=?, recipient=?, data=?, ack_data=?, sent=?, received=?, " + "status=?, initial_hash=?, ttl=?, retries=?, next_try=? " + "WHERE id=?")) { ps.setBytes(1, message.getInventoryVector() == null ? null : message.getInventoryVector().getHash()); ps.setString(2, message.getType().name()); ps.setString(3, message.getFrom().getAddress()); ps.setString(4, message.getTo() == null ? null : message.getTo().getAddress()); writeBlob(ps, 5, message); ps.setBytes(6, message.getAckData()); ps.setLong(7, message.getSent()); ps.setLong(8, message.getReceived()); ps.setString(9, message.getStatus() == null ? null : message.getStatus().name()); ps.setBytes(10, message.getInitialHash()); ps.setLong(11, message.getTTL()); ps.setInt(12, message.getRetries()); ps.setObject(13, message.getNextTry()); ps.setLong(14, (Long) message.getId()); ps.executeUpdate(); } }
private void insert(Connection connection, Plaintext message) throws SQLException, IOException { try (PreparedStatement ps = connection.prepareStatement( "INSERT INTO Message (iv, type, sender, recipient, data, ack_data, sent, received, " + "status, initial_hash, ttl, retries, next_try) " + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS) ) { ps.setBytes(1, message.getInventoryVector() == null ? null : message.getInventoryVector().getHash()); ps.setString(2, message.getType().name()); ps.setString(3, message.getFrom().getAddress()); ps.setString(4, message.getTo() == null ? null : message.getTo().getAddress()); writeBlob(ps, 5, message); ps.setBytes(6, message.getAckData()); ps.setLong(7, message.getSent()); ps.setLong(8, message.getReceived()); ps.setString(9, message.getStatus() == null ? null : message.getStatus().name()); ps.setBytes(10, message.getInitialHash()); ps.setLong(11, message.getTTL()); ps.setInt(12, message.getRetries()); ps.setObject(13, message.getNextTry()); ps.executeUpdate(); // get generated id try (ResultSet rs = ps.getGeneratedKeys()) { rs.next(); message.setId(rs.getLong(1)); } } }
public static ObjectMessage createAck(Plaintext plaintext) { if (plaintext == null || plaintext.getAckData() == null) return null; GenericPayload ack = new GenericPayload(3, plaintext.getFrom().getStream(), plaintext.getAckData()); return new ObjectMessage.Builder().objectType(MSG).payload(ack).expiresTime(UnixTime.now(plaintext.getTTL())).build(); } }
public void send(final Plaintext msg) { if (msg.getFrom() == null || msg.getFrom().getPrivateKey() == null) { throw new IllegalArgumentException("'From' must be an identity, i.e. have a private key."); } labeler().markAsSending(msg); BitmessageAddress to = msg.getTo(); if (to != null) { if (to.getPubkey() == null) { LOG.info("Public key is missing from recipient. Requesting."); ctx.requestPubkey(to); } if (to.getPubkey() == null) { ctx.getMessageRepository().save(msg); } } if (to == null || to.getPubkey() != null) { LOG.info("Sending message."); ctx.getMessageRepository().save(msg); if (msg.getType() == MSG) { ctx.send(msg); } else { ctx.send( msg.getFrom(), to, Factory.getBroadcast(msg), msg.getTTL() ); } } }