private void GotSubscribed(object sender, IQ iq, object state)
{
if (iq.Type != IQType.result)
{
FireError(Op.SUBSCRIBE, "Subscription failed", iq);
return;
}
PubSub ps = iq.Query as PubSub;
if (ps == null)
{
FireError(Op.SUBSCRIBE, "Invalid protocol", iq);
return;
}
PubSubSubscriptionType subType;
PubSubSubscription sub = ps["subscription", URI.PUBSUB] as PubSubSubscription;
if (sub != null)
subType = sub.Type;
else
{
XmlElement ent = ps["entity", URI.PUBSUB];
if (ent == null)
{
FireError(Op.SUBSCRIBE, "Invalid protocol", iq);
return;
}
string s = ent.GetAttribute("subscription");
if (s == "")
subType = PubSubSubscriptionType.NONE_SPECIFIED;
else
subType = (PubSubSubscriptionType)Enum.Parse(typeof(PubSubSubscriptionType), s);
}
switch (subType)
{
case PubSubSubscriptionType.NONE_SPECIFIED:
case PubSubSubscriptionType.subscribed:
break;
case PubSubSubscriptionType.pending:
FireError(Op.SUBSCRIBE, "Subscription pending authorization", iq);
return;
case PubSubSubscriptionType.unconfigured:
FireError(Op.SUBSCRIBE, "Subscription configuration required. Not implemented yet.", iq);
return;
}
this[Op.SUBSCRIBE] = STATE.Running;
GetItemsIfPending();
}