Overview
Comment: | Add -close method |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
d876014b9d6c172e99b8a8dd62de596f |
User & Date: | florob@babelmonkeys.de on 2012-01-25 12:18:57 |
Other Links: | manifest | tags |
Context
2012-01-25
| ||
14:05 | Generate stanza errors check-in: 65623177b5 user: florob@babelmonkeys.de tags: trunk | |
12:18 | Add -close method check-in: d876014b9d user: florob@babelmonkeys.de tags: trunk | |
00:12 | Better handling of remote stream close check-in: 24bab36d7d user: florob@babelmonkeys.de tags: trunk | |
Changes
Modified src/XMPPConnection.h from [bd5ddff49e] to [a494cf7439].
︙ | ︙ | |||
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | OFString *username, *password, *server, *resource; OFString *domain, *domainToASCII; XMPPJID *JID; uint16_t port; id <XMPPConnectionDelegate, OFObject> delegate; OFMutableDictionary *callbacks; XMPPAuthenticator *authModule; BOOL needsSession; BOOL encryptionRequired, encrypted; unsigned int lastID; XMPPRoster *roster; } #ifdef OF_HAVE_PROPERTIES @property (copy) OFString *username, *password, *server, *domain, *resource; @property (copy, readonly) XMPPJID *JID; @property (assign) uint16_t port; @property (assign) id <XMPPConnectionDelegate> delegate; @property (readonly, retain) XMPPRoster *roster; @property (readonly, retain, getter=socket) OFTCPSocket *sock; @property (assign) BOOL encryptionRequired; @property (readonly) BOOL encrypted; #endif /** * \return A new autoreleased XMPPConnection */ + connection; /** * Connects to the XMPP service. */ - (void)connect; /** * Checks the certificate presented by the server. * Throws SSLInvalidCertificateException on failure. */ - (void)checkCertificate; /** | > > > > > > > | 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | OFString *username, *password, *server, *resource; OFString *domain, *domainToASCII; XMPPJID *JID; uint16_t port; id <XMPPConnectionDelegate, OFObject> delegate; OFMutableDictionary *callbacks; XMPPAuthenticator *authModule; BOOL streamOpen; BOOL needsSession; BOOL encryptionRequired, encrypted; unsigned int lastID; XMPPRoster *roster; } #ifdef OF_HAVE_PROPERTIES @property (copy) OFString *username, *password, *server, *domain, *resource; @property (copy, readonly) XMPPJID *JID; @property (assign) uint16_t port; @property (assign) id <XMPPConnectionDelegate> delegate; @property (readonly, retain) XMPPRoster *roster; @property (readonly, retain, getter=socket) OFTCPSocket *sock; @property (assign) BOOL encryptionRequired; @property (readonly) BOOL encrypted; @property (readonly) BOOL streamOpen; #endif /** * \return A new autoreleased XMPPConnection */ + connection; /** * Connects to the XMPP service. */ - (void)connect; /** * Closes the stream to the XMPP service */ - (void)close; /** * Checks the certificate presented by the server. * Throws SSLInvalidCertificateException on failure. */ - (void)checkCertificate; /** |
︙ | ︙ |
Modified src/XMPPConnection.m from [edad7fe838] to [aeb34f13f6].
︙ | ︙ | |||
61 62 63 64 65 66 67 68 69 70 71 72 73 74 | { self = [super init]; @try { sock = [[OFTCPSocket alloc] init]; port = 5222; encrypted = NO; callbacks = [[OFMutableDictionary alloc] init]; } @catch (id e) { [self release]; @throw e; } return self; | > | 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | { self = [super init]; @try { sock = [[OFTCPSocket alloc] init]; port = 5222; encrypted = NO; streamOpen = NO; callbacks = [[OFMutableDictionary alloc] init]; } @catch (id e) { [self release]; @throw e; } return self; |
︙ | ︙ | |||
311 312 313 314 315 316 317 318 319 320 321 322 323 324 | encryptionRequired = required; } - (BOOL)encrypted { return encrypted; } - (void)checkCertificate { X509Certificate *cert; OFDictionary *SANs; BOOL serviceSpecific = NO; | > > > > > | 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 | encryptionRequired = required; } - (BOOL)encrypted { return encrypted; } - (BOOL)streamOpen { return streamOpen; } - (void)checkCertificate { X509Certificate *cert; OFDictionary *SANs; BOOL serviceSpecific = NO; |
︙ | ︙ | |||
457 458 459 460 461 462 463 | - (void)elementBuilder: (OFXMLElementBuilder *)builder didNotExpectCloseTag: (OFString *)name withPrefix: (OFString *)prefix namespace: (OFString *)ns { if (![name isEqual: @"stream"] || ![prefix isEqual: @"stream"] || | | > > | 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 | - (void)elementBuilder: (OFXMLElementBuilder *)builder didNotExpectCloseTag: (OFString *)name withPrefix: (OFString *)prefix namespace: (OFString *)ns { if (![name isEqual: @"stream"] || ![prefix isEqual: @"stream"] || ![ns isEqual: XMPP_NS_STREAM]) @throw [OFMalformedXMLException exceptionWithClass: [builder class] parser: nil]; else { [self close]; } } - (void)XMPP_startStream { /* Make sure we don't get any old events */ [parser setDelegate: nil]; |
︙ | ︙ | |||
492 493 494 495 496 497 498 499 500 501 502 503 504 505 | roster = [[XMPPRoster alloc] initWithConnection: self]; [sock writeFormat: @"<?xml version='1.0'?>\n" @"<stream:stream to='%@' " @"xmlns='" XMPP_NS_CLIENT @"' " @"xmlns:stream='" XMPP_NS_STREAM @"' " @"version='1.0'>", domain]; } - (void)XMPP_handleStanza: (OFXMLElement*)element { if ([[element name] isEqual: @"iq"]) { [self XMPP_handleIQ: [XMPPIQ stanzaWithElement: element]]; return; | > > > > > > > > > | 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 | roster = [[XMPPRoster alloc] initWithConnection: self]; [sock writeFormat: @"<?xml version='1.0'?>\n" @"<stream:stream to='%@' " @"xmlns='" XMPP_NS_CLIENT @"' " @"xmlns:stream='" XMPP_NS_STREAM @"' " @"version='1.0'>", domain]; streamOpen = YES; } - (void)close { if (streamOpen) { [sock writeString: @"</stream:stream>"]; streamOpen = NO; } } - (void)XMPP_handleStanza: (OFXMLElement*)element { if ([[element name] isEqual: @"iq"]) { [self XMPP_handleIQ: [XMPPIQ stanzaWithElement: element]]; return; |
︙ | ︙ | |||
526 527 528 529 530 531 532 | if ([[element name] isEqual: @"features"]) { [self XMPP_handleFeatures: element]; return; } if ([[element name] isEqual: @"error"]) { OFString *condition, *reason; | | < | | 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 | if ([[element name] isEqual: @"features"]) { [self XMPP_handleFeatures: element]; return; } if ([[element name] isEqual: @"error"]) { OFString *condition, *reason; [self close]; [sock close]; // Remote has already closed his stream if ([element elementForName: @"bad-format" namespace: XMPP_NS_XMPP_STREAM]) condition = @"bad-format"; else if ([element elementForName: @"bad-namespace-prefix" namespace: XMPP_NS_XMPP_STREAM]) condition = @"bad-namespace-prefix"; |
︙ | ︙ |