/** * * Copyright © 2014 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Smack's API for XEP-0332: HTTP over XMPP transport. *

Discover HOXT support

*

* Description *

*

* Before using this extension you must ensure that your counterpart supports it also. *

*

* Usage *

*

* Once you have your ServiceDiscoveryManager you will be able to discover information * associated with an XMPP entity. To discover the information of a given XMPP entity send * discoverInfo(entityID) to your ServiceDiscoveryManager where entityID is * the ID of the entity. The message discoverInfo(entityID) will answer with an instance of * DiscoverInfo that contains the discovered information. *

*

* Examples *

*

* In this example we can see how to check if the counterpart supports HOXT: *

* *
 * // Obtain the ServiceDiscoveryManager associated with my XMPPConnection
 * ServiceDiscoveryManager discoManager = ServiceDiscoveryManager.getInstanceFor(connection);
 * // Get the information of a given XMPP entity, where entityID is a Jid
 * DiscoverInfo discoInfo = discoManager.discoverInfo(entityID);
 * // Check if room is HOXT is supported
 * boolean isSupported = discoInfo.containsFeature("urn:xmpp:http");
 * 
* *

IQ exchange

*

* Description *

*

* You can use IQ’s to perform HTTP requests and responses. This is applicable to relatively short requests and * responses (due to the limitation of XMPP message size). *

*

* Usage *

*

* First you need to register a StanzaListener to be able to handle intended IQs. *

*

* For the HTTP client you: *

* *

* For the HTTP server you: *

* *

* Examples *

*

* In this example we are an HTTP client, so we send a request (POST) and handle the response: *

* *
 * 
 * // create a request body
 * String urlEncodedMessage = "I_love_you";
 *
 * // prepare headers
 * List<Header> headers = new ArrayList<>();
 * headers.add(new Header("Host", "juliet.capulet.com"));
 * headers.add(new Header("Content-Type", "application/x-www-form-urlencoded"));
 * headers.add(new Header("Content-Length", Integer.toString(urlEncodedMessage.length())));
 *
 * // provide body or request (not mandatory, - empty body is used for GET)
 * AbstractHttpOverXmpp.Text child = new AbstractHttpOverXmpp.Text(urlEncodedMessage);
 * AbstractHttpOverXmpp.Data data = new AbstractHttpOverXmpp.Data(child);
 *
 * // create request
 * HttpOverXmppReq req = HttpOverXmppReq.buider()
 *                             .setMethod(HttpMethod.POST)
 *                             .setResource("/mailbox")
 *                             .setHeaders(headers)
 *                             .setVersion("1.1")
 *                             .setData(data)
 *                             .build();
 *
 * // add to, where jid is the Jid of the individual the packet is sent to
 * req.setTo(jid);
 *
 * // send it
 * connection.sendIqWithResponseCallback(req, new StanzaListener() {
 *    public void processStanza(Stanza iq) {
 *         HttpOverXmppResp resp = (HttpOverXmppResp) iq;
 *         // check HTTP response code
 *         if (resp.getStatusCode() == 200) {
 *             // get content of the response
 *             NamedElement child = resp.getData().getChild();
 *             // check which type of content of the response arrived
 *             if (child instanceof AbstractHttpOverXmpp.Xml) {
 *                 // print the message and anxiously read if from the console ;)
 *                 System.out.println(((AbstractHttpOverXmpp.Xml) child).getText());
 *             } else {
 *                 // process other AbstractHttpOverXmpp data child subtypes
 *             }
 *         }
 *     }
 * });
 * 
 * 
*/ package org.jivesoftware.smackx.hoxt;