private FileTransferNegotiator(final XMPPConnection connection) { super(connection); byteStreamTransferManager = new Socks5TransferNegotiator(connection); inbandTransferManager = new IBBTransferNegotiator(connection); setServiceEnabled(connection, true); }
@Override protected void setStatus(Status status) { Status oldStatus = getStatus(); super.setStatus(status); if (callback != null) { callback.statusUpdated(oldStatus, status); } }
@Override public InputStream createIncomingStream(final StreamInitiation initiation) throws SmackException, XMPPErrorException, InterruptedException { // This could be either an xep47 ibb 'open' iq or an xep65 streamhost iq IQ initiationSet = initiateIncomingStream(connection(), initiation); StreamNegotiator streamNegotiator = determineNegotiator(initiationSet); return streamNegotiator.negotiateIncomingStream(initiationSet); }
private OutputStream negotiateStream(String fileName, long fileSize, String description) throws SmackException, XMPPException, InterruptedException { // Negotiate the file transfer profile if (!updateStatus(Status.initial, Status.negotiating_transfer)) { throw new IllegalStateChangeException(); } StreamNegotiator streamNegotiator = negotiator.negotiateOutgoingTransfer( getPeer(), streamID, fileName, fileSize, description, RESPONSE_TIMEOUT); // Negotiate the stream if (!updateStatus(Status.negotiating_transfer, Status.negotiating_stream)) { throw new IllegalStateChangeException(); } outputStream = streamNegotiator.createOutgoingStream(streamID, initiator, getPeer()); if (!updateStatus(Status.negotiating_stream, Status.negotiated)) { throw new IllegalStateChangeException(); } return outputStream; }
/** * Returns the output stream connected to the peer to transfer the file. It * is only available after it has been successfully negotiated by the * {@link StreamNegotiator}. * * @return Returns the output stream connected to the peer to transfer the * file. */ protected OutputStream getOutputStream() { if (getStatus().equals(FileTransfer.Status.negotiated)) { return outputStream; } else { return null; } }
protected IncomingFileTransfer(FileTransferRequest request, FileTransferNegotiator transferNegotiator) { super(request.getRequestor(), request.getStreamID(), transferNegotiator); this.receiveRequest = request; }
@Override public InputStream call() throws Exception { return streamNegotiator .createIncomingStream(receiveRequest.getStreamInitiation()); } });
@Override public IQ handleIQRequest(IQ packet) { StreamInitiation si = (StreamInitiation) packet; final FileTransferRequest request = new FileTransferRequest(FileTransferManager.this, si); for (final FileTransferListener listener : listeners) { listener.fileTransferRequest(request); } return null; } });
@Override public void run() { try { OutgoingFileTransfer.this.outputStream = negotiateStream( fileName, fileSize, description); progress.outputStreamEstablished(OutgoingFileTransfer.this.outputStream); } catch (XMPPErrorException e) { handleXMPPException(e); } catch (Exception e) { setException(e); } } }, "File Transfer Negotiation " + streamID);
@Override protected void setException(Exception exception) { super.setException(exception); if (callback != null) { callback.errorEstablishingStream(exception); } }
@Override protected boolean updateStatus(Status oldStatus, Status newStatus) { boolean isUpdated = super.updateStatus(oldStatus, newStatus); if (callback != null && isUpdated) { callback.statusUpdated(oldStatus, newStatus); } return isUpdated; }
/** * Accepts this file transfer and creates the incoming file transfer. * * @return Returns the IncomingFileTransfer on which the * file transfer can be carried out. */ public IncomingFileTransfer accept() { return manager.createIncomingFileTransfer(this); }
@Override public OutputStream createOutgoingStream(String streamID, Jid initiator, Jid target) throws SmackException, XMPPException, InterruptedException { OutputStream stream; try { stream = primaryNegotiator.createOutgoingStream(streamID, initiator, target); } catch (Exception ex) { stream = secondaryNegotiator.createOutgoingStream(streamID, initiator, target); } return stream; }
/** * Rejects the file transfer request. * @throws NotConnectedException * @throws InterruptedException */ public void reject() throws NotConnectedException, InterruptedException { manager.rejectIncomingFileTransfer(this); }
@Override public void cancel() { setStatus(Status.cancelled); }
@Override public void cancel() { setStatus(Status.cancelled); }
@Override public String[] getNamespaces() { String[] primary = primaryNegotiator.getNamespaces(); String[] secondary = secondaryNegotiator.getNamespaces(); String[] namespaces = new String[primary.length + secondary.length]; System.arraycopy(primary, 0, namespaces, 0, primary.length); System.arraycopy(secondary, 0, namespaces, primary.length, secondary.length); return namespaces; }
public FileTransferIntegrationTest(SmackIntegrationTestEnvironment environment) { super(environment); ftManagerOne = FileTransferManager.getInstanceFor(conOne); ftManagerTwo = FileTransferManager.getInstanceFor(conTwo); }
@Override public void newStreamInitiation(Jid from, String streamID) { primaryNegotiator.newStreamInitiation(from, streamID); secondaryNegotiator.newStreamInitiation(from, streamID); }
public static synchronized FileTransferManager getInstanceFor(XMPPConnection connection) { FileTransferManager fileTransferManager = INSTANCES.get(connection); if (fileTransferManager == null) { fileTransferManager = new FileTransferManager(connection); INSTANCES.put(connection, fileTransferManager); } return fileTransferManager; }