1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/** 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * you may not use this file except in compliance with the License. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * You may obtain a copy of the License at 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * http://www.apache.org/licenses/LICENSE-2.0 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Unless required by applicable law or agreed to in writing, software 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS, 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * See the License for the specific language governing permissions and 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * limitations under the License. 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccipackage org.jivesoftware.smackx.pubsub.packet; 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import org.jivesoftware.smack.PacketCollector; 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import org.jivesoftware.smack.SmackConfiguration; 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import org.jivesoftware.smack.Connection; 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import org.jivesoftware.smack.XMPPException; 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import org.jivesoftware.smack.filter.PacketFilter; 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import org.jivesoftware.smack.filter.PacketIDFilter; 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import org.jivesoftware.smack.packet.Packet; 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Utility class for doing synchronous calls to the server. Provides several 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * methods for sending a packet to the server and waiting for the reply. 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @author Robin Collier 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)final public class SyncPacketSend 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private SyncPacketSend() 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { } 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static public Packet getReply(Connection connection, Packet packet, long timeout) 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) throws XMPPException 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PacketFilter responseFilter = new PacketIDFilter(packet.getPacketID()); 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PacketCollector response = connection.createPacketCollector(responseFilter); 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci connection.sendPacket(packet); 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Wait up to a certain number of seconds for a reply. 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Packet result = response.nextResult(timeout); 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Stop queuing results 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) response.cancel(); 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (result == null) { 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) throw new XMPPException("No response from server."); 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) else if (result.getError() != null) { 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) throw new XMPPException(result.getError()); 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return result; 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static public Packet getReply(Connection connection, Packet packet) 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) throws XMPPException 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return getReply(connection, packet, SmackConfiguration.getPacketReplyTimeout()); 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)