1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 2 * Copyright (c) 2003-2012 by AG-Software * 3 * All Rights Reserved. * 4 * Contact information for AG-Software is available at http://www.ag-software.de * 5 * * 6 * Licence: * 7 * The agsXMPP SDK is released under a dual licence * 8 * agsXMPP can be used under either of two licences * 9 * * 10 * A commercial licence which is probably the most appropriate for commercial * 11 * corporate use and closed source projects. * 12 * * 13 * The GNU Public License (GPL) is probably most appropriate for inclusion in * 14 * other open source projects. * 15 * * 16 * See README.html for details. * 17 * * 18 * For general enquiries visit our website at: * 19 * http://www.ag-software.de * 20 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 21 22 using System; 23 using System.Text; 24 25 using agsXMPP; 26 using agsXMPP.protocol.client; 27 28 namespace agsXMPP.protocol.extensions.pubsub 29 { 30 public class PubSubManager 31 { 32 private XmppClientConnection m_connection = null; 33 34 #region << Constructors >> PubSubManager(XmppClientConnection con)35 public PubSubManager(XmppClientConnection con) 36 { 37 m_connection = con; 38 } 39 #endregion 40 41 #region << Create Instant Node >> 42 /* 43 Example 6. Client requests an instant node 44 45 <iq type="set" 46 from="pgm@jabber.org" 47 to="pubsub.jabber.org" 48 id="create2"> 49 <pubsub xmlns="http://jabber.org/protocol/pubsub"> 50 <create/> 51 </pubsub> 52 </iq> 53 */ 54 CreateInstantNode(Jid to)55 public void CreateInstantNode(Jid to) 56 { 57 CreateInstantNode(to, null, null); 58 } 59 CreateInstantNode(Jid to, Jid from)60 public void CreateInstantNode(Jid to, Jid from) 61 { 62 CreateInstantNode(to, from, null); 63 } 64 CreateInstantNode(Jid to, IqHandler cb)65 public void CreateInstantNode(Jid to, IqHandler cb) 66 { 67 CreateInstantNode(to, null, cb); 68 } 69 CreateInstantNode(Jid to, Jid from, IqHandler cb)70 public void CreateInstantNode(Jid to, Jid from, IqHandler cb) 71 { 72 PubSubIq pubsubIq = new PubSubIq(IqType.set, to); 73 74 if (from != null) 75 pubsubIq.From = from; 76 77 pubsubIq.PubSub.Create = new Create(); 78 79 if (cb == null) 80 m_connection.Send(pubsubIq); 81 else 82 m_connection.IqGrabber.SendIq(pubsubIq, cb); 83 } 84 #endregion 85 86 #region << Create Node >> 87 /* 88 Example 1. Entity requests a new node with default configuration. 89 90 <iq type="set" 91 from="pgm@jabber.org" 92 to="pubsub.jabber.org" 93 id="create1"> 94 <pubsub xmlns="http://jabber.org/protocol/pubsub"> 95 <create node="generic/pgm-mp3-player"/> 96 <configure/> 97 </pubsub> 98 </iq> 99 */ 100 /// <summary> 101 /// Create a Node with default configuration 102 /// </summary> 103 /// <param name="to"></param> 104 /// <param name="node"></param> CreateNode(Jid to, string node)105 public void CreateNode(Jid to, string node) 106 { 107 CreateNode(to, null, node, true, null); 108 } 109 CreateNode(Jid to, Jid from, string node)110 public void CreateNode(Jid to, Jid from, string node) 111 { 112 CreateNode(to, from, node, true, null); 113 } 114 115 /// <summary> 116 /// Create a Node 117 /// </summary> 118 /// <param name="to"></param> 119 /// <param name="from"></param> 120 /// <param name="defaultConfig"></param> CreateNode(Jid to, Jid from, string node, bool defaultConfig)121 public void CreateNode(Jid to, Jid from, string node, bool defaultConfig) 122 { 123 CreateNode(to, from, node, defaultConfig, null); 124 } 125 CreateNode(Jid to, string node, bool defaultConfig, IqHandler cb)126 public void CreateNode(Jid to, string node, bool defaultConfig, IqHandler cb) 127 { 128 CreateNode(to, null, node, defaultConfig, cb); 129 } 130 CreateNode(Jid to, Jid from, string node, bool defaultConfig, IqHandler cb)131 public void CreateNode(Jid to, Jid from, string node, bool defaultConfig, IqHandler cb) 132 { 133 PubSubIq pubsubIq = new PubSubIq(IqType.set, to); 134 135 if (from != null) 136 pubsubIq.From = from; 137 138 pubsubIq.PubSub.Create = new Create(node); 139 140 if (defaultConfig) 141 pubsubIq.PubSub.Configure = new Configure(); 142 143 if (cb == null) 144 m_connection.Send(pubsubIq); 145 else 146 m_connection.IqGrabber.SendIq(pubsubIq, cb); 147 } 148 #endregion 149 150 #region << CreateCollection Node >> 151 /* 152 To create a new collection node, the requesting entity MUST specify a type of "collection" when asking the service to create the node. [20] 153 154 Example 185. Entity requests a new collection node 155 156 <iq type='set' 157 from='bard@shakespeare.lit/globe' 158 to='pubsub.shakespeare.lit' 159 id='create3'> 160 <pubsub xmlns='http://jabber.org/protocol/pubsub'> 161 <create node='announcements' type='collection'/> 162 </pubsub> 163 </iq> 164 165 Example 186. Service responds with success 166 167 <iq type='result' 168 from='pubsub.shakespeare.lit' 169 to='bard@shakespeare.lit/globe' 170 id='create3'/> 171 172 */ CreateCollectionNode(Jid to, string node, bool defaultConfig)173 public void CreateCollectionNode(Jid to, string node, bool defaultConfig) 174 { 175 CreateCollectionNode(to, null, node, defaultConfig, null); 176 } 177 CreateCollectionNode(Jid to, string node, bool defaultConfig, IqHandler cb)178 public void CreateCollectionNode(Jid to, string node, bool defaultConfig, IqHandler cb) 179 { 180 CreateCollectionNode(to, null, node, defaultConfig, cb); 181 } 182 CreateCollectionNode(Jid to, Jid from, string node, bool defaultConfig)183 public void CreateCollectionNode(Jid to, Jid from, string node, bool defaultConfig) 184 { 185 CreateCollectionNode(to, from, node, defaultConfig, null); 186 } 187 CreateCollectionNode(Jid to, Jid from, string node, bool defaultConfig, IqHandler cb)188 public void CreateCollectionNode(Jid to, Jid from, string node, bool defaultConfig, IqHandler cb) 189 { 190 PubSubIq pubsubIq = new PubSubIq(IqType.set, to); 191 192 if (from != null) 193 pubsubIq.From = from; 194 195 pubsubIq.PubSub.Create = new Create(node, Type.collection); 196 197 if (defaultConfig) 198 pubsubIq.PubSub.Configure = new Configure(); 199 200 if (cb == null) 201 m_connection.Send(pubsubIq); 202 else 203 m_connection.IqGrabber.SendIq(pubsubIq, cb); 204 } 205 #endregion 206 207 #region << Delete Node >> 208 /* 209 Example 133. Owner deletes a node 210 211 <iq type='set' 212 from='hamlet@denmark.lit/elsinore' 213 to='pubsub.shakespeare.lit' 214 id='delete1'> 215 <pubsub xmlns='http://jabber.org/protocol/pubsub#owner'> 216 <delete node='blogs/princely_musings'/> 217 </pubsub> 218 </iq> 219 */ 220 DeleteNode(Jid to, string node)221 public void DeleteNode(Jid to, string node) 222 { 223 DeleteNode(to, null, node, null); 224 } 225 DeleteNode(Jid to, string node, IqHandler cb)226 public void DeleteNode(Jid to, string node, IqHandler cb) 227 { 228 DeleteNode(to, null, node, cb); 229 } 230 DeleteNode(Jid to, Jid from, string node)231 public void DeleteNode(Jid to, Jid from, string node) 232 { 233 DeleteNode(to, from, node, null); 234 } 235 DeleteNode(Jid to, Jid from, string node, IqHandler cb)236 public void DeleteNode(Jid to, Jid from, string node, IqHandler cb) 237 { 238 owner.PubSubIq pubsubIq = new owner.PubSubIq(IqType.set, to); 239 240 if (from != null) 241 pubsubIq.From = from; 242 243 pubsubIq.PubSub.Delete = new owner.Delete(node); 244 245 if (cb == null) 246 m_connection.Send(pubsubIq); 247 else 248 m_connection.IqGrabber.SendIq(pubsubIq, cb); 249 } 250 #endregion 251 252 #region << Purge Node >> 253 /* 254 Example 139. Owner purges all items from a node 255 256 <iq type='set' 257 from='hamlet@denmark.lit/elsinore' 258 to='pubsub.shakespeare.lit' 259 id='purge1'> 260 <pubsub xmlns='http://jabber.org/protocol/pubsub#owner'> 261 <purge node='blogs/princely_musings'/> 262 </pubsub> 263 </iq> 264 */ 265 PurgeNode(Jid to, string node)266 public void PurgeNode(Jid to, string node) 267 { 268 PurgeNode(to, null, node, null); 269 } 270 PurgeNode(Jid to, string node, IqHandler cb)271 public void PurgeNode(Jid to, string node, IqHandler cb) 272 { 273 PurgeNode(to, null, node, cb); 274 } 275 PurgeNode(Jid to, Jid from, string node)276 public void PurgeNode(Jid to, Jid from, string node) 277 { 278 PurgeNode(to, from, node, null); 279 } 280 PurgeNode(Jid to, Jid from, string node, IqHandler cb)281 public void PurgeNode(Jid to, Jid from, string node, IqHandler cb) 282 { 283 owner.PubSubIq pubsubIq = new owner.PubSubIq(IqType.set, to); 284 285 if (from != null) 286 pubsubIq.From = from; 287 288 pubsubIq.PubSub.Purge = new owner.Purge(node); 289 290 if (cb == null) 291 m_connection.Send(pubsubIq); 292 else 293 m_connection.IqGrabber.SendIq(pubsubIq, cb); 294 } 295 #endregion 296 297 #region << Publish to a Node >> 298 /* 299 Example 9. Entity publishes an item with an ItemID 300 301 <iq type="set" 302 from="pgm@jabber.org" 303 to="pubsub.jabber.org" 304 id="publish1"> 305 <pubsub xmlns="http://jabber.org/protocol/pubsub"> 306 <publish node="generic/pgm-mp3-player"> 307 <item id="current"> 308 <tune xmlns="http://jabber.org/protocol/tune"> 309 <artist>Ralph Vaughan Williams</artist> 310 <title>Concerto in F for Bass Tuba</title> 311 <source>Golden Brass: The Collector's Edition</source> 312 </tune> 313 </item> 314 </publish> 315 </pubsub> 316 </iq> 317 */ 318 319 /// <summary> 320 /// Publish a payload to a Node 321 /// </summary> 322 /// <param name="to"></param> 323 /// <param name="node"></param> 324 /// <param name="payload"></param> PublishItem(Jid to, string node, Item payload)325 public void PublishItem(Jid to, string node, Item payload) 326 { 327 PublishItem(to, null, node, payload, null); 328 } 329 330 /// <summary> 331 /// Publish a payload to a Node 332 /// </summary> 333 /// <param name="to"></param> 334 /// <param name="node"></param> 335 /// <param name="payload"></param> 336 /// <param name="cb"></param> PublishItem(Jid to, string node, Item payload, IqHandler cb)337 public void PublishItem(Jid to, string node, Item payload, IqHandler cb) 338 { 339 PublishItem(to, null, node, payload, cb); 340 } 341 342 /// <summary> 343 /// Publish a payload to a Node 344 /// </summary> 345 /// <param name="to"></param> 346 /// <param name="from"></param> 347 /// <param name="node"></param> 348 /// <param name="payload"></param> PublishItem(Jid to, Jid from, string node, Item payload)349 public void PublishItem(Jid to, Jid from, string node, Item payload) 350 { 351 PublishItem(to, from, node, payload, null); 352 } 353 354 /// <summary> 355 /// Publish a payload to a Node 356 /// </summary> 357 /// <param name="to"></param> 358 /// <param name="from"></param> 359 /// <param name="node"></param> 360 /// <param name="payload"></param> 361 /// <param name="cb"></param> PublishItem(Jid to, Jid from, string node, Item payload, IqHandler cb)362 public void PublishItem(Jid to, Jid from, string node, Item payload, IqHandler cb) 363 { 364 PubSubIq pubsubIq = new PubSubIq(IqType.set, to); 365 366 if (from != null) 367 pubsubIq.From = from; 368 369 Publish publish = new Publish(node); 370 publish.AddItem(payload); 371 372 pubsubIq.PubSub.Publish = publish; 373 374 if (cb == null) 375 m_connection.Send(pubsubIq); 376 else 377 m_connection.IqGrabber.SendIq(pubsubIq, cb); 378 } 379 380 #endregion 381 382 #region << Retract >> 383 /* 384 <iq type="set" 385 from="pgm@jabber.org" 386 to="pubsub.jabber.org" 387 id="deleteitem1"> 388 <pubsub xmlns="http://jabber.org/protocol/pubsub"> 389 <retract node="generic/pgm-mp3-player"> 390 <item id="current"/> 391 </retract> 392 </pubsub> 393 </iq> 394 */ 395 RetractItem(Jid to, string node, string id)396 public void RetractItem(Jid to, string node, string id) 397 { 398 RetractItem(to, null, node, id, null); 399 } 400 RetractItem(Jid to, string node, string id, IqHandler cb)401 public void RetractItem(Jid to, string node, string id, IqHandler cb) 402 { 403 RetractItem(to, null, node, id, cb); 404 } 405 406 RetractItem(Jid to, Jid from, string node, string id)407 public void RetractItem(Jid to, Jid from, string node, string id) 408 { 409 RetractItem(to, from, node, id, null); 410 } 411 RetractItem(Jid to, Jid from, string node, string id, IqHandler cb)412 public void RetractItem(Jid to, Jid from, string node, string id, IqHandler cb) 413 { 414 PubSubIq pubsubIq = new PubSubIq(IqType.set, to); 415 416 if (from != null) 417 pubsubIq.From = from; 418 419 420 pubsubIq.PubSub.Retract = new Retract(node, id); 421 422 if (cb == null) 423 m_connection.Send(pubsubIq); 424 else 425 m_connection.IqGrabber.SendIq(pubsubIq, cb); 426 } 427 #endregion 428 429 #region << Subscribe >> 430 /* 431 <iq type="set" 432 from="sub1@foo.com/home" 433 to="pubsub.jabber.org" 434 id="sub1"> 435 <pubsub xmlns="http://jabber.org/protocol/pubsub"> 436 <subscribe 437 node="generic/pgm-mp3-player" 438 jid="sub1@foo.com"/> 439 </pubsub> 440 </iq> 441 */ 442 443 /// <summary> 444 /// 445 /// </summary> 446 /// <param name="to">Jid of the Publish Subscribe Service</param> 447 /// <param name="subscribe">Jid which should be subscribed</param> 448 /// <param name="node">node to which we want to subscribe</param> Subscribe(Jid to, Jid subscribe, string node)449 public void Subscribe(Jid to, Jid subscribe, string node) 450 { 451 Subscribe(to, null, subscribe, node, null); 452 } 453 Subscribe(Jid to, Jid subscribe, string node, IqHandler cb)454 public void Subscribe(Jid to, Jid subscribe, string node, IqHandler cb) 455 { 456 Subscribe(to, null, subscribe, node, cb); 457 } 458 Subscribe(Jid to, Jid from, Jid subscribe, string node)459 public void Subscribe(Jid to, Jid from, Jid subscribe, string node) 460 { 461 Subscribe(to, from, subscribe, node, null); 462 } 463 Subscribe(Jid to, Jid from, Jid subscribe, string node, IqHandler cb)464 public void Subscribe(Jid to, Jid from, Jid subscribe, string node, IqHandler cb) 465 { 466 PubSubIq pubsubIq = new PubSubIq(IqType.set, to); 467 468 if (from != null) 469 pubsubIq.From = from; 470 471 pubsubIq.PubSub.Subscribe = new Subscribe(node, subscribe); 472 473 if (cb == null) 474 m_connection.Send(pubsubIq); 475 else 476 m_connection.IqGrabber.SendIq(pubsubIq, cb); 477 } 478 479 #endregion 480 481 #region << Unsubscribe >> 482 /* 483 Example 38. Entity unsubscribes from a node 484 485 <iq type='set' 486 from='francisco@denmark.lit/barracks' 487 to='pubsub.shakespeare.lit' 488 id='unsub1'> 489 <pubsub xmlns='http://jabber.org/protocol/pubsub'> 490 <unsubscribe 491 node='blogs/princely_musings' 492 jid='francisco@denmark.lit'/> 493 </pubsub> 494 </iq> 495 496 */ 497 498 /// <summary> 499 /// 500 /// </summary> 501 /// <param name="to">Jid of the Publish Subscribe Service</param> 502 /// <param name="subscribe">Jid which should be subscribed</param> 503 /// <param name="node">node to which we want to subscribe</param> Unsubscribe(Jid to, Jid unsubscribe, string node)504 public void Unsubscribe(Jid to, Jid unsubscribe, string node) 505 { 506 Unsubscribe(to, null, unsubscribe, node, null, null); 507 } 508 Unsubscribe(Jid to, Jid unsubscribe, string node, string subid)509 public void Unsubscribe(Jid to, Jid unsubscribe, string node, string subid) 510 { 511 Unsubscribe(to, null, unsubscribe, node, subid, null); 512 } 513 Unsubscribe(Jid to, Jid unsubscribe, string node, IqHandler cb)514 public void Unsubscribe(Jid to, Jid unsubscribe, string node, IqHandler cb) 515 { 516 Unsubscribe(to, null, unsubscribe, node, cb); 517 } 518 Unsubscribe(Jid to, Jid unsubscribe, string node, string subid, IqHandler cb)519 public void Unsubscribe(Jid to, Jid unsubscribe, string node, string subid, IqHandler cb) 520 { 521 Unsubscribe(to, null, unsubscribe, node, subid, cb); 522 } 523 Unsubscribe(Jid to, Jid from, Jid unsubscribe, string node)524 public void Unsubscribe(Jid to, Jid from, Jid unsubscribe, string node) 525 { 526 Unsubscribe(to, from, unsubscribe, node, null, null); 527 } 528 Unsubscribe(Jid to, Jid from, Jid unsubscribe, string node, string subid)529 public void Unsubscribe(Jid to, Jid from, Jid unsubscribe, string node, string subid) 530 { 531 Unsubscribe(to, from, unsubscribe, node, subid, null); 532 } 533 Unsubscribe(Jid to, Jid from, Jid unsubscribe, string node, IqHandler cb)534 public void Unsubscribe(Jid to, Jid from, Jid unsubscribe, string node, IqHandler cb) 535 { 536 Unsubscribe(to, from, unsubscribe, node, cb); 537 } 538 Unsubscribe(Jid to, Jid from, Jid unsubscribe, string node, string subid, IqHandler cb)539 public void Unsubscribe(Jid to, Jid from, Jid unsubscribe, string node, string subid, IqHandler cb) 540 { 541 PubSubIq pubsubIq = new PubSubIq(IqType.set, to); 542 543 if (from != null) 544 pubsubIq.From = from; 545 546 Unsubscribe unsub = new Unsubscribe(node, unsubscribe); 547 if (subid != null) 548 unsub.SubId = subid; 549 550 pubsubIq.PubSub.Unsubscribe = unsub; 551 552 if (cb == null) 553 m_connection.Send(pubsubIq); 554 else 555 m_connection.IqGrabber.SendIq(pubsubIq, cb); 556 } 557 558 #endregion 559 560 #region << Request Subscriptions >>> 561 /* 562 <iq type='get' 563 from='francisco@denmark.lit/barracks' 564 to='pubsub.shakespeare.lit' 565 id='subscriptions1'> 566 <pubsub xmlns='http://jabber.org/protocol/pubsub'> 567 <subscriptions/> 568 </pubsub> 569 </iq> 570 */ RequestSubscriptions(Jid to)571 public void RequestSubscriptions(Jid to) 572 { 573 RequestSubscriptions(to, null, null); 574 } 575 RequestSubscriptions(Jid to, IqHandler cb)576 public void RequestSubscriptions(Jid to, IqHandler cb) 577 { 578 RequestSubscriptions(to, null, cb); 579 } 580 RequestSubscriptions(Jid to, Jid from)581 public void RequestSubscriptions(Jid to, Jid from) 582 { 583 RequestSubscriptions(to, from, null); 584 } 585 RequestSubscriptions(Jid to, Jid from, IqHandler cb)586 public void RequestSubscriptions(Jid to, Jid from, IqHandler cb) 587 { 588 PubSubIq pubsubIq = new PubSubIq(IqType.get, to); 589 590 if (from != null) 591 pubsubIq.From = from; 592 593 pubsubIq.PubSub.Subscriptions = new Subscriptions(); 594 595 if (cb == null) 596 m_connection.Send(pubsubIq); 597 else 598 m_connection.IqGrabber.SendIq(pubsubIq, cb); 599 } 600 #endregion 601 602 #region << Owner Request Affiliations >> 603 /* 604 <iq type='get' 605 from='francisco@denmark.lit/barracks' 606 to='pubsub.shakespeare.lit' 607 id='affil1'> 608 <pubsub xmlns='http://jabber.org/protocol/pubsub'> 609 <affiliations/> 610 </pubsub> 611 </iq> 612 */ RequestAffiliations(Jid to)613 public void RequestAffiliations(Jid to) 614 { 615 RequestAffiliations(to, null, null); 616 } 617 RequestAffiliations(Jid to, IqHandler cb)618 public void RequestAffiliations(Jid to, IqHandler cb) 619 { 620 RequestAffiliations(to, null, cb); 621 } 622 RequestAffiliations(Jid to, Jid from)623 public void RequestAffiliations(Jid to, Jid from) 624 { 625 RequestAffiliations(to, from, null); 626 } 627 RequestAffiliations(Jid to, Jid from, IqHandler cb)628 public void RequestAffiliations(Jid to, Jid from, IqHandler cb) 629 { 630 PubSubIq pubsubIq = new PubSubIq(IqType.get, to); 631 632 if (from != null) 633 pubsubIq.From = from; 634 635 pubsubIq.PubSub.Affiliations = new Affiliations(); 636 637 if (cb == null) 638 m_connection.Send(pubsubIq); 639 else 640 m_connection.IqGrabber.SendIq(pubsubIq, cb); 641 } 642 #endregion 643 644 #region << Request Subscription Options >> 645 /* 646 <iq type='get' 647 from='francisco@denmark.lit/barracks' 648 to='pubsub.shakespeare.lit' 649 id='options1'> 650 <pubsub xmlns='http://jabber.org/protocol/pubsub'> 651 <options node='blogs/princely_musings' jid='francisco@denmark.lit'/> 652 </pubsub> 653 </iq> 654 */ 655 RequestSubscriptionOptions(Jid to, Jid subscribe, string node)656 public void RequestSubscriptionOptions(Jid to, Jid subscribe, string node) 657 { 658 RequestSubscriptionOptions(to, null, subscribe, node, null); 659 } 660 RequestSubscriptionOptions(Jid to, Jid subscribe, string node, IqHandler cb)661 public void RequestSubscriptionOptions(Jid to, Jid subscribe, string node, IqHandler cb) 662 { 663 RequestSubscriptionOptions(to, null, subscribe, node, cb); 664 } 665 RequestSubscriptionOptions(Jid to, Jid from, Jid subscribe, string node)666 public void RequestSubscriptionOptions(Jid to, Jid from, Jid subscribe, string node) 667 { 668 RequestSubscriptionOptions(to, from, subscribe, node, null); 669 } 670 RequestSubscriptionOptions(Jid to, Jid from, Jid subscribe, string node, IqHandler cb)671 public void RequestSubscriptionOptions(Jid to, Jid from, Jid subscribe, string node, IqHandler cb) 672 { 673 PubSubIq pubsubIq = new PubSubIq(IqType.get, to); 674 675 if (from != null) 676 pubsubIq.From = from; 677 678 pubsubIq.PubSub.Options = new Options(subscribe, node); 679 680 if (cb == null) 681 m_connection.Send(pubsubIq); 682 else 683 m_connection.IqGrabber.SendIq(pubsubIq, cb); 684 } 685 #endregion 686 687 #region << Request All Subscribers >> 688 /* 689 <iq type='get' 690 from='hamlet@denmark.lit/elsinore' 691 to='pubsub.shakespeare.lit' 692 id='subman1'> 693 <pubsub xmlns='http://jabber.org/protocol/pubsub#owner'> 694 <subscribers node='blogs/princely_musings'/> 695 </pubsub> 696 </iq> 697 */ 698 OwnerRequestSubscribers(Jid to, string node)699 public void OwnerRequestSubscribers(Jid to, string node) 700 { 701 OwnerRequestSubscribers(to, null, node, null); 702 } 703 OwnerRequestSubscribers(Jid to, string node, IqHandler cb)704 public void OwnerRequestSubscribers(Jid to, string node, IqHandler cb) 705 { 706 OwnerRequestSubscribers(to, null, node, cb); 707 } 708 OwnerRequestSubscribers(Jid to, Jid from, string node)709 public void OwnerRequestSubscribers(Jid to, Jid from, string node) 710 { 711 OwnerRequestSubscribers(to, from, node, null); 712 } 713 OwnerRequestSubscribers(Jid to, Jid from, string node, IqHandler cb)714 public void OwnerRequestSubscribers(Jid to, Jid from, string node, IqHandler cb) 715 { 716 owner.PubSubIq pubsubIq = new owner.PubSubIq(IqType.get, to); 717 718 if (from != null) 719 pubsubIq.From = from; 720 721 pubsubIq.PubSub.Subscribers = new agsXMPP.protocol.extensions.pubsub.owner.Subscribers(node); 722 723 if (cb == null) 724 m_connection.Send(pubsubIq); 725 else 726 m_connection.IqGrabber.SendIq(pubsubIq, cb); 727 } 728 #endregion 729 730 #region << Modifying single Subscription State >> 731 /* 732 Upon receiving the subscribers list, the node owner MAY modify subscription states. 733 The owner MUST send only modified subscription states (i.e., a "delta"), not the complete list. 734 (Note: If the 'subscription' attribute is not specified in a modification request, then the value 735 MUST NOT be changed.) 736 737 Example 163. Owner modifies subscriptions 738 739 <iq type='set' 740 from='hamlet@denmark.lit/elsinore' 741 to='pubsub.shakespeare.lit' 742 id='subman3'> 743 <pubsub xmlns='http://jabber.org/protocol/pubsub#owner'> 744 <subscribers node='blogs/princely_musings'> 745 <subscriber jid='polonius@denmark.lit' subscription='none'/> 746 </subscribers> 747 </pubsub> 748 </iq> 749 750 */ 751 OwnerModifySubscriptionState(Jid to, string node, Jid subscriber, SubscriptionState state)752 public void OwnerModifySubscriptionState(Jid to, string node, Jid subscriber, SubscriptionState state) 753 { 754 OwnerModifySubscriptionState(to, null, node, subscriber, state, null); 755 } 756 OwnerModifySubscriptionState(Jid to, string node, Jid subscriber, SubscriptionState state, IqHandler cb)757 public void OwnerModifySubscriptionState(Jid to, string node, Jid subscriber, SubscriptionState state, IqHandler cb) 758 { 759 OwnerModifySubscriptionState(to, null, node, subscriber, state, cb); 760 } 761 OwnerModifySubscriptionState(Jid to, Jid from, string node, Jid subscriber, SubscriptionState state)762 public void OwnerModifySubscriptionState(Jid to, Jid from, string node, Jid subscriber, SubscriptionState state) 763 { 764 OwnerModifySubscriptionState(to, from, node, subscriber, state, null); 765 } 766 OwnerModifySubscriptionState(Jid to, Jid from, string node, Jid subscriber, SubscriptionState state, IqHandler cb)767 public void OwnerModifySubscriptionState(Jid to, Jid from, string node, Jid subscriber, SubscriptionState state, IqHandler cb) 768 { 769 owner.PubSubIq pubsubIq = new owner.PubSubIq(IqType.set, to); 770 771 if (from != null) 772 pubsubIq.From = from; 773 774 owner.Subscribers subs = new owner.Subscribers(node); 775 subs.AddSubscriber(new owner.Subscriber(subscriber, state)); 776 777 pubsubIq.PubSub.Subscribers = subs; 778 779 if (cb == null) 780 m_connection.Send(pubsubIq); 781 else 782 m_connection.IqGrabber.SendIq(pubsubIq, cb); 783 } 784 #endregion 785 786 #region << Modifying multiple Subscription States >> 787 /* 788 <iq type='set' 789 from='hamlet@denmark.lit/elsinore' 790 to='pubsub.shakespeare.lit' 791 id='subman3'> 792 <pubsub xmlns='http://jabber.org/protocol/pubsub#owner'> 793 <subscribers node='blogs/princely_musings'> 794 <subscriber jid='polonius@denmark.lit' subscription='none'/> 795 <subscriber jid='bard@shakespeare.lit' subscription='subscribed'/> 796 </subscribers> 797 </pubsub> 798 </iq> 799 */ 800 OwnerModifySubscriptionStates(Jid to, string node, owner.Subscriber[] subscribers)801 public void OwnerModifySubscriptionStates(Jid to, string node, owner.Subscriber[] subscribers) 802 { 803 OwnerModifySubscriptionStates(to, null, node, subscribers, null); 804 } 805 OwnerModifySubscriptionStates(Jid to, string node, owner.Subscriber[] subscribers, IqHandler cb)806 public void OwnerModifySubscriptionStates(Jid to, string node, owner.Subscriber[] subscribers, IqHandler cb) 807 { 808 OwnerModifySubscriptionStates(to, null, node, subscribers, cb); 809 } 810 OwnerModifySubscriptionStates(Jid to, Jid from, string node, owner.Subscriber[] subscribers)811 public void OwnerModifySubscriptionStates(Jid to, Jid from, string node, owner.Subscriber[] subscribers) 812 { 813 OwnerModifySubscriptionStates(to, from, node, subscribers, null); 814 } 815 OwnerModifySubscriptionStates(Jid to, Jid from, string node, owner.Subscriber[] subscribers, IqHandler cb)816 public void OwnerModifySubscriptionStates(Jid to, Jid from, string node, owner.Subscriber[] subscribers, IqHandler cb) 817 { 818 owner.PubSubIq pubsubIq = new owner.PubSubIq(IqType.set, to); 819 820 if (from != null) 821 pubsubIq.From = from; 822 823 owner.Subscribers subs = new owner.Subscribers(node); 824 subs.AddSubscribers(subscribers); 825 826 pubsubIq.PubSub.Subscribers = subs; 827 828 if (cb == null) 829 m_connection.Send(pubsubIq); 830 else 831 m_connection.IqGrabber.SendIq(pubsubIq, cb); 832 } 833 #endregion 834 835 #region << Owner Request Affiliations >> 836 /* 837 Example 168. Owner requests all affiliated entities 838 839 <iq type='get' 840 from='hamlet@denmark.lit/elsinore' 841 to='pubsub.shakespeare.lit' 842 id='ent1'> 843 <pubsub xmlns='http://jabber.org/protocol/pubsub#owner'> 844 <affiliates node='blogs/princely_musings'/> 845 </pubsub> 846 </iq> 847 */ 848 OwnerRequestAffiliations(Jid to, string node)849 public void OwnerRequestAffiliations(Jid to, string node) 850 { 851 OwnerRequestAffiliations(to, null, node, null); 852 } 853 OwnerRequestAffiliations(Jid to, string node, IqHandler cb)854 public void OwnerRequestAffiliations(Jid to, string node, IqHandler cb) 855 { 856 OwnerRequestAffiliations(to, null, node, cb); 857 } 858 OwnerRequestAffiliations(Jid to, Jid from, string node)859 public void OwnerRequestAffiliations(Jid to, Jid from, string node) 860 { 861 OwnerRequestAffiliations(to, from, node, null); 862 } 863 OwnerRequestAffiliations(Jid to, Jid from, string node, IqHandler cb)864 public void OwnerRequestAffiliations(Jid to, Jid from, string node, IqHandler cb) 865 { 866 owner.PubSubIq pubsubIq = new owner.PubSubIq(IqType.get, to); 867 868 if (from != null) 869 pubsubIq.From = from; 870 871 pubsubIq.PubSub.Affiliates = new owner.Affiliates(node); 872 873 if (cb == null) 874 m_connection.Send(pubsubIq); 875 else 876 m_connection.IqGrabber.SendIq(pubsubIq, cb); 877 } 878 #endregion 879 880 #region << Owner Set/Modify Affiliation >> 881 /* 882 Owner modifies a single affiliation 883 884 <iq type='set' 885 from='hamlet@denmark.lit/elsinore' 886 to='pubsub.shakespeare.lit' 887 id='ent2'> 888 <pubsub xmlns='http://jabber.org/protocol/pubsub#owner'> 889 <affiliates node='blogs/princely_musings'/> 890 <affiliate jid='hamlet@denmark.lit' affiliation='owner'/> 891 </affiliates> 892 </pubsub> 893 </iq> 894 895 */ 896 OwnerModifyAffiliation(Jid to, string node, Jid affiliate, AffiliationType affiliation)897 public void OwnerModifyAffiliation(Jid to, string node, Jid affiliate, AffiliationType affiliation) 898 { 899 OwnerModifyAffiliation(to, null, node, affiliate, affiliation, null); 900 } 901 OwnerModifyAffiliation(Jid to, string node, Jid affiliate, AffiliationType affiliation, IqHandler cb)902 public void OwnerModifyAffiliation(Jid to, string node, Jid affiliate, AffiliationType affiliation, IqHandler cb) 903 { 904 OwnerModifyAffiliation(to, null, node, affiliate, affiliation, cb); 905 } 906 OwnerModifyAffiliation(Jid to, Jid from, string node, Jid affiliate, AffiliationType affiliation)907 public void OwnerModifyAffiliation(Jid to, Jid from, string node, Jid affiliate, AffiliationType affiliation) 908 { 909 OwnerModifyAffiliation(to, from, node, affiliate, affiliation, null); 910 } 911 OwnerModifyAffiliation(Jid to, Jid from, string node, Jid affiliate, AffiliationType affiliation, IqHandler cb)912 public void OwnerModifyAffiliation(Jid to, Jid from, string node, Jid affiliate, AffiliationType affiliation, IqHandler cb) 913 { 914 owner.PubSubIq pubsubIq = new owner.PubSubIq(IqType.set, to); 915 916 if (from != null) 917 pubsubIq.From = from; 918 919 owner.Affiliates aff = new owner.Affiliates(node); 920 aff.AddAffiliate(new owner.Affiliate(affiliate, affiliation)); 921 922 pubsubIq.PubSub.Affiliates = aff; 923 924 if (cb == null) 925 m_connection.Send(pubsubIq); 926 else 927 m_connection.IqGrabber.SendIq(pubsubIq, cb); 928 } 929 #endregion 930 931 #region << Owner Modify Affiliations >> 932 /* 933 Owner modifies a single affiliation 934 935 <iq type='set' 936 from='hamlet@denmark.lit/elsinore' 937 to='pubsub.shakespeare.lit' 938 id='ent2'> 939 <pubsub xmlns='http://jabber.org/protocol/pubsub#owner'> 940 <affiliates node='blogs/princely_musings'/> 941 <affiliate jid='hamlet@denmark.lit' affiliation='owner'/> 942 <affiliate jid='polonius@denmark.lit' affiliation='none'/> 943 <affiliate jid='bard@shakespeare.lit' affiliation='publisher'/> 944 </affiliates> 945 </pubsub> 946 </iq> 947 */ 948 OwnerModifyAffiliations(Jid to, string node, owner.Affiliate[] affiliates)949 public void OwnerModifyAffiliations(Jid to, string node, owner.Affiliate[] affiliates) 950 { 951 OwnerModifyAffiliations(to, null, node, affiliates, null); 952 } 953 OwnerModifyAffiliations(Jid to, string node, owner.Affiliate[] affiliates, IqHandler cb)954 public void OwnerModifyAffiliations(Jid to, string node, owner.Affiliate[] affiliates, IqHandler cb) 955 { 956 OwnerModifyAffiliations(to, null, node, affiliates, cb); 957 } 958 OwnerModifyAffiliations(Jid to, Jid from, string node, owner.Affiliate[] affiliates)959 public void OwnerModifyAffiliations(Jid to, Jid from, string node, owner.Affiliate[] affiliates) 960 { 961 OwnerModifyAffiliations(to, from, node, affiliates, null); 962 } 963 OwnerModifyAffiliations(Jid to, Jid from, string node, owner.Affiliate[] affiliates, IqHandler cb)964 public void OwnerModifyAffiliations(Jid to, Jid from, string node, owner.Affiliate[] affiliates, IqHandler cb) 965 { 966 owner.PubSubIq pubsubIq = new owner.PubSubIq(IqType.set, to); 967 968 if (from != null) 969 pubsubIq.From = from; 970 971 owner.Affiliates affs = new owner.Affiliates(node); 972 affs.AddAffiliates(affiliates); 973 974 pubsubIq.PubSub.Affiliates = affs; 975 976 if (cb == null) 977 m_connection.Send(pubsubIq); 978 else 979 m_connection.IqGrabber.SendIq(pubsubIq, cb); 980 } 981 #endregion 982 } 983 984 }