mirror of https://github.com/apache/activemq.git
Applied patch for https://issues.apache.org/activemq/browse/AMQ-2412
git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@912310 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
baf9301a52
commit
746253c8ef
|
@ -22,7 +22,10 @@ import java.io.StringWriter;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.Callable;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.concurrent.FutureTask;
|
||||||
|
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import javax.jms.JMSException;
|
import javax.jms.JMSException;
|
||||||
|
@ -96,7 +99,7 @@ public class ProtocolConverter {
|
||||||
private final LongSequenceGenerator messageIdGenerator = new LongSequenceGenerator();
|
private final LongSequenceGenerator messageIdGenerator = new LongSequenceGenerator();
|
||||||
private final IntSequenceGenerator tempDestinationIdGenerator = new IntSequenceGenerator();
|
private final IntSequenceGenerator tempDestinationIdGenerator = new IntSequenceGenerator();
|
||||||
|
|
||||||
private final Map<Integer, Handler<Response>> resposeHandlers = new ConcurrentHashMap<Integer, Handler<Response>>();
|
private final Map<Integer, Handler<Response>> responseHandlers = new ConcurrentHashMap<Integer, Handler<Response>>();
|
||||||
private final Map<ConsumerId, Handler<MessageDispatch>> subscriptionsByConsumerId = new ConcurrentHashMap<ConsumerId, Handler<MessageDispatch>>();
|
private final Map<ConsumerId, Handler<MessageDispatch>> subscriptionsByConsumerId = new ConcurrentHashMap<ConsumerId, Handler<MessageDispatch>>();
|
||||||
private final Map<String, ConsumerInfo> jidToConsumerMap = new HashMap<String, ConsumerInfo>();
|
private final Map<String, ConsumerInfo> jidToConsumerMap = new HashMap<String, ConsumerInfo>();
|
||||||
private final Map<String, ConsumerInfo> jidToInboxConsumerMap = new HashMap<String, ConsumerInfo>();
|
private final Map<String, ConsumerInfo> jidToInboxConsumerMap = new HashMap<String, ConsumerInfo>();
|
||||||
|
@ -106,6 +109,9 @@ public class ProtocolConverter {
|
||||||
private final AtomicBoolean connected = new AtomicBoolean(false);
|
private final AtomicBoolean connected = new AtomicBoolean(false);
|
||||||
private ActiveMQTempQueue inboxDestination;
|
private ActiveMQTempQueue inboxDestination;
|
||||||
|
|
||||||
|
//to avoid calling into sendToActiveMq from a handler
|
||||||
|
private ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(1);
|
||||||
|
|
||||||
public ProtocolConverter(XmppTransport transport) {
|
public ProtocolConverter(XmppTransport transport) {
|
||||||
this.transport = transport;
|
this.transport = transport;
|
||||||
initialiseRegistry();
|
initialiseRegistry();
|
||||||
|
@ -159,10 +165,10 @@ public class ProtocolConverter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onActiveMQCommad(Command command) throws Exception {
|
public void onActiveMQCommand(Command command) throws Exception {
|
||||||
if (command.isResponse()) {
|
if (command.isResponse()) {
|
||||||
Response response = (Response)command;
|
Response response = (Response)command;
|
||||||
Handler<Response> handler = resposeHandlers.remove(new Integer(response.getCorrelationId()));
|
Handler<Response> handler = responseHandlers.remove(new Integer(response.getCorrelationId()));
|
||||||
if (handler != null) {
|
if (handler != null) {
|
||||||
handler.handle(response);
|
handler.handle(response);
|
||||||
} else {
|
} else {
|
||||||
|
@ -230,7 +236,7 @@ public class ProtocolConverter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onAuthQuery(Object any, final Iq iq) throws IOException {
|
protected void onAuthQuery(Object any, final Iq iq) throws IOException, JMSException {
|
||||||
Query query = (Query)any;
|
Query query = (Query)any;
|
||||||
if (LOG.isDebugEnabled()) {
|
if (LOG.isDebugEnabled()) {
|
||||||
LOG.debug("Iq Auth Query " + debugString(iq) + " resource: " + query.getResource() + " username: " + query.getUsername());
|
LOG.debug("Iq Auth Query " + debugString(iq) + " resource: " + query.getResource() + " username: " + query.getUsername());
|
||||||
|
@ -281,10 +287,38 @@ public class ProtocolConverter {
|
||||||
sendToActiveMQ(producerInfo, createErrorHandler("create producer"));
|
sendToActiveMQ(producerInfo, createErrorHandler("create producer"));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// create a destination for this client
|
||||||
|
final String to = query.getUsername();
|
||||||
|
createDestination(to);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createDestination(String to) throws IOException, JMSException {
|
||||||
|
ActiveMQDestination destination = createActiveMQDestination(to);
|
||||||
|
if (destination == null) {
|
||||||
|
LOG.debug("Unable to create destination for " + to);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
subscribe(to, destination, jidToConsumerMap);
|
||||||
|
|
||||||
|
// lets subscribe to a personal inbox for replies
|
||||||
|
|
||||||
|
// Check if Destination info is of temporary type.
|
||||||
|
if (inboxDestination == null) {
|
||||||
|
inboxDestination = new ActiveMQTempQueue(connectionInfo.getConnectionId(), tempDestinationIdGenerator.getNextSequenceId());
|
||||||
|
|
||||||
|
DestinationInfo info = new DestinationInfo();
|
||||||
|
info.setConnectionId(connectionInfo.getConnectionId());
|
||||||
|
info.setOperationType(DestinationInfo.ADD_OPERATION_TYPE);
|
||||||
|
info.setDestination(inboxDestination);
|
||||||
|
sendToActiveMQ(info, null);
|
||||||
|
|
||||||
|
subscribe(to, inboxDestination, jidToInboxConsumerMap);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String debugString(Iq iq) {
|
protected String debugString(Iq iq) {
|
||||||
return " to: " + iq.getTo() + " type: " + iq.getType() + " from: " + iq.getFrom() + " id: " + iq.getId();
|
return "to: " + iq.getTo() + " type: " + iq.getType() + " from: " + iq.getFrom() + " id: " + iq.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onDiscoItems(Iq iq, org.jabber.protocol.disco_items.Query query) throws IOException {
|
protected void onDiscoItems(Iq iq, org.jabber.protocol.disco_items.Query query) throws IOException {
|
||||||
|
@ -367,30 +401,13 @@ public class ProtocolConverter {
|
||||||
* sendPresence(presence, item);
|
* sendPresence(presence, item);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// lets create a subscription
|
// lets create a subscription for the room, Jabber clients would use
|
||||||
final String to = presence.getTo();
|
// "room/nickname", so we need to strip off the nickname
|
||||||
|
String to = presence.getTo();
|
||||||
ActiveMQDestination destination = createActiveMQDestination(to);
|
if ( to != null ) {
|
||||||
if (destination == null) {
|
to = to.substring(0, to.indexOf("/"));
|
||||||
LOG.debug("No 'to' attribute specified for presence so not creating a JMS subscription");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
subscribe(to, destination, jidToConsumerMap);
|
|
||||||
|
|
||||||
// lets subscribe to a personal inbox for replies
|
|
||||||
|
|
||||||
// Check if Destination info is of temporary type.
|
|
||||||
if (inboxDestination == null) {
|
|
||||||
inboxDestination = new ActiveMQTempQueue(connectionInfo.getConnectionId(), tempDestinationIdGenerator.getNextSequenceId());
|
|
||||||
|
|
||||||
DestinationInfo info = new DestinationInfo();
|
|
||||||
info.setConnectionId(connectionInfo.getConnectionId());
|
|
||||||
info.setOperationType(DestinationInfo.ADD_OPERATION_TYPE);
|
|
||||||
info.setDestination(inboxDestination);
|
|
||||||
sendToActiveMQ(info, null);
|
|
||||||
|
|
||||||
subscribe(to, inboxDestination, jidToInboxConsumerMap);
|
|
||||||
}
|
}
|
||||||
|
createDestination(to);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void subscribe(final String to, ActiveMQDestination destination, Map<String, ConsumerInfo> consumerMap) {
|
protected void subscribe(final String to, ActiveMQDestination destination, Map<String, ConsumerInfo> consumerMap) {
|
||||||
|
@ -416,15 +433,23 @@ public class ProtocolConverter {
|
||||||
consumerInfo.setDestination(destination);
|
consumerInfo.setDestination(destination);
|
||||||
|
|
||||||
subscriptionsByConsumerId.put(consumerInfo.getConsumerId(), new Handler<MessageDispatch>() {
|
subscriptionsByConsumerId.put(consumerInfo.getConsumerId(), new Handler<MessageDispatch>() {
|
||||||
public void handle(MessageDispatch messageDispatch) throws Exception {
|
public void handle(final MessageDispatch messageDispatch) throws Exception {
|
||||||
// processing the inbound message
|
// processing the inbound message
|
||||||
if (LOG.isDebugEnabled()) {
|
if (LOG.isDebugEnabled()) {
|
||||||
LOG.debug("Receiving inbound: " + messageDispatch.getMessage());
|
LOG.debug("Receiving inbound: " + messageDispatch.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
// lets send back an ACK
|
// lets send back an ACK
|
||||||
MessageAck ack = new MessageAck(messageDispatch, MessageAck.STANDARD_ACK_TYPE, 1);
|
final MessageAck ack = new MessageAck(messageDispatch, MessageAck.STANDARD_ACK_TYPE, 1);
|
||||||
sendToActiveMQ(ack, createErrorHandler("Ack of message: " + messageDispatch.getMessage().getMessageId()));
|
|
||||||
|
FutureTask<Void> task = new FutureTask<Void>(new Callable<Void>() {
|
||||||
|
public Void call() {
|
||||||
|
sendToActiveMQ(ack, createErrorHandler("Ack of message: " + messageDispatch.getMessage().getMessageId()));
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
scheduledThreadPoolExecutor.submit(task);
|
||||||
|
|
||||||
Message message = createXmppMessage(to, messageDispatch);
|
Message message = createXmppMessage(to, messageDispatch);
|
||||||
if (message != null) {
|
if (message != null) {
|
||||||
|
@ -438,18 +463,26 @@ public class ProtocolConverter {
|
||||||
sendToActiveMQ(consumerInfo, createErrorHandler("subscribe to destination: " + destination));
|
sendToActiveMQ(consumerInfo, createErrorHandler("subscribe to destination: " + destination));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Message createXmppMessage(String to, MessageDispatch messageDispatch) throws JMSException {
|
protected Message createXmppMessage(String to, MessageDispatch messageDispatch) throws IOException, JMSException {
|
||||||
|
|
||||||
|
org.apache.activemq.command.Message message = messageDispatch.getMessage();
|
||||||
|
|
||||||
Message answer = new Message();
|
Message answer = new Message();
|
||||||
answer.setType("groupchat");
|
String from = (String)message.getProperty("XMPPFrom");
|
||||||
String from = to;
|
if ( from == null ) {
|
||||||
int idx = from.indexOf('/');
|
from = to;
|
||||||
if (idx > 0) {
|
int idx = from.indexOf('/');
|
||||||
from = from.substring(0, idx) + "/broker";
|
if (idx > 0) {
|
||||||
|
from = from.substring(0, idx) + "/broker";
|
||||||
|
}
|
||||||
|
answer.setType("groupchat");
|
||||||
|
} else {
|
||||||
|
answer.setType("chat");
|
||||||
}
|
}
|
||||||
|
LOG.debug("Sending message from " + from + " and to " + to);
|
||||||
answer.setFrom(from);
|
answer.setFrom(from);
|
||||||
answer.setTo(to);
|
answer.setTo(to);
|
||||||
|
|
||||||
org.apache.activemq.command.Message message = messageDispatch.getMessage();
|
|
||||||
// answer.setType(message.getType());
|
// answer.setType(message.getType());
|
||||||
if (message instanceof ActiveMQTextMessage) {
|
if (message instanceof ActiveMQTextMessage) {
|
||||||
ActiveMQTextMessage activeMQTextMessage = (ActiveMQTextMessage)message;
|
ActiveMQTextMessage activeMQTextMessage = (ActiveMQTextMessage)message;
|
||||||
|
@ -515,7 +548,7 @@ public class ProtocolConverter {
|
||||||
command.setCommandId(generateCommandId());
|
command.setCommandId(generateCommandId());
|
||||||
if (handler != null) {
|
if (handler != null) {
|
||||||
command.setResponseRequired(true);
|
command.setResponseRequired(true);
|
||||||
resposeHandlers.put(command.getCommandId(), handler);
|
responseHandlers.put(command.getCommandId(), handler);
|
||||||
}
|
}
|
||||||
transport.getTransportListener().onCommand(command);
|
transport.getTransportListener().onCommand(command);
|
||||||
}
|
}
|
||||||
|
@ -578,9 +611,6 @@ public class ProtocolConverter {
|
||||||
if (idx > 0) {
|
if (idx > 0) {
|
||||||
name = name.substring(0, idx);
|
name = name.substring(0, idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println("#### Creating ActiveMQ destination for: " + name);
|
|
||||||
|
|
||||||
// lets support lower-case versions of the agent topic
|
// lets support lower-case versions of the agent topic
|
||||||
if (name.equalsIgnoreCase(AdvisorySupport.AGENT_TOPIC)) {
|
if (name.equalsIgnoreCase(AdvisorySupport.AGENT_TOPIC)) {
|
||||||
name = AdvisorySupport.AGENT_TOPIC;
|
name = AdvisorySupport.AGENT_TOPIC;
|
||||||
|
@ -613,7 +643,7 @@ public class ProtocolConverter {
|
||||||
if (replyTo == null) {
|
if (replyTo == null) {
|
||||||
replyTo = inboxDestination;
|
replyTo = inboxDestination;
|
||||||
}
|
}
|
||||||
System.out.println("Setting reply to destination to: " + replyTo);
|
LOG.info("Setting reply to destination to: " + replyTo);
|
||||||
answer.setJMSReplyTo(replyTo);
|
answer.setJMSReplyTo(replyTo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ public class XmppTransport extends TcpTransport {
|
||||||
protected OutputStream outputStream;
|
protected OutputStream outputStream;
|
||||||
protected InputStream inputStream;
|
protected InputStream inputStream;
|
||||||
|
|
||||||
private JAXBContext context;
|
private static JAXBContext context;
|
||||||
private XMLEventReader xmlReader;
|
private XMLEventReader xmlReader;
|
||||||
private Unmarshaller unmarshaller;
|
private Unmarshaller unmarshaller;
|
||||||
private Marshaller marshaller;
|
private Marshaller marshaller;
|
||||||
|
@ -85,6 +85,7 @@ public class XmppTransport extends TcpTransport {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void init() {
|
private void init() {
|
||||||
|
LOG.debug("Creating new instance of XmppTransport");
|
||||||
converter = new ProtocolConverter(this);
|
converter = new ProtocolConverter(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,7 +106,7 @@ public class XmppTransport extends TcpTransport {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
converter.onActiveMQCommad(command);
|
converter.onActiveMQCommand(command);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw e;
|
throw e;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -170,6 +171,7 @@ public class XmppTransport extends TcpTransport {
|
||||||
// unmarshal a new object
|
// unmarshal a new object
|
||||||
Object object = unmarshaller.unmarshal(xmlReader);
|
Object object = unmarshaller.unmarshal(xmlReader);
|
||||||
if (object != null) {
|
if (object != null) {
|
||||||
|
LOG.debug("Unmarshalled new incoming event - " + object.getClass().getName());
|
||||||
converter.onXmppCommand(object);
|
converter.onXmppCommand(object);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -218,19 +220,38 @@ public class XmppTransport extends TcpTransport {
|
||||||
@Override
|
@Override
|
||||||
protected void initializeStreams() throws Exception {
|
protected void initializeStreams() throws Exception {
|
||||||
// TODO it would be preferable to use class discovery here!
|
// TODO it would be preferable to use class discovery here!
|
||||||
context = JAXBContext.newInstance("jabber.client"
|
if ( context == null ) {
|
||||||
/*
|
context = JAXBContext.newInstance(
|
||||||
* + ":jabber.server" + ":jabber.iq.gateway" + ":jabber.iq.last" +
|
"jabber.server:" +
|
||||||
* ":jabber.iq.oob" + ":jabber.iq.pass" + ":jabber.iq.time" +
|
"jabber.server.dialback:" +
|
||||||
* ":jabber.iq.version" + ":org.jabber.protocol.activity" +
|
"jabber.client:" +
|
||||||
* ":org.jabber.protocol.address" + ":org.jabber.protocol.amp" +
|
"jabber.iq._private:" +
|
||||||
* ":org.jabber.protocol.amp_errors" + ":org.jabber.protocol.muc_admin" +
|
"jabber.iq.auth:" +
|
||||||
* ":org.jabber.protocol.muc_unique"
|
"jabber.iq.gateway:" +
|
||||||
*/
|
"jabber.iq.version:" +
|
||||||
+ ":jabber.iq._private" + ":jabber.iq.auth" + ":jabber.iq.roster" + ":org.jabber.etherx.streams" + ":org.jabber.protocol.disco_info" + ":org.jabber.protocol.disco_items"
|
"jabber.iq.roster:" +
|
||||||
+ ":org.jabber.protocol.muc" + ":org.jabber.protocol.muc_user" + ":ietf.params.xml.ns.xmpp_sasl" + ":ietf.params.xml.ns.xmpp_stanzas"
|
"jabber.iq.pass:" +
|
||||||
+ ":ietf.params.xml.ns.xmpp_streams" + ":ietf.params.xml.ns.xmpp_tls");
|
"jabber.iq.last:" +
|
||||||
|
"jabber.iq.oob:" +
|
||||||
|
"jabber.iq.time:" +
|
||||||
|
"storage.rosternotes:" +
|
||||||
|
"ietf.params.xml.ns.xmpp_streams:" +
|
||||||
|
"ietf.params.xml.ns.xmpp_sasl:" +
|
||||||
|
"ietf.params.xml.ns.xmpp_stanzas:" +
|
||||||
|
"ietf.params.xml.ns.xmpp_bind:" +
|
||||||
|
"ietf.params.xml.ns.xmpp_tls:" +
|
||||||
|
"org.jabber.protocol.muc:" +
|
||||||
|
"org.jabber.protocol.rosterx:" +
|
||||||
|
"org.jabber.protocol.disco_info:" +
|
||||||
|
"org.jabber.protocol.disco_items:" +
|
||||||
|
"org.jabber.protocol.activity:" +
|
||||||
|
"org.jabber.protocol.amp_errors:" +
|
||||||
|
"org.jabber.protocol.amp:" +
|
||||||
|
"org.jabber.protocol.address:" +
|
||||||
|
"org.jabber.protocol.muc_user:" +
|
||||||
|
"org.jabber.protocol.muc_admin:" +
|
||||||
|
"org.jabber.etherx.streams");
|
||||||
|
}
|
||||||
inputStream = new TcpBufferedInputStream(socket.getInputStream(), 8 * 1024);
|
inputStream = new TcpBufferedInputStream(socket.getInputStream(), 8 * 1024);
|
||||||
outputStream = new TcpBufferedOutputStream(socket.getOutputStream(), 16 * 1024);
|
outputStream = new TcpBufferedOutputStream(socket.getOutputStream(), 16 * 1024);
|
||||||
|
|
||||||
|
@ -241,11 +262,10 @@ public class XmppTransport extends TcpTransport {
|
||||||
|
|
||||||
protected void writeOpenStream(String id, String from) throws IOException, XMLStreamException {
|
protected void writeOpenStream(String id, String from) throws IOException, XMLStreamException {
|
||||||
LOG.debug("Sending initial stream element");
|
LOG.debug("Sending initial stream element");
|
||||||
|
|
||||||
XMLOutputFactory factory = XMLOutputFactory.newInstance();
|
XMLOutputFactory factory = XMLOutputFactory.newInstance();
|
||||||
// factory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true);
|
// factory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true);
|
||||||
xmlWriter = factory.createXMLStreamWriter(outputStream);
|
xmlWriter = factory.createXMLStreamWriter(outputStream);
|
||||||
|
|
||||||
// write the dummy start tag
|
|
||||||
xmlWriter.writeStartDocument();
|
xmlWriter.writeStartDocument();
|
||||||
xmlWriter.writeStartElement("stream", "stream", "http://etherx.jabber.org/streams");
|
xmlWriter.writeStartElement("stream", "stream", "http://etherx.jabber.org/streams");
|
||||||
xmlWriter.writeDefaultNamespace("jabber:client");
|
xmlWriter.writeDefaultNamespace("jabber:client");
|
||||||
|
@ -264,12 +284,14 @@ public class XmppTransport extends TcpTransport {
|
||||||
// TODO support TLS
|
// TODO support TLS
|
||||||
// features.getAny().add(new Starttls());
|
// features.getAny().add(new Starttls());
|
||||||
|
|
||||||
Mechanisms mechanisms = new Mechanisms();
|
//Mechanisms mechanisms = new Mechanisms();
|
||||||
|
|
||||||
// TODO support SASL
|
// TODO support SASL
|
||||||
// mechanisms.getMechanism().add("DIGEST-MD5");
|
// mechanisms.getMechanism().add("DIGEST-MD5");
|
||||||
// mechanisms.getMechanism().add("PLAIN");
|
// mechanisms.getMechanism().add("PLAIN");
|
||||||
features.getAny().add(mechanisms);
|
//features.getAny().add(mechanisms);
|
||||||
|
features.getAny().add(new ietf.params.xml.ns.xmpp_bind.ObjectFactory().createBind());
|
||||||
|
features.getAny().add(new ietf.params.xml.ns.xmpp_session.ObjectFactory().createSession(""));
|
||||||
marshall(features);
|
marshall(features);
|
||||||
|
|
||||||
LOG.debug("Initial stream element sent!");
|
LOG.debug("Initial stream element sent!");
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -16,7 +9,7 @@
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
The protocol documented by this schema is defined in
|
The protocol documented by this schema is defined in
|
||||||
JEP-0108: http://www.jabber.org/jeps/jep-0108.html
|
XEP-0108: http://www.xmpp.org/extensions/xep-0108.html
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -16,7 +9,7 @@
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
The protocol documented by this schema is defined in
|
The protocol documented by this schema is defined in
|
||||||
JEP-0033: http://www.jabber.org/jeps/jep-0033.html
|
XEP-0033: http://www.xmpp.org/extensions/xep-0033.html
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -16,7 +9,7 @@
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
The protocol documented by this schema is defined in
|
The protocol documented by this schema is defined in
|
||||||
JEP-0079: http://www.jabber.org/jeps/jep-0079.html
|
XEP-0079: http://www.xmpp.org/extensions/xep-0079.html
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -16,7 +9,7 @@
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
The protocol documented by this schema is defined in
|
The protocol documented by this schema is defined in
|
||||||
JEP-0079: http://www.jabber.org/jeps/jep-0079.html
|
XEP-0079: http://www.xmpp.org/extensions/xep-0079.html
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -16,7 +9,7 @@
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
The protocol documented by this schema is defined in
|
The protocol documented by this schema is defined in
|
||||||
JEP-0079: http://www.jabber.org/jeps/jep-0079.html
|
XEP-0079: http://www.xmpp.org/extensions/xep-0079.html
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
|
|
||||||
|
@ -25,10 +18,10 @@
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element ref='rule' minOccurs='1' maxOccurs='unbounded'/>
|
<xs:element ref='rule' minOccurs='1' maxOccurs='unbounded'/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
<xs:attribute name='from' usage='optional' type='xs:string'/>
|
<xs:attribute name='from' use='optional' type='xs:string'/>
|
||||||
<xs:attribute name='per-hop' use='optional' type='xs:boolean' default='false'/>
|
<xs:attribute name='per-hop' use='optional' type='xs:boolean' default='false'/>
|
||||||
<xs:attribute name='status' usage='optional' type='xs:NCName'/>
|
<xs:attribute name='status' use='optional' type='xs:NCName'/>
|
||||||
<xs:attribute name='to' usage='optional' type='xs:string'/>
|
<xs:attribute name='to' use='optional' type='xs:string'/>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
|
|
||||||
|
<xs:schema
|
||||||
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
targetNamespace='urn:ietf:params:xml:ns:xmpp-bind'
|
||||||
|
xmlns='urn:ietf:params:xml:ns:xmpp-bind'
|
||||||
|
elementFormDefault='qualified'>
|
||||||
|
|
||||||
|
<xs:element name='bind'>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:choice minOccurs='0' maxOccurs='1'>
|
||||||
|
<xs:element name='resource' type='resourceType'/>
|
||||||
|
<xs:element name='jid' type='fullJIDType'/>
|
||||||
|
</xs:choice>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
|
||||||
|
<xs:simpleType name='resourceType'>
|
||||||
|
<xs:restriction base='xs:string'>
|
||||||
|
<xs:minLength value='1'/>
|
||||||
|
<xs:maxLength value='1023'/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<xs:simpleType name='fullJIDType'>
|
||||||
|
<xs:restriction base='xs:string'>
|
||||||
|
<xs:minLength value='8'/>
|
||||||
|
<xs:maxLength value='3071'/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
|
</xs:schema>
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8' ?>
|
<?xml version='1.0' encoding='UTF-8' ?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -16,7 +9,7 @@
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
The protocol documented by this schema is defined in
|
The protocol documented by this schema is defined in
|
||||||
JEP-0030: http://www.jabber.org/jeps/jep-0030.html
|
XEP-0030: http://www.xmpp.org/extensions/xep-0030.html
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8' ?>
|
<?xml version='1.0' encoding='UTF-8' ?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -16,7 +9,7 @@
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
The protocol documented by this schema is defined in
|
The protocol documented by this schema is defined in
|
||||||
JEP-0030: http://www.jabber.org/jeps/jep-0030.html
|
XEP-0030: http://www.xmpp.org/extensions/xep-0030.html
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -15,8 +8,14 @@
|
||||||
|
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
The protocol documented by this schema is defined in
|
NOTE WELL: Non-SASL Authentication via the jabber:iq:auth
|
||||||
JEP-0078: http://www.jabber.org/jeps/jep-0078.html
|
protocol has been superseded by SASL Authentication as
|
||||||
|
defined in RFC 3920, and is now obsolete.
|
||||||
|
|
||||||
|
For historical purposes, the protocol documented by this
|
||||||
|
schema is defined in XEP-0078:
|
||||||
|
|
||||||
|
http://www.xmpp.org/extensions/xep-0078.html
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -16,7 +9,7 @@
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
The protocol documented by this schema is defined in
|
The protocol documented by this schema is defined in
|
||||||
JEP-0100: http://www.jabber.org/jeps/jep-0100.html
|
XEP-0100: http://www.xmpp.org/extensions/xep-0100.html
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -16,7 +9,7 @@
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
The protocol documented by this schema is defined in
|
The protocol documented by this schema is defined in
|
||||||
JEP-0012: http://www.jabber.org/jeps/jep-0012.html
|
XEP-0012: http://www.xmpp.org/extensions/xep-0012.html
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -16,7 +9,7 @@
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
The protocol documented by this schema is defined in
|
The protocol documented by this schema is defined in
|
||||||
JEP-0066: http://www.jabber.org/jeps/jep-0066.html
|
XEP-0066: http://www.xmpp.org/extensions/xep-0066.html
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -16,7 +9,7 @@
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
The protocol documented by this schema is defined in
|
The protocol documented by this schema is defined in
|
||||||
JEP-0003: http://www.jabber.org/jeps/jep-0003.html
|
XEP-0003: http://www.xmpp.org/extensions/xep-0003.html
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -16,7 +9,7 @@
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
The protocol documented by this schema is defined in
|
The protocol documented by this schema is defined in
|
||||||
JEP-0049: http://www.jabber.org/jeps/jep-0049.html
|
XEP-0049: http://www.xmpp.org/extensions/xep-0049.html
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -16,7 +9,11 @@
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
The protocol documented by this schema is defined in
|
The protocol documented by this schema is defined in
|
||||||
JEP-0090: http://www.jabber.org/jeps/jep-0090.html
|
XEP-0090: http://www.xmpp.org/extensions/xep-0090.html
|
||||||
|
|
||||||
|
NOTE: This protocol has been deprecated in favor of the
|
||||||
|
Entity Time protocol specified in XEP-0202:
|
||||||
|
http://www.xmpp.org/extensions/xep-0202.html
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -16,7 +9,7 @@
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
The protocol documented by this schema is defined in
|
The protocol documented by this schema is defined in
|
||||||
JEP-0092: http://www.jabber.org/jeps/jep-0092.html
|
XEP-0092: http://www.xmpp.org/extensions/xep-0092.html
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -16,6 +9,9 @@
|
||||||
<xs:import namespace='urn:ietf:params:xml:ns:xmpp-stanzas'
|
<xs:import namespace='urn:ietf:params:xml:ns:xmpp-stanzas'
|
||||||
schemaLocation='stanzaerror.xsd'/>
|
schemaLocation='stanzaerror.xsd'/>
|
||||||
|
|
||||||
|
<xs:import namespace='http://www.w3.org/XML/1998/namespace'
|
||||||
|
schemaLocation='xml.xsd'/>
|
||||||
|
|
||||||
<xs:element name='message'>
|
<xs:element name='message'>
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
|
@ -74,18 +70,7 @@
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
|
||||||
|
|
||||||
<xs:element name='thread'>
|
|
||||||
<xs:complexType>
|
|
||||||
<xs:simpleContent>
|
|
||||||
<xs:extension base='xs:NMTOKEN'/>
|
|
||||||
</xs:simpleContent>
|
|
||||||
</xs:complexType>
|
|
||||||
</xs:element>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
<xs:element name='thread' type='xs:NMTOKEN'/>
|
<xs:element name='thread' type='xs:NMTOKEN'/>
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:element name='presence'>
|
<xs:element name='presence'>
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -16,6 +9,9 @@
|
||||||
<xs:import namespace='urn:ietf:params:xml:ns:xmpp-stanzas'
|
<xs:import namespace='urn:ietf:params:xml:ns:xmpp-stanzas'
|
||||||
schemaLocation='stanzaerror.xsd'/>
|
schemaLocation='stanzaerror.xsd'/>
|
||||||
|
|
||||||
|
<xs:import namespace='http://www.w3.org/XML/1998/namespace'
|
||||||
|
schemaLocation='xml.xsd'/>
|
||||||
|
|
||||||
<xs:element name='message'>
|
<xs:element name='message'>
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -16,7 +9,7 @@
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
The protocol documented by this schema is defined in
|
The protocol documented by this schema is defined in
|
||||||
JEP-0045: http://www.jabber.org/jeps/jep-0045.html
|
XEP-0045: http://www.xmpp.org/extensions/xep-0045.html
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -16,7 +9,7 @@
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
The protocol documented by this schema is defined in
|
The protocol documented by this schema is defined in
|
||||||
JEP-0045: http://www.jabber.org/jeps/jep-0045.html
|
XEP-0045: http://www.xmpp.org/extensions/xep-0045.html
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
|
|
||||||
|
@ -28,7 +21,7 @@
|
||||||
<xs:element ref='invite' minOccurs='0' maxOccurs='unbounded'/>
|
<xs:element ref='invite' minOccurs='0' maxOccurs='unbounded'/>
|
||||||
<xs:element ref='item' minOccurs='0'/>
|
<xs:element ref='item' minOccurs='0'/>
|
||||||
<xs:element name='password' type='xs:string' minOccurs='0'/>
|
<xs:element name='password' type='xs:string' minOccurs='0'/>
|
||||||
<xs:element ref='status' minOccurs='0'/>
|
<xs:element ref='status' minOccurs='0' maxOccurs='unbounded'/>
|
||||||
</xs:choice>
|
</xs:choice>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
@ -110,7 +103,8 @@
|
||||||
<xs:attribute name='code' use='required'>
|
<xs:attribute name='code' use='required'>
|
||||||
<xs:simpleType>
|
<xs:simpleType>
|
||||||
<xs:restriction base='xs:int'>
|
<xs:restriction base='xs:int'>
|
||||||
<xs:length value='3'/>
|
<xs:minInclusive value='100'/>
|
||||||
|
<xs:maxInclusive value='999'/>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
</xs:attribute>
|
</xs:attribute>
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -16,7 +9,7 @@
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
The protocol documented by this schema is defined in
|
The protocol documented by this schema is defined in
|
||||||
JEP-0045: http://www.jabber.org/jeps/jep-0045.html
|
XEP-0045: http://www.xmpp.org/extensions/xep-0045.html
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -16,7 +9,7 @@
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
The protocol documented by this schema is defined in
|
The protocol documented by this schema is defined in
|
||||||
JEP-0045: http://www.jabber.org/jeps/jep-0045.html
|
XEP-0145: http://www.xmpp.org/extensions/xep-0145.html
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -16,7 +9,7 @@
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
The protocol documented by this schema is defined in
|
The protocol documented by this schema is defined in
|
||||||
JEP-0144: http://www.jabber.org/jeps/jep-0144.html
|
XEP-0144: http://www.xmpp.org/extensions/xep-0144.html
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
|
|
||||||
|
@ -33,9 +26,9 @@
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name='group' type='xs:string' minOccurs='0' maxOccurs='unbounded'/>
|
<xs:element name='group' type='xs:string' minOccurs='0' maxOccurs='unbounded'/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
<xs:attribute name='action' use='optional'>
|
<xs:attribute name='action' use='optional' default='add'>
|
||||||
<xs:simpleType>
|
<xs:simpleType>
|
||||||
<xs:restriction base='xs:NCName' default='add'>
|
<xs:restriction base='xs:NCName'>
|
||||||
<xs:enumeration value='add'/>
|
<xs:enumeration value='add'/>
|
||||||
<xs:enumeration value='delete'/>
|
<xs:enumeration value='delete'/>
|
||||||
<xs:enumeration value='modify'/>
|
<xs:enumeration value='modify'/>
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -13,6 +6,9 @@
|
||||||
xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'
|
xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'
|
||||||
elementFormDefault='qualified'>
|
elementFormDefault='qualified'>
|
||||||
|
|
||||||
|
<xs:import namespace='http://www.w3.org/XML/1998/namespace'
|
||||||
|
schemaLocation='xml.xsd'/>
|
||||||
|
|
||||||
<xs:element name='bad-request' type='empty'/>
|
<xs:element name='bad-request' type='empty'/>
|
||||||
<xs:element name='conflict' type='empty'/>
|
<xs:element name='conflict' type='empty'/>
|
||||||
<xs:element name='feature-not-implemented' type='empty'/>
|
<xs:element name='feature-not-implemented' type='empty'/>
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
|
@ -13,6 +6,9 @@
|
||||||
xmlns='urn:ietf:params:xml:ns:xmpp-streams'
|
xmlns='urn:ietf:params:xml:ns:xmpp-streams'
|
||||||
elementFormDefault='qualified'>
|
elementFormDefault='qualified'>
|
||||||
|
|
||||||
|
<xs:import namespace='http://www.w3.org/XML/1998/namespace'
|
||||||
|
schemaLocation='xml.xsd'/>
|
||||||
|
|
||||||
<xs:element name='bad-format' type='empty'/>
|
<xs:element name='bad-format' type='empty'/>
|
||||||
<xs:element name='bad-namespace-prefix' type='empty'/>
|
<xs:element name='bad-namespace-prefix' type='empty'/>
|
||||||
<xs:element name='conflict' type='empty'/>
|
<xs:element name='conflict' type='empty'/>
|
||||||
|
|
|
@ -1,125 +1,103 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!--
|
|
||||||
copyright (c) 1999-2006 The Jabber Software Foundation
|
|
||||||
http://www.xmpp.org/about/copyright.shtml
|
|
||||||
|
|
||||||
This XSD is licensed under the Creative Commons License 2.5
|
|
||||||
http://creativecommons.org/licenses/by/2.5/
|
|
||||||
-->
|
|
||||||
|
|
||||||
<xs:schema
|
<xs:schema
|
||||||
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
||||||
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
|
xmlns:jaxb='http://java.sun.com/xml/ns/jaxb'
|
||||||
targetNamespace='http://etherx.jabber.org/streams'
|
targetNamespace='http://etherx.jabber.org/streams'
|
||||||
xmlns='http://etherx.jabber.org/streams'
|
xmlns='http://etherx.jabber.org/streams'
|
||||||
elementFormDefault='unqualified'
|
elementFormDefault='unqualified'
|
||||||
jaxb:version="2.0">
|
jaxb:version="2.0">
|
||||||
|
|
||||||
<xs:import namespace='jabber:client'
|
<xs:import namespace='jabber:client'
|
||||||
schemaLocation='jabber-client.xsd'/>
|
schemaLocation='jabber-client.xsd'/>
|
||||||
<xs:import namespace='jabber:server'
|
|
||||||
schemaLocation='jabber-server.xsd'/>
|
|
||||||
<xs:import namespace='jabber:server:dialback'
|
|
||||||
schemaLocation='dialback.xsd'/>
|
|
||||||
<xs:import namespace='urn:ietf:params:xml:ns:xmpp-streams'
|
|
||||||
schemaLocation='streamerror.xsd'/>
|
|
||||||
<xs:import namespace='urn:ietf:params:xml:ns:xmpp-tls'
|
|
||||||
schemaLocation='tls.xsd'/>
|
|
||||||
<xs:import namespace='urn:ietf:params:xml:ns:xmpp-sasl'
|
|
||||||
schemaLocation='sasl.xsd'/>
|
|
||||||
|
|
||||||
<xs:element name='stream'>
|
<xs:import namespace='jabber:server'
|
||||||
<xs:complexType>
|
schemaLocation='jabber-server.xsd'/>
|
||||||
<xs:sequence xmlns:client='jabber:client'
|
|
||||||
xmlns:server='jabber:server'
|
|
||||||
xmlns:db='jabber:server:dialback'>
|
|
||||||
<xs:element ref='features' minOccurs='0' maxOccurs='1'/>
|
|
||||||
<xs:any jaxb:property="" namespace='urn:ietf:params:xml:ns:xmpp-tls'
|
|
||||||
minOccurs='0'
|
|
||||||
maxOccurs='unbounded'>
|
|
||||||
|
|
||||||
<xs:annotation>
|
<xs:import namespace='jabber:server:dialback'
|
||||||
<xs:appinfo>
|
schemaLocation='dialback.xsd'/>
|
||||||
<jaxb:property name="tls"/>
|
|
||||||
</xs:appinfo>
|
|
||||||
</xs:annotation>
|
|
||||||
</xs:any>
|
|
||||||
<xs:any namespace='urn:ietf:params:xml:ns:xmpp-sasl'
|
|
||||||
minOccurs='0'
|
|
||||||
maxOccurs='unbounded'>
|
|
||||||
|
|
||||||
<xs:annotation>
|
<xs:import namespace='urn:ietf:params:xml:ns:xmpp-streams'
|
||||||
<xs:appinfo>
|
schemaLocation='streamerror.xsd'/>
|
||||||
<jaxb:property name="sasl"/>
|
|
||||||
</xs:appinfo>
|
|
||||||
</xs:annotation>
|
|
||||||
</xs:any>
|
|
||||||
|
|
||||||
<!--
|
<xs:import namespace='http://www.w3.org/XML/1998/namespace'
|
||||||
<xs:choice minOccurs='0' maxOccurs='1'>
|
schemaLocation='xml.xsd'/>
|
||||||
<xs:choice minOccurs='0' maxOccurs='unbounded'>
|
|
||||||
<xs:element ref='client:message'/>
|
|
||||||
<xs:element ref='client:presence'/>
|
|
||||||
<xs:element ref='client:iq'/>
|
|
||||||
|
|
||||||
<xs:annotation>
|
<xs:element name='stream'>
|
||||||
<xs:appinfo>
|
<xs:complexType>
|
||||||
<jaxb:property name="clientMessages"/>
|
<xs:sequence xmlns:client='jabber:client'
|
||||||
</xs:appinfo>
|
xmlns:server='jabber:server'
|
||||||
</xs:annotation>
|
xmlns:db='jabber:server:dialback'>
|
||||||
</xs:choice>
|
<xs:element ref='features' minOccurs='0' maxOccurs='1'/>
|
||||||
<xs:choice minOccurs='0' maxOccurs='unbounded'>
|
<xs:any namespace='urn:ietf:params:xml:ns:xmpp-tls'
|
||||||
<xs:element ref='server:message'/>
|
minOccurs='0'
|
||||||
<xs:element ref='server:presence'/>
|
maxOccurs='unbounded'>
|
||||||
<xs:element ref='server:iq'/>
|
<xs:annotation>
|
||||||
<xs:element ref='db:result'/>
|
<xs:appinfo>
|
||||||
<xs:element ref='db:verify'/>
|
<jaxb:property name="xmppTls"/>
|
||||||
|
</xs:appinfo>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:any>
|
||||||
|
<xs:any namespace='urn:ietf:params:xml:ns:xmpp-sasl'
|
||||||
|
minOccurs='0'
|
||||||
|
maxOccurs='unbounded'>
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:appinfo>
|
||||||
|
<jaxb:property name="xmppSasl"/>
|
||||||
|
</xs:appinfo>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:any>
|
||||||
|
<xs:choice minOccurs='0' maxOccurs='1'>
|
||||||
|
<xs:choice minOccurs='0' maxOccurs='unbounded'>
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:appinfo>
|
||||||
|
<jaxb:property name="clientMessages"/>
|
||||||
|
</xs:appinfo>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:element ref='client:message'/>
|
||||||
|
<xs:element ref='client:presence'/>
|
||||||
|
<xs:element ref='client:iq'/>
|
||||||
|
</xs:choice>
|
||||||
|
<xs:choice minOccurs='0' maxOccurs='unbounded'>
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:appinfo>
|
||||||
|
<jaxb:property name="serverMessages"/>
|
||||||
|
</xs:appinfo>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:element ref='server:message'/>
|
||||||
|
<xs:element ref='server:presence'/>
|
||||||
|
<xs:element ref='server:iq'/>
|
||||||
|
<xs:element ref='db:result'/>
|
||||||
|
<xs:element ref='db:verify'/>
|
||||||
|
</xs:choice>
|
||||||
|
</xs:choice>
|
||||||
|
<xs:element ref='error' minOccurs='0' maxOccurs='1'/>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute name='from' type='xs:string' use='optional'/>
|
||||||
|
<xs:attribute name='id' type='xs:NMTOKEN' use='optional'/>
|
||||||
|
<xs:attribute name='to' type='xs:string' use='optional'/>
|
||||||
|
<xs:attribute name='version' type='xs:decimal' use='optional'/>
|
||||||
|
<xs:attribute ref='xml:lang' use='optional'/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
|
||||||
<xs:annotation>
|
<xs:element name='features'>
|
||||||
<xs:appinfo>
|
<xs:complexType>
|
||||||
<jaxb:property name="serverMessages"/>
|
<xs:choice minOccurs='0' maxOccurs='unbounded'>
|
||||||
</xs:appinfo>
|
<xs:any namespace='##other'/>
|
||||||
</xs:annotation>
|
</xs:choice>
|
||||||
</xs:choice>
|
</xs:complexType>
|
||||||
</xs:choice>
|
</xs:element>
|
||||||
-->
|
|
||||||
<xs:choice minOccurs='0' maxOccurs='unbounded'>
|
|
||||||
<xs:element ref='client:message'/>
|
|
||||||
<xs:element ref='client:presence'/>
|
|
||||||
<xs:element ref='client:iq'/>
|
|
||||||
<xs:element ref='server:message'/>
|
|
||||||
<xs:element ref='server:presence'/>
|
|
||||||
<xs:element ref='server:iq'/>
|
|
||||||
<xs:element ref='db:result'/>
|
|
||||||
<xs:element ref='db:verify'/>
|
|
||||||
</xs:choice>
|
|
||||||
<xs:element ref='error' minOccurs='0' maxOccurs='1'/>
|
|
||||||
</xs:sequence>
|
|
||||||
<xs:attribute name='from' type='xs:string' use='optional'/>
|
|
||||||
<xs:attribute name='id' type='xs:NMTOKEN' use='optional'/>
|
|
||||||
<xs:attribute name='to' type='xs:string' use='optional'/>
|
|
||||||
<xs:attribute name='version' type='xs:decimal' use='optional'/>
|
|
||||||
<xs:attribute ref='xml:lang' use='optional'/>
|
|
||||||
</xs:complexType>
|
|
||||||
</xs:element>
|
|
||||||
|
|
||||||
<xs:element name='features'>
|
<xs:element name='error'>
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:choice minOccurs='0' maxOccurs='unbounded'>
|
<xs:sequence xmlns:err='urn:ietf:params:xml:ns:xmpp-streams'>
|
||||||
<xs:any namespace='##other'/>
|
<xs:group ref='err:streamErrorGroup'/>
|
||||||
</xs:choice>
|
<xs:element ref='err:text'
|
||||||
</xs:complexType>
|
|
||||||
</xs:element>
|
|
||||||
|
|
||||||
<xs:element name='error'>
|
|
||||||
<xs:complexType>
|
|
||||||
<xs:sequence xmlns:err='urn:ietf:params:xml:ns:xmpp-streams'>
|
|
||||||
<xs:group ref='err:streamErrorGroup'/>
|
|
||||||
<xs:element ref='err:text'
|
|
||||||
minOccurs='0'
|
minOccurs='0'
|
||||||
maxOccurs='1'/>
|
maxOccurs='1'/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
|
||||||
</xs:schema>
|
</xs:schema>
|
||||||
|
|
|
@ -19,11 +19,17 @@ package org.apache.activemq.transport.xmpp;
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
import junit.textui.TestRunner;
|
import junit.textui.TestRunner;
|
||||||
import org.jivesoftware.smack.Chat;
|
import org.jivesoftware.smack.Chat;
|
||||||
|
import org.jivesoftware.smack.ChatManager;
|
||||||
|
import org.jivesoftware.smack.ChatManagerListener;
|
||||||
import org.jivesoftware.smack.ConnectionConfiguration;
|
import org.jivesoftware.smack.ConnectionConfiguration;
|
||||||
import org.jivesoftware.smack.MessageListener;
|
import org.jivesoftware.smack.MessageListener;
|
||||||
|
import org.jivesoftware.smack.PacketListener;
|
||||||
import org.jivesoftware.smack.XMPPConnection;
|
import org.jivesoftware.smack.XMPPConnection;
|
||||||
import org.jivesoftware.smack.XMPPException;
|
import org.jivesoftware.smack.XMPPException;
|
||||||
|
import org.jivesoftware.smack.filter.PacketFilter;
|
||||||
import org.jivesoftware.smack.packet.Message;
|
import org.jivesoftware.smack.packet.Message;
|
||||||
|
import org.jivesoftware.smack.packet.Packet;
|
||||||
|
import org.jivesoftware.smackx.muc.MultiUserChat;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @version $Revision$
|
* @version $Revision$
|
||||||
|
@ -32,7 +38,9 @@ public class XmppTest extends TestCase {
|
||||||
|
|
||||||
protected static boolean block;
|
protected static boolean block;
|
||||||
|
|
||||||
private XmppBroker broker = new XmppBroker();
|
private final XmppBroker broker = new XmppBroker();
|
||||||
|
|
||||||
|
private final long sleepTime = 5000;
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
block = true;
|
block = true;
|
||||||
|
@ -49,12 +57,12 @@ public class XmppTest extends TestCase {
|
||||||
XMPPConnection con = new XMPPConnection(config);
|
XMPPConnection con = new XMPPConnection(config);
|
||||||
con.connect();
|
con.connect();
|
||||||
con.login("amq-user", "amq-pwd");
|
con.login("amq-user", "amq-pwd");
|
||||||
Chat chat = con.getChatManager().createChat("test@localhost",
|
ChatManager chatManager = con.getChatManager();
|
||||||
new MessageListener() {
|
Chat chat = chatManager.createChat("test@localhost", new MessageListener() {
|
||||||
public void processMessage(Chat chat, Message message) {
|
public void processMessage(Chat chat, Message message) {
|
||||||
//
|
System.out.println("Got XMPP message from chat " + chat.getParticipant() + " message - " + message.getBody());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
for (int i = 0; i < 10; i++) {
|
for (int i = 0; i < 10; i++) {
|
||||||
System.out.println("Sending message: " + i);
|
System.out.println("Sending message: " + i);
|
||||||
chat.sendMessage("Hello from Message: " + i);
|
chat.sendMessage("Hello from Message: " + i);
|
||||||
|
@ -77,6 +85,225 @@ public class XmppTest extends TestCase {
|
||||||
System.out.println("Done!");
|
System.out.println("Done!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void testChat() throws Exception {
|
||||||
|
ConnectionConfiguration config = new ConnectionConfiguration("localhost", 61222);
|
||||||
|
//config.setDebuggerEnabled(true);
|
||||||
|
|
||||||
|
XMPPConnection consumerCon = new XMPPConnection(config);
|
||||||
|
consumerCon.connect();
|
||||||
|
consumerCon.login("consumer", "consumer");
|
||||||
|
consumerCon.addPacketListener(new XmppLogger("CONSUMER INBOUND"), new PacketFilter() {
|
||||||
|
public boolean accept(Packet packet) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
consumerCon.addPacketWriterListener(new XmppLogger("CONSUMER OUTBOUND"), new PacketFilter() {
|
||||||
|
public boolean accept(Packet packet) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
final ConsumerMessageListener listener = new ConsumerMessageListener();
|
||||||
|
|
||||||
|
consumerCon.getChatManager().addChatListener(new ChatManagerListener() {
|
||||||
|
public void chatCreated(Chat chat, boolean createdLocally) {
|
||||||
|
chat.addMessageListener(listener);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
XMPPConnection producerCon = new XMPPConnection(config);
|
||||||
|
producerCon.connect();
|
||||||
|
producerCon.login("producer", "producer");
|
||||||
|
producerCon.addPacketListener(new XmppLogger("PRODUCER INBOUND"), new PacketFilter() {
|
||||||
|
public boolean accept(Packet packet) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
producerCon.addPacketWriterListener(new XmppLogger("PRODUCER OUTBOUND"), new PacketFilter() {
|
||||||
|
public boolean accept(Packet packet) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Chat chat = producerCon.getChatManager().createChat("consumer", new MessageListener() {
|
||||||
|
public void processMessage(Chat chat, Message message) {
|
||||||
|
System.out.println("Got XMPP message from chat " + chat.getParticipant() + " message - " + message.getBody());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
System.out.println("Sending message: " + i);
|
||||||
|
Message message = new Message("consumer");
|
||||||
|
message.setType(Message.Type.chat);
|
||||||
|
message.setBody("Hello from producer, message # " + i);
|
||||||
|
chat.sendMessage(message);
|
||||||
|
}
|
||||||
|
System.out.println("Sent all messages!");
|
||||||
|
|
||||||
|
Thread.sleep(sleepTime);
|
||||||
|
System.out.println("Consumer received - " + listener.getMessageCount());
|
||||||
|
assertEquals(10, listener.getMessageCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void testMultiUserChat() throws Exception {
|
||||||
|
System.out.println("\n\n\n\n\n\n");
|
||||||
|
ConnectionConfiguration config = new ConnectionConfiguration("localhost", 61222);
|
||||||
|
//config.setDebuggerEnabled(true);
|
||||||
|
//
|
||||||
|
XMPPConnection consumerCon = new XMPPConnection(config);
|
||||||
|
consumerCon.connect();
|
||||||
|
consumerCon.login("consumer", "consumer");
|
||||||
|
MultiUserChat consumerMuc = new MultiUserChat(consumerCon, "muc-test");
|
||||||
|
consumerMuc.join("consumer");
|
||||||
|
|
||||||
|
ConsumerMUCMessageListener listener = new ConsumerMUCMessageListener();
|
||||||
|
consumerMuc.addMessageListener(listener);
|
||||||
|
|
||||||
|
XMPPConnection producerCon = new XMPPConnection(config);
|
||||||
|
producerCon.connect();
|
||||||
|
producerCon.login("producer", "producer");
|
||||||
|
MultiUserChat producerMuc = new MultiUserChat(producerCon, "muc-test");
|
||||||
|
producerMuc.join("producer");
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
System.out.println("Sending message: " + i);
|
||||||
|
Message message = producerMuc.createMessage();
|
||||||
|
message.setBody("Hello from producer, message # " + i);
|
||||||
|
producerMuc.sendMessage(message);
|
||||||
|
}
|
||||||
|
System.out.println("Sent all messages!");
|
||||||
|
|
||||||
|
Thread.sleep(sleepTime);
|
||||||
|
System.out.println("Consumer received - " + listener.getMessageCount());
|
||||||
|
assertEquals(10, listener.getMessageCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addLoggingListeners(String name, XMPPConnection connection) {
|
||||||
|
connection.addPacketListener(new XmppLogger(name + " INBOUND"), new PacketFilter() {
|
||||||
|
public boolean accept(Packet packet) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
connection.addPacketWriterListener(new XmppLogger(name + " OUTBOUND"), new PacketFilter() {
|
||||||
|
public boolean accept(Packet packet) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testTwoConnections() throws Exception {
|
||||||
|
System.out.println("\n\n\n\n\n\n");
|
||||||
|
ConnectionConfiguration config = new ConnectionConfiguration("localhost", 61222);
|
||||||
|
//config.setDebuggerEnabled(true);
|
||||||
|
|
||||||
|
//create the consumer first...
|
||||||
|
XMPPConnection consumerCon = new XMPPConnection(config);
|
||||||
|
consumerCon.connect();
|
||||||
|
addLoggingListeners("CONSUMER", consumerCon);
|
||||||
|
consumerCon.login("consumer", "consumer");
|
||||||
|
|
||||||
|
final ConsumerMessageListener listener1 = new ConsumerMessageListener();
|
||||||
|
consumerCon.getChatManager().addChatListener(new ChatManagerListener() {
|
||||||
|
public void chatCreated(Chat chat, boolean createdLocally) {
|
||||||
|
chat.addMessageListener(listener1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//now create the producer
|
||||||
|
XMPPConnection producerCon = new XMPPConnection(config);
|
||||||
|
System.out.println("Connecting producer and consumer");
|
||||||
|
producerCon.connect();
|
||||||
|
addLoggingListeners("PRODUCER", producerCon);
|
||||||
|
producerCon.login("producer", "producer");
|
||||||
|
|
||||||
|
//create the chat and send some messages
|
||||||
|
Chat chat = producerCon.getChatManager().createChat("consumer", new MessageListener() {
|
||||||
|
public void processMessage(Chat chat, Message message) {
|
||||||
|
System.out.println("Got XMPP message from chat " + chat.getParticipant() + " message - " + message.getBody());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
System.out.println("Sending message: " + i);
|
||||||
|
Message message = new Message("consumer");
|
||||||
|
message.setType(Message.Type.chat);
|
||||||
|
message.setBody("Hello from producer, message # " + i);
|
||||||
|
chat.sendMessage(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
//make sure the consumer has time to receive all the messages...
|
||||||
|
Thread.sleep(sleepTime);
|
||||||
|
|
||||||
|
//create an identical 2nd consumer
|
||||||
|
XMPPConnection lastguyCon = new XMPPConnection(config);
|
||||||
|
lastguyCon.connect();
|
||||||
|
addLoggingListeners("LASTGUY", consumerCon);
|
||||||
|
lastguyCon.login("consumer", "consumer");
|
||||||
|
final ConsumerMessageListener listener2 = new ConsumerMessageListener();
|
||||||
|
lastguyCon.getChatManager().addChatListener(new ChatManagerListener() {
|
||||||
|
public void chatCreated(Chat chat, boolean createdLocally) {
|
||||||
|
chat.addMessageListener(listener2);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
System.out.println("Sending message: " + i);
|
||||||
|
Message message = new Message("consumer");
|
||||||
|
message.setType(Message.Type.chat);
|
||||||
|
message.setBody("Hello from producer, message # " + i);
|
||||||
|
chat.sendMessage(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("Sent all messages!");
|
||||||
|
Thread.sleep(sleepTime);
|
||||||
|
System.out.println("Consumer received - " + listener1.getMessageCount());
|
||||||
|
assertEquals(20, listener1.getMessageCount());
|
||||||
|
System.out.println("Consumer received - " + listener2.getMessageCount());
|
||||||
|
assertEquals(10, listener2.getMessageCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
class XmppLogger implements PacketListener {
|
||||||
|
|
||||||
|
private final String direction;
|
||||||
|
|
||||||
|
public XmppLogger(String direction) {
|
||||||
|
this.direction = direction;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void processPacket(Packet packet) {
|
||||||
|
System.out.println(direction + " : " + packet.toXML());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ConsumerMUCMessageListener implements PacketListener {
|
||||||
|
private int messageCount=0;
|
||||||
|
|
||||||
|
public void processPacket(Packet packet) {
|
||||||
|
if ( packet instanceof Message) {
|
||||||
|
System.out.println("Received message number : " + (messageCount++));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public int getMessageCount() {
|
||||||
|
return messageCount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ConsumerMessageListener implements MessageListener {
|
||||||
|
private int messageCount=0;
|
||||||
|
|
||||||
|
public void processMessage(Chat chat, Message message) {
|
||||||
|
System.out.println("Received message number : " + (messageCount++));
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMessageCount() {
|
||||||
|
return messageCount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setUp() throws Exception {
|
protected void setUp() throws Exception {
|
||||||
broker.start();
|
broker.start();
|
||||||
|
|
Loading…
Reference in New Issue