Index: src/XMPPConnection.m ================================================================== --- src/XMPPConnection.m +++ src/XMPPConnection.m @@ -67,11 +67,10 @@ - init { self = [super init]; @try { - sock = [[OFTCPSocket alloc] init]; port = 5222; encrypted = NO; streamOpen = NO; delegates = [[XMPPMulticastDelegate alloc] init]; callbacks = [[OFMutableDictionary alloc] init]; @@ -255,10 +254,16 @@ OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; XMPPSRVEntry *candidate = nil; XMPPSRVLookup *SRVLookup = nil; OFEnumerator *enumerator; + if (sock != nil) + @throw [OFAlreadyConnectedException + exceptionWithClass: [self class]]; + + sock = [[OFTCPSocket alloc] init]; + if (server) [sock connectToHost: [self XMPP_IDNAToASCII: server] port: port]; else { @try { @@ -633,14 +638,27 @@ streamOpen = YES; } - (void)close { - if (streamOpen) { + if (streamOpen) [sock writeString: @""]; - streamOpen = NO; - } + + + [oldParser release]; + oldParser = nil; + [oldElementBuilder release]; + oldElementBuilder = nil; + [authModule release]; + authModule = nil; + [sock release]; + sock = nil; + [JID release]; + JID = nil; + streamOpen = needsSession = encrypted = NO; + supportsRosterVersioning = supportsStreamManagement = NO; + lastID = 0; } - (void)XMPP_handleStanza: (OFXMLElement*)element { if ([[element name] isEqual: @"iq"]) {