Loads only used jabber providers, sending service unavailable for not handled one.

cusax-fix
Damian Minkov 14 years ago
parent d589925e2d
commit 5a09dbe76e

Binary file not shown.

@ -26,6 +26,8 @@ Export-Package: org.jivesoftware.smack,
org.jivesoftware.smack.util,
org.jivesoftware.smack.filter,
org.jivesoftware.smackx,
org.jivesoftware.smackx.bytestreams.socks5.provider,
org.jivesoftware.smackx.bytestreams.ibb.provider,
org.jivesoftware.smackx.muc,
org.jivesoftware.smackx.packet,
org.jivesoftware.smack.proxy,

Binary file not shown.

@ -321,6 +321,16 @@ public class ProtocolProviderServiceJabberImpl
*/
private org.jivesoftware.smack.proxy.ProxyInfo proxy;
/**
* Our provider manager instances.
*/
private static ProviderManager providerManager = null;
/**
* Lock for creating provider.
*/
private static Object providerCreationLock = new Object();
/**
* State for connect and login state.
*/
@ -1437,6 +1447,26 @@ protected void initialize(String screenname,
supportedFeatures.clear();
this.clearRegistrationStateChangeListener();
synchronized(providerCreationLock)
{
if(providerManager == null)
{
try
{
ProviderManager.setInstance(new ProviderManagerExt());
}
catch(Throwable t)
{
// once loaded if we try to set instance second time
// IllegalStateException is thrown
}
finally
{
providerManager = ProviderManager.getInstance();
}
}
}
String protocolIconPath
= accountID.getAccountPropertyString(
ProtocolProviderFactory.PROTOCOL_ICON_PATH);
@ -1586,8 +1616,6 @@ protected void initialize(String screenname,
// RTP HDR extension
supportedFeatures.add(URN_XMPP_JINGLE_RTP_HDREXT);
ProviderManager providerManager = ProviderManager.getInstance();
//register our jingle provider
providerManager.addIQProvider( JingleIQ.ELEMENT_NAME,
JingleIQ.NAMESPACE,

@ -0,0 +1,455 @@
/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package net.java.sip.communicator.impl.protocol.jabber;
import net.java.sip.communicator.util.*;
import org.jivesoftware.smack.packet.*;
import org.jivesoftware.smack.provider.*;
import org.jivesoftware.smackx.*;
import org.jivesoftware.smackx.bytestreams.ibb.provider.*;
import org.jivesoftware.smackx.bytestreams.socks5.provider.*;
import org.jivesoftware.smackx.packet.*;
import org.jivesoftware.smackx.provider.*;
/**
* Our Provider Manager that loads providers and extensions we use.
* If we receive query and packets for unknown providers
* service-unavailable is sent according RFC 6120.
*
* @author Damian Minkov
*/
public class ProviderManagerExt
extends ProviderManager
{
/**
* Logger of this class
*/
private static final Logger logger =
Logger.getLogger(ProviderManagerExt.class);
/**
* Creates and loads the providers and extensions used by us.
*/
ProviderManagerExt()
{
load();
}
/**
* Loads the providers and extensions used by us.
*/
public void load()
{
//<!-- Private Data Storage -->
//addProvider("query", "jabber:iq:private",
// org.jivesoftware.smackx.PrivateDataManager.PrivateDataIQProvider.class);
//<!-- Time -->
//addProvider("query", "jabber:iq:time",
// org.jivesoftware.smackx.packet.Time.class);
//<!-- Roster Exchange -->
addExtProvider("x", "jabber:x:roster",
RosterExchangeProvider.class);
//<!-- Message Events -->
addExtProvider("x", "jabber:x:event",
MessageEventProvider.class);
//<!-- Chat State -->
addExtProvider(
"active",
"http://jabber.org/protocol/chatstates",
ChatStateExtension.Provider.class);
addExtProvider(
"composing",
"http://jabber.org/protocol/chatstates",
ChatStateExtension.Provider.class);
addExtProvider(
"paused",
"http://jabber.org/protocol/chatstates",
ChatStateExtension.Provider.class);
addExtProvider(
"inactive",
"http://jabber.org/protocol/chatstates",
ChatStateExtension.Provider.class);
addExtProvider(
"gone",
"http://jabber.org/protocol/chatstates",
ChatStateExtension.Provider.class);
//<!-- XHTML -->
addExtProvider("html", "http://jabber.org/protocol/xhtml-im",
XHTMLExtensionProvider.class);
//<!-- Group Chat Invitations -->
addExtProvider("x", "jabber:x:conference",
GroupChatInvitation.Provider.class);
//<!-- Service Discovery # Items -->
addProvider("query", "http://jabber.org/protocol/disco#items",
DiscoverItemsProvider.class);
//<!-- Service Discovery # Info -->
addProvider("query", "http://jabber.org/protocol/disco#info",
DiscoverInfoProvider.class);
//<!-- Data Forms-->
//addExtProvider("x", "jabber:x:data",
// org.jivesoftware.smackx.provider.DataFormProvider.class);
//<!-- MUC User -->
addExtProvider("x", "http://jabber.org/protocol/muc#user",
MUCUserProvider.class);
//<!-- MUC Admin -->
addProvider("query", "http://jabber.org/protocol/muc#admin",
MUCAdminProvider.class);
//<!-- MUC Owner -->
addProvider("query", "http://jabber.org/protocol/muc#owner",
MUCOwnerProvider.class);
//<!-- Delayed Delivery -->
addExtProvider("x", "jabber:x:delay",
DelayInformationProvider.class);
addExtProvider("delay", "urn:xmpp:delay",
DelayInfoProvider.class);
//<!-- Version -->
addProvider("query", "jabber:iq:version",
Version.class);
//<!-- VCard -->
addProvider("vCard", "vcard-temp",
VCardProvider.class);
//<!-- Offline Message Requests -->
addProvider("offline", "http://jabber.org/protocol/offline",
OfflineMessageRequest.Provider.class);
//<!-- Offline Message Indicator -->
addExtProvider("offline", "http://jabber.org/protocol/offline",
OfflineMessageInfo.Provider.class);
//<!-- Last Activity -->
addProvider("query", "jabber:iq:last",
LastActivity.class);
//<!-- User Search -->
//addProvider("query", "jabber:iq:search",
// org.jivesoftware.smackx.search.UserSearch.Provider.class);
//<!-- SharedGroupsInfo -->
//addProvider("sharedgroup", "http://www.jivesoftware.org/protocol/sharedgroup",
// org.jivesoftware.smackx.packet.SharedGroupsInfo.Provider.class);
//<!-- JEP-33: Extended Stanza Addressing -->
//addProvider("addresses", "http://jabber.org/protocol/address",
// org.jivesoftware.smackx.provider.MultipleAddressesProvider.class);
//<!-- FileTransfer -->
addProvider("si", "http://jabber.org/protocol/si",
StreamInitiationProvider.class);
addProvider("query", "http://jabber.org/protocol/bytestreams",
BytestreamsProvider.class);
addProvider("open", "http://jabber.org/protocol/ibb",
OpenIQProvider.class);
addProvider("data", "http://jabber.org/protocol/ibb",
DataPacketProvider.class);
addProvider("close", "http://jabber.org/protocol/ibb",
CloseIQProvider.class);
addExtProvider("data", "http://jabber.org/protocol/ibb",
DataPacketProvider.class);
//<!-- Privacy -->
//addProvider("query", "jabber:iq:privacy",
// org.jivesoftware.smack.provider.PrivacyProvider.class);
//<!-- Ad-Hoc Command -->
//addProvider("command", "http://jabber.org/protocol/commands",
// org.jivesoftware.smackx.provider.AdHocCommandDataProvider.class);
//addExtProvider("bad-action", "http://jabber.org/protocol/commands",
// org.jivesoftware.smackx.provider.AdHocCommandDataProvider.BadActionError.class);
//addExtProvider("malformed-actionn", "http://jabber.org/protocol/commands",
// org.jivesoftware.smackx.provider.AdHocCommandDataProvider.MalformedActionError.class);
//addExtProvider("bad-locale", "http://jabber.org/protocol/commands",
// org.jivesoftware.smackx.provider.AdHocCommandDataProvider.BadLocaleError.class);
//addExtProvider("bad-payload", "http://jabber.org/protocol/commands",
// org.jivesoftware.smackx.provider.AdHocCommandDataProvider.BadPayloadError.class);
//addExtProvider("bad-sessionid", "http://jabber.org/protocol/commands",
// org.jivesoftware.smackx.provider.AdHocCommandDataProvider.BadSessionIDError.class);
//addExtProvider("session-expired", "http://jabber.org/protocol/commands",
// org.jivesoftware.smackx.provider.AdHocCommandDataProvider.SessionExpiredError.class);
//<!-- Fastpath providers -->
//addProvider("offer", "http://jabber.org/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.packet.OfferRequestProvider.class);
//addProvider("offer-revoke", "http://jabber.org/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.packet.OfferRevokeProvider.class);
//addProvider("agent-status-request", "http://jabber.org/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.packet.AgentStatusRequest.Provider.class);
//addProvider("transcripts", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.packet.TranscriptsProvider.class);
//addProvider("transcript", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.packet.TranscriptProvider.class);
//addProvider("workgroups", "http://jabber.org/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.packet.AgentWorkgroups.Provider.class);
//addProvider("agent-info", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.packet.AgentInfo.Provider.class);
//addProvider("transcript-search", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.packet.TranscriptSearch.Provider.class);
//addProvider("occupants-info", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.packet.OccupantsInfo.Provider.class);
//addProvider("chat-settings", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.settings.ChatSettings.InternalProvider.class);
//addProvider("chat-notes", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.ext.notes.ChatNotes.Provider.class);
//addProvider("chat-sessions", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.ext.history.AgentChatHistory.InternalProvider.class);
//addProvider("offline-settings", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.settings.OfflineSettings.InternalProvider.class);
//addProvider("sound-settings", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.settings.SoundSettings.InternalProvider.class);
//addProvider("workgroup-properties", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.settings.WorkgroupProperties.InternalProvider.class);
//addProvider("search-settings", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.settings.SearchSettings.InternalProvider.class);
//addProvider("workgroup-form", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.ext.forms.WorkgroupForm.InternalProvider.class);
//addProvider("macros", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.ext.macros.Macros.InternalProvider.class);
//addProvider("chat-metadata", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.ext.history.ChatMetadata.Provider.class);
//<!--
//org.jivesoftware.smackx.workgroup.site is missing ...
//addProvider("site-user", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.site.SiteUser.Provider.class);
//addProvider("site-invite", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.site.SiteInvitation.Provider.class);
//addProvider("site-user-history", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.site.SiteUserHistory.Provider.class);
//-->
//addProvider("generic-metadata", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.settings.GenericSettings.InternalProvider.class);
//addProvider("monitor", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.packet.MonitorPacket.InternalProvider.class);
//<!-- Packet Extension Providers -->
//addExtProvider("queue-status", "http://jabber.org/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.packet.QueueUpdate.Provider.class);
//addExtProvider("workgroup", "http://jabber.org/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.packet.WorkgroupInformation.Provider.class);
//addExtProvider("metadata", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.packet.MetaDataProvider.class);
//addExtProvider("session", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.packet.SessionID.Provider.class);
//addExtProvider("user", "http://jivesoftware.com/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.packet.UserID.Provider.class);
//addExtProvider("agent-status", "http://jabber.org/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.packet.AgentStatus.Provider.class);
//addExtProvider("notify-queue-details", "http://jabber.org/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.packet.QueueDetails.Provider.class);
//addExtProvider("notify-queue", "http://jabber.org/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.packet.QueueOverview.Provider.class);
//addExtProvider("invite", "http://jabber.org/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.packet.RoomInvitation.Provider.class);
//addExtProvider("transfer", "http://jabber.org/protocol/workgroup",
// org.jivesoftware.smackx.workgroup.packet.RoomTransfer.Provider.class);
//<!-- SHIM -->
//addExtProvider("headers", "http://jabber.org/protocol/shim",
// org.jivesoftware.smackx.provider.HeadersProvider.class);
//addExtProvider("header", "http://jabber.org/protocol/shim",
// org.jivesoftware.smackx.provider.HeaderProvider.class);
//<!-- XEP-0060 pubsub -->
//addProvider("pubsub", "http://jabber.org/protocol/pubsub",
// org.jivesoftware.smackx.pubsub.provider.PubSubProvider.class);
//addExtProvider("create", "http://jabber.org/protocol/pubsub",
// org.jivesoftware.smackx.pubsub.provider.SimpleNodeProvider.class);
//addExtProvider("items", "http://jabber.org/protocol/pubsub",
// org.jivesoftware.smackx.pubsub.provider.ItemsProvider.class);
//addExtProvider("item", "http://jabber.org/protocol/pubsub",
// org.jivesoftware.smackx.pubsub.provider.ItemProvider.class);
//addExtProvider("subscriptions", "http://jabber.org/protocol/pubsub",
// org.jivesoftware.smackx.pubsub.provider.SubscriptionsProvider.class);
//addExtProvider("subscription", "http://jabber.org/protocol/pubsub",
// org.jivesoftware.smackx.pubsub.provider.SubscriptionProvider.class);
//addExtProvider("affiliations", "http://jabber.org/protocol/pubsub",
// org.jivesoftware.smackx.pubsub.provider.AffiliationsProvider.class);
//addExtProvider("affiliation", "http://jabber.org/protocol/pubsub",
// org.jivesoftware.smackx.pubsub.provider.AffiliationProvider.class);
//addExtProvider("options", "http://jabber.org/protocol/pubsub",
// org.jivesoftware.smackx.pubsub.provider.FormNodeProvider.class);
//<!-- XEP-0060 pubsub#owner -->
//addProvider("pubsub", "http://jabber.org/protocol/pubsub#owner",
// org.jivesoftware.smackx.pubsub.provider.PubSubProvider.class);
//addExtProvider("configure", "http://jabber.org/protocol/pubsub#owner",
// org.jivesoftware.smackx.pubsub.provider.FormNodeProvider.class);
//addExtProvider("default", "http://jabber.org/protocol/pubsub#owner",
// org.jivesoftware.smackx.pubsub.provider.FormNodeProvider.class);
//<!-- XEP-0060 pubsub#event -->
//addExtProvider("event", "http://jabber.org/protocol/pubsub#event",
// org.jivesoftware.smackx.pubsub.provider.EventProvider.class);
//addExtProvider("configuration", "http://jabber.org/protocol/pubsub#event",
// org.jivesoftware.smackx.pubsub.provider.ConfigEventProvider.class);
//addExtProvider("delete", "http://jabber.org/protocol/pubsub#event",
// org.jivesoftware.smackx.pubsub.provider.SimpleNodeProvider.class);
//addExtProvider("options", "http://jabber.org/protocol/pubsub#event",
// org.jivesoftware.smackx.pubsub.provider.FormNodeProvider.class);
//addExtProvider("items", "http://jabber.org/protocol/pubsub#event",
// org.jivesoftware.smackx.pubsub.provider.ItemsProvider.class);
//addExtProvider("item", "http://jabber.org/protocol/pubsub#event",
// org.jivesoftware.smackx.pubsub.provider.ItemProvider.class);
//addExtProvider("retract", "http://jabber.org/protocol/pubsub#event",
// org.jivesoftware.smackx.pubsub.provider.RetractEventProvider.class);
//addExtProvider("purge", "http://jabber.org/protocol/pubsub#event",
// org.jivesoftware.smackx.pubsub.provider.SimpleNodeProvider.class);
//<!-- Nick Exchange -->
//addExtProvider("nick", "http://jabber.org/protocol/nick",
// org.jivesoftware.smackx.packet.Nick.Provider.class);
//<!-- Attention -->
//addExtProvider("attention", "urn:xmpp:attention:0",
// org.jivesoftware.smackx.packet.AttentionExtension.Provider.class);
}
/**
* Adds an IQ provider (must be an instance of IQProvider or Class object that is an IQ)
* with the specified element name and name space. The provider will override any providers
* loaded through the classpath.
*
* @param elementName the XML element name.
* @param namespace the XML namespace.
* @param provider the IQ provider class.
*/
private void addProvider(
String elementName,
String namespace,
Class provider)
{
// Attempt to load the provider class and then create
// a new instance if it's an IQProvider. Otherwise, if it's
// an IQ class, add the class object itself, then we'll use
// reflection later to create instances of the class.
try
{
// Add the provider to the map.
if (IQProvider.class.isAssignableFrom(provider))
{
addIQProvider(elementName, namespace, provider.newInstance());
}
else if (IQ.class.isAssignableFrom(provider))
{
addIQProvider(elementName, namespace, provider);
}
}
catch (Throwable t)
{
logger.error("Error adding iq provider.", t);
}
}
/**
* Adds an extension provider with the specified element name and name space. The provider
* will override any providers loaded through the classpath. The provider must be either
* a PacketExtensionProvider instance, or a Class object of a Javabean.
*
* @param elementName the XML element name.
* @param namespace the XML namespace.
* @param provider the extension provider class.
*/
public void addExtProvider(String elementName, String namespace,
Class provider)
{
// Attempt to load the provider class and then create
// a new instance if it's a Provider. Otherwise, if it's
// a PacketExtension, add the class object itself and
// then we'll use reflection later to create instances
// of the class.
try
{
// Add the provider to the map.
if (PacketExtensionProvider.class.isAssignableFrom(
provider))
{
addExtensionProvider(
elementName, namespace, provider.newInstance());
}
else if (PacketExtension.class.isAssignableFrom(
provider))
{
addExtensionProvider(elementName, namespace, provider);
}
}
catch (Throwable t)
{
logger.error("Error adding extension provider.", t);
}
}
}

@ -1,34 +0,0 @@
/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package net.java.sip.communicator.impl.protocol.jabber.extensions.version;
import org.jivesoftware.smack.packet.*;
import org.jivesoftware.smack.provider.*;
import org.xmlpull.v1.*;
/**
* XEP-0092: Software Version.
*
* @author Damian Minkov
*/
public class VersionIQProvider
implements IQProvider
{
/**
* Creates empty Version packet to register the request.
*
* @param parser the parser.
* @return the new packet.
* @throws Exception if
*/
public IQ parseIQ(XmlPullParser parser)
throws
Exception
{
return new org.jivesoftware.smackx.packet.Version();
}
}

@ -13,7 +13,6 @@
import org.jivesoftware.smack.*;
import org.jivesoftware.smack.filter.*;
import org.jivesoftware.smack.packet.*;
import org.jivesoftware.smack.provider.*;
/**
* XEP-0092: Software Version.
@ -39,11 +38,6 @@ public VersionManager(ProtocolProviderServiceJabberImpl parentProvider)
this.parentProvider = parentProvider;
this.parentProvider.addRegistrationStateChangeListener(this);
ProviderManager.getInstance().addIQProvider(
"query",
"jabber:iq:version",
new VersionIQProvider());
}
/**

@ -18,6 +18,8 @@ Import-Package: org.osgi.framework,
org.jivesoftware.smack.filter,
org.jivesoftware.smack.sasl,
org.jivesoftware.smackx,
org.jivesoftware.smackx.bytestreams.socks5.provider,
org.jivesoftware.smackx.bytestreams.ibb.provider,
org.jivesoftware.smackx.muc,
org.jivesoftware.smackx.packet,
org.jivesoftware.smack.proxy,

Loading…
Cancel
Save