I am just starting to develop with Wildfire and need to develop pubsub applications.
My client code can open the session and log-in. However, when I try to create a node, I get an error that indicates the feature is not supported. I am using Wildfire 3.1.1 and following specification XEP-0060 V1.9. My question: Am I doing something fundamentally incorrect or is JEP-0060 not really impemented in 3.1.1.
Wildfire does have support for XEP-60. In your example you are sending the IQ packet to the server itself instead of the pubsub service hosted in the server. If you server name is example.com then the pubsub service will usually be located in pubsub.example.com. For more information about pubsub you can follow this link.
Thank you very much for this information. Although I Googled quite a bit on this topic, the information is sparse.
After digging and playing with the server, the only reference I could find to the service is through item discovery. I don’‘t know if this is a spec issue, but I don’‘t see any way to get to the pubsub service from the discovery except for using the “name”. The name is “Publish-Subscribe service” but it is not clear if this is globally unique (that is, would any client would know to look for this name). In most service discovery specs there is usually a registered GUID that a client can use to locate a service, but I didn’'t see one in the iq response.
Here is the req/resp I am referring to:
The only way a client would know how to locate the pubsub service is to either know that “pubsub.” is always pre-pended to the server name (radisson.labs.mot.com) and look for the jid, or, to always know that the name will be “Publish-Subscribe service”. Maybe it is just spec overload, but I didn’'t find any specific statements in the spec that indicated either one can be universally used by a client to locate the service.
The way to discover that a disco#item is providing a pubsub service is by sending a disco#info to the disco#item. Service discovery is like a hierarchy of disco#items. Usually a client would use a sequence of disco#items and disco#info to traverse the hierarchical tree. As defined in the XEP-60 you will need to check for category=’‘pubsub’’ and type=’‘service’’. BTW, registered category and type values can be found here.