mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-11-25 15:52:06 +01:00
commit
bcf6d3ecef
1 changed files with 29 additions and 25 deletions
|
@ -3,7 +3,7 @@ HTTP over XMPP transport
|
||||||
|
|
||||||
[Back](index.md)
|
[Back](index.md)
|
||||||
|
|
||||||
Allows to transport HTTP communication over XMPP peer-to-peer networks.
|
Allows the transport of HTTP communication over XMPP peer-to-peer networks.
|
||||||
|
|
||||||
* Discover HOXT support
|
* Discover HOXT support
|
||||||
* IQ exchange
|
* IQ exchange
|
||||||
|
@ -23,7 +23,7 @@ Once you have your _**ServiceDiscoveryManager**_ you will be able to discover
|
||||||
information associated with an XMPP entity. To discover the information of a
|
information associated with an XMPP entity. To discover the information of a
|
||||||
given XMPP entity send **discoverInfo(entityID)** to your
|
given XMPP entity send **discoverInfo(entityID)** to your
|
||||||
_**ServiceDiscoveryManager**_ where entityID is the ID of the entity. The
|
_**ServiceDiscoveryManager**_ where entityID is the ID of the entity. The
|
||||||
message **discoverInfo(entityID)** will answer an instance of
|
message **discoverInfo(entityID)** will answer with an instance of
|
||||||
_**DiscoverInfo**_ that contains the discovered information.
|
_**DiscoverInfo**_ that contains the discovered information.
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
@ -33,10 +33,10 @@ In this example we can see how to check if the counterpart supports HOXT:
|
||||||
```
|
```
|
||||||
// Obtain the ServiceDiscoveryManager associated with my XMPPConnection
|
// Obtain the ServiceDiscoveryManager associated with my XMPPConnection
|
||||||
ServiceDiscoveryManager discoManager = ServiceDiscoveryManager.getInstanceFor(connection);
|
ServiceDiscoveryManager discoManager = ServiceDiscoveryManager.getInstanceFor(connection);
|
||||||
// Get the information of a given XMPP entity
|
// Get the information of a given XMPP entity, where entityID is a Jid
|
||||||
DiscoverInfo discoInfo = discoManager.discoverInfo("juliet@capulet.com");
|
DiscoverInfo discoInfo = discoManager.discoverInfo(entityID);
|
||||||
// Check if room is HOXT is supported
|
// Check if room is HOXT is supported
|
||||||
discoInfo.containsFeature("urn:xmpp:http");
|
boolean isSupported = discoInfo.containsFeature("urn:xmpp:http");
|
||||||
```
|
```
|
||||||
IQ exchange
|
IQ exchange
|
||||||
-----------
|
-----------
|
||||||
|
@ -44,53 +44,57 @@ IQ exchange
|
||||||
**Description**
|
**Description**
|
||||||
|
|
||||||
You can use IQ's to perform HTTP requests and responses. This is applicable to
|
You can use IQ's to perform HTTP requests and responses. This is applicable to
|
||||||
relatively short requests and responses (due to limitation of XMPP message
|
relatively short requests and responses (due to the limitation of XMPP message
|
||||||
size).
|
size).
|
||||||
|
|
||||||
**Usage**
|
**Usage**
|
||||||
|
|
||||||
First you need to register a _**PacketListener**_ to be able to handle
|
First you need to register a _**StanzaListener**_ to be able to handle
|
||||||
intended IQs.
|
intended IQs.
|
||||||
|
|
||||||
For the HTTP client you:
|
For the HTTP client you:
|
||||||
|
|
||||||
* You create and send _**HttpOverXmppReq**_ request.
|
* You create and send _**HttpOverXmppReq**_ request.
|
||||||
* Then you handle the _**HttpOverXmppResp**_ response in your _**PacketListener**_.
|
* Then you handle the _**HttpOverXmppResp**_ response in your _**StanzaListener**_.
|
||||||
|
|
||||||
For the HTTP server you:
|
For the HTTP server you:
|
||||||
|
|
||||||
* You handle the _**HttpOverXmppReq**_ requests in your _**PacketListener**_.
|
* You handle the _**HttpOverXmppReq**_ requests in your _**StanzaListener**_.
|
||||||
* And create and send _**HttpOverXmppResp**_ responses.
|
* And create and send _**HttpOverXmppResp**_ responses.
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
In this example we are HTTP client, so we send request (POST) and handle the
|
In this example we are an HTTP client, so we send a request (POST) and handle the
|
||||||
response:
|
response:
|
||||||
|
|
||||||
```
|
```
|
||||||
// create a request body
|
// create a request body
|
||||||
String urlEncodedMessage = "I_love_you";
|
String urlEncodedMessage = "I_love_you";
|
||||||
|
|
||||||
// create request
|
|
||||||
HttpOverXmppReq req = new HttpOverXmppReq(HttpMethod.POST, "/mailbox");
|
|
||||||
req.setVersion("1.1");
|
|
||||||
|
|
||||||
// prepare headers
|
// prepare headers
|
||||||
List<Header> list = new ArrayList<Header>();
|
List<Header> headers = new ArrayList<>();
|
||||||
list.add(new Header("Host", "juliet.capulet.com"));
|
headers.add(new Header("Host", "juliet.capulet.com"));
|
||||||
list.add(new Header("Content-Type", "application/x-www-form- urlencoded"));
|
headers.add(new Header("Content-Type", "application/x-www-form-urlencoded"));
|
||||||
list.add(new Header("Content-Length", Integer.toString(urlEncodedMessage.length())));
|
headers.add(new Header("Content-Length", Integer.toString(urlEncodedMessage.length())));
|
||||||
req.setHeaders(new HeadersExtension(list));
|
|
||||||
|
|
||||||
// provide body or request (not mandatory, - empty body is used for GET)
|
// provide body or request (not mandatory, - empty body is used for GET)
|
||||||
AbstractHttpOverXmpp.Text child = new AbstractHttpOverXmpp.Text(urlEncodedMessage);
|
AbstractHttpOverXmpp.Text child = new AbstractHttpOverXmpp.Text(urlEncodedMessage);
|
||||||
AbstractHttpOverXmpp.Data data = new AbstractHttpOverXmpp.Data(child);
|
AbstractHttpOverXmpp.Data data = new AbstractHttpOverXmpp.Data(child);
|
||||||
req.setData(data);
|
|
||||||
|
|
||||||
// add to
|
// create request
|
||||||
req.setTo("juliet@capulet.com/balcony");
|
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
|
// send it
|
||||||
connection.sendIqWithResponseCallback(req, new PacketListener() {
|
connection.sendIqWithResponseCallback(req, new StanzaListener() {
|
||||||
public void processStanza(Stanza iq) {
|
public void processStanza(Stanza iq) {
|
||||||
HttpOverXmppResp resp = (HttpOverXmppResp) iq;
|
HttpOverXmppResp resp = (HttpOverXmppResp) iq;
|
||||||
// check HTTP response code
|
// check HTTP response code
|
||||||
|
@ -99,10 +103,10 @@ connection.sendIqWithResponseCallback(req, new PacketListener() {
|
||||||
NamedElement child = resp.getData().getChild();
|
NamedElement child = resp.getData().getChild();
|
||||||
// check which type of content of the response arrived
|
// check which type of content of the response arrived
|
||||||
if (child instanceof AbstractHttpOverXmpp.Xml) {
|
if (child instanceof AbstractHttpOverXmpp.Xml) {
|
||||||
// print the message and anxiously read if from console ;)
|
// print the message and anxiously read if from the console ;)
|
||||||
System.out.println(((AbstractHttpOverXmpp.Xml) child).getText());
|
System.out.println(((AbstractHttpOverXmpp.Xml) child).getText());
|
||||||
} else {
|
} else {
|
||||||
// process other AbstractHttpOverXmpp.DataChild subtypes
|
// process other AbstractHttpOverXmpp data child subtypes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue