@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); }
public InputStream createIncomingStream(StreamInitiation initiation) throws XMPPException { PacketFilter filter = getInitiationPacketFilter(initiation.getFrom(), initiation.getSessionID()); PacketCollector collector = connection.createPacketCollector(filter); StreamInitiation response = super.createInitiationAccept(initiation, getNamespaces()); connection.sendPacket(response); InputStream stream; try { Packet streamInitiation = collector.nextResult(SmackConfiguration.getPacketReplyTimeout()); if (streamInitiation == null) { throw new XMPPException("No response from remote client"); } StreamNegotiator negotiator = determineNegotiator(streamInitiation); stream = negotiator.negotiateIncomingStream(streamInitiation); } catch (XMPPException ex) { ex.printStackTrace(); Packet streamInitiation = collector.nextResult(SmackConfiguration.getPacketReplyTimeout()); collector.cancel(); if (streamInitiation == null) { throw new XMPPException("No response from remote client"); } StreamNegotiator negotiator = determineNegotiator(streamInitiation); stream = negotiator.negotiateIncomingStream(streamInitiation); } finally { collector.cancel(); } return stream; }