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)