/** * When the file transfer request is acceptable, this method should be * invoked. It will create an IncomingFileTransfer which allows the * transmission of the file to proceed. * * @param request * The remote request that is being accepted. * @return The IncomingFileTransfer which manages the download of the file * from the transfer initiator. */ protected IncomingFileTransfer createIncomingFileTransfer( FileTransferRequest request) { if (request == null) { throw new NullPointerException("ReceiveRequest cannot be null"); } IncomingFileTransfer transfer = new IncomingFileTransfer(request, fileTransferNegotiator); transfer.setFileInfo(request.getFileName(), request.getFileSize()); return transfer; }
protected IncomingFileTransfer(FileTransferRequest request, FileTransferNegotiator transferNegotiator) { super(request.getRequestor(), request.getStreamID(), transferNegotiator); this.receiveRequest = request; }
@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; } });
public void acceptFileTransfer(final FileTransferRequest request) { String fileName = request.getFileName(); long fileSize = request.getFileSize(); Jid requestor = request.getRequestor(); BareJid bareJID = requestor.asBareJid();
@Override public InputStream call() throws Exception { return streamNegotiator .createIncomingStream(receiveRequest.getStreamInitiation()); } });
private void acceptRequest(final FileTransferRequest request) { Jid requestor = request.getRequestor(); BareJid bareJID = requestor.asBareJid(); add(cancelButton, new GridBagConstraints(1, 4, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 5, 5), 0, 0)); cancelButton.setVisible(true); transfer = request.accept(); final File downloadedFile = new File(Downloads.getDownloadDirectory(), request.getFileName());
BareJid bareJID = request.getRequestor().asBareJid(); fileLabel.setText(request.getFileName()); final File downloadedFile = new File(Downloads.getDownloadDirectory(), request.getFileName()); openFileButton.addMouseListener(new MouseAdapter() { public void mouseEntered(MouseEvent e) {
@Override public void fileTransferRequest(FileTransferRequest request) { byte[] dataReceived; IncomingFileTransfer ift = request.accept(); try { InputStream is = ift.receiveFile(); ByteArrayOutputStream os = new ByteArrayOutputStream(); int nRead; byte[] buf = new byte[1024]; while ((nRead = is.read(buf, 0, buf.length)) != -1) { os.write(buf, 0, nRead); } os.flush(); dataReceived = os.toByteArray(); if (Arrays.equals(dataToSend, dataReceived)) { resultSyncPoint.signal("Received data matches send data. \\o/"); } else { resultSyncPoint.signal(new Exception("Received data does not match")); } } catch (SmackException | IOException | XMPPErrorException | InterruptedException e) { resultSyncPoint.signal(e); } } };
@Override public void run() { if (transfer.getAmountWritten() >= request.getFileSize() || transfer.getStatus() == FileTransfer.Status.error || transfer.getStatus() == FileTransfer.Status.refused || transfer.getStatus() == FileTransfer.Status.cancelled || transfer.getStatus() == FileTransfer.Status.complete) { this.cancel(); timer.cancel(); _endtime = System.currentTimeMillis(); updateonFinished(request, downloadedFile); }else { // 100 % = Filesize // x % = Currentsize long p = (transfer.getAmountWritten() * 100 / transfer.getFileSize() ); progressBar.setValue(Math.round(p)); } } };
public void mousePressed(MouseEvent e) { launchFile(Downloads.getDownloadDirectory()+File.separator+request.getFileName()); } });
/** * Reject an incoming file transfer. * <p> * Specified in XEP-95 4.2 and 3.2 Example 8 * </p> * @param request * @throws NotConnectedException * @throws InterruptedException */ protected void rejectIncomingFileTransfer(FileTransferRequest request) throws NotConnectedException, InterruptedException { StreamInitiation initiation = request.getStreamInitiation(); // Reject as specified in XEP-95 4.2. Note that this is not to be confused with the Socks 5 // Bytestream rejection as specified in XEP-65 5.3.1 Example 13, which says that // 'not-acceptable' should be returned. This is done by Smack in // Socks5BytestreamManager.replyRejectPacket(IQ). IQ rejection = IQ.createErrorResponse(initiation, StanzaError.getBuilder( StanzaError.Condition.forbidden)); connection().sendStanza(rejection); } }
private void handleTransferRequest(FileTransferRequest request, ContactList contactList) { // Check if a listener handled this request if (fireTransferListeners(request)) { return; } Jid requestor = request.getRequestor(); EntityBareJid bareJID = requestor.asEntityBareJidOrThrow(); String fileName = request.getFileName(); ContactItem contactItem = contactList.getContactItemByJID(bareJID); ChatRoom chatRoom; if (contactItem != null) { chatRoom = SparkManager.getChatManager().createChatRoom(bareJID, contactItem.getDisplayName(), contactItem.getDisplayName()); } else { chatRoom = SparkManager.getChatManager().createChatRoom(bareJID, bareJID, bareJID); } TranscriptWindow transcriptWindow = chatRoom.getTranscriptWindow(); transcriptWindow.insertCustomText(Res.getString("message.file.transfer.chat.window"), true, false, Color.BLACK); final ReceiveFileTransfer receivingMessageUI = new ReceiveFileTransfer(); receivingMessageUI.acceptFileTransfer(request); chatRoom.addClosingListener( () -> receivingMessageUI.cancelTransfer() ); transcriptWindow.addComponent(receivingMessageUI); chatRoom.increaseUnreadMessageCount(); chatRoom.scrollToBottom(); String fileTransMsg = contactItem.getDisplayName() + " " + Res.getString("message.file.transfer.short.message") + " " + fileName; SparkManager.getChatManager().getChatContainer().fireNotifyOnMessage(chatRoom, true, fileTransMsg, Res.getString("message.file.transfer.notification")); }
@Override public void fileTransferRequest(final FileTransferRequest request) { Boolean result = false; IncomingFileTransfer ift = request.accept();
@Override public void run() { if (transfer.getAmountWritten() >= request.getFileSize() || transfer.getStatus() == FileTransfer.Status.error || transfer.getStatus() == FileTransfer.Status.refused
/** * When the file transfer request is acceptable, this method should be * invoked. It will create an IncomingFileTransfer which allows the * transmission of the file to procede. * * @param request * The remote request that is being accepted. * @return The IncomingFileTransfer which manages the download of the file * from the transfer initiator. */ protected IncomingFileTransfer createIncomingFileTransfer( FileTransferRequest request) { if (request == null) { throw new NullPointerException("RecieveRequest cannot be null"); } IncomingFileTransfer transfer = new IncomingFileTransfer(request, fileTransferNegotiator); transfer.setFileInfo(request.getFileName(), request.getFileSize()); return transfer; }
protected IncomingFileTransfer(FileTransferRequest request, FileTransferNegotiator transferNegotiator) { super(request.getRequestor(), request.getStreamID(), transferNegotiator); this.recieveRequest = request; }
StreamInitiation si = request.getStreamInitiation(); FormField streamMethodField = getStreamMethodField(si .getFeatureNegotiationForm());
@Override public void fileTransferRequest(FileTransferRequest request) { final IncomingFileTransfer transfer = request.accept(); Thread transferThread = new Thread(new Runnable() { public void run() { try { OutputStream os = new NullOutputStream(); InputStream is = transfer.recieveFile(); log.debug("Reading from stream: " + is.available()); IOUtils.copy(is, os); log.debug("Left in stream: " + is.available()); } catch (Exception e) { log.error("Failed incoming file transfer", e); } } }); transferThread.start(); }
protected void fireNewRequest(StreamInitiation initiation) { FileTransferListener[] listeners = null; synchronized (this.listeners) { listeners = new FileTransferListener[this.listeners.size()]; this.listeners.toArray(listeners); } FileTransferRequest request = new FileTransferRequest(this, initiation); for (int i = 0; i < listeners.length; i++) { listeners[i].fileTransferRequest(request); } }
private void updateonFinished(final FileTransferRequest request, final File downloadedFile) { if (transfer.getAmountWritten() >= request.getFileSize()) { transferDone(request, transfer); transfer.getAmountWritten() < request.getFileSize()) { transferMessage = Res.getString("message.transfer.cancelled"); else if(transfer.getAmountWritten() >= request.getFileSize())