Skip to content

Commit f27adcc

Browse files
committed
Bug fix: XMPPStream wasn't invoking delegate method xmppStream:didFailToSendX: in all situations.
1 parent ce0d0b9 commit f27adcc

File tree

2 files changed

+32
-40
lines changed

2 files changed

+32
-40
lines changed

Core/XMPPStream.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -980,6 +980,7 @@ extern const NSTimeInterval XMPPStreamTimeoutNone;
980980

981981
/**
982982
* These methods are called after failing to send the respective XML elements over the stream.
983+
* This occurs when the stream gets disconnected before the element can get sent out.
983984
**/
984985
- (void)xmppStream:(XMPPStream *)sender didFailToSendIQ:(XMPPIQ *)iq error:(NSError *)error;
985986
- (void)xmppStream:(XMPPStream *)sender didFailToSendMessage:(XMPPMessage *)message error:(NSError *)error;

Core/XMPPStream.m

Lines changed: 31 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -141,26 +141,6 @@ @interface XMPPStream ()
141141
id userTag;
142142
}
143143

144-
- (void)setIsSecure:(BOOL)flag;
145-
- (void)setIsAuthenticated:(BOOL)flag;
146-
- (void)continueSendIQ:(XMPPIQ *)iq withTag:(long)tag;
147-
- (void)continueSendMessage:(XMPPMessage *)message withTag:(long)tag;
148-
- (void)continueSendPresence:(XMPPPresence *)presence withTag:(long)tag;
149-
- (void)startNegotiation;
150-
- (void)sendOpeningNegotiation;
151-
- (void)continueStartTLS:(NSMutableDictionary *)settings;
152-
- (void)continueHandleBinding:(NSString *)alternativeResource;
153-
- (void)setupKeepAliveTimer;
154-
- (void)keepAlive;
155-
156-
- (void)startConnectTimeout:(NSTimeInterval)timeout;
157-
- (void)endConnectTimeout;
158-
- (void)doConnectTimeout;
159-
160-
- (void)continueReceiveMessage:(XMPPMessage *)message;
161-
- (void)continueReceiveIQ:(XMPPIQ *)iq;
162-
- (void)continueReceivePresence:(XMPPPresence *)presence;
163-
164144
@end
165145

166146
@interface XMPPElementReceipt (PrivateAPI)
@@ -2255,6 +2235,8 @@ - (void)sendIQ:(XMPPIQ *)iq withTag:(long)tag
22552235

22562236
if (state == STATE_XMPP_CONNECTED) {
22572237
[self continueSendIQ:modifiedIQ withTag:tag];
2238+
} else {
2239+
[self failToSendIQ:modifiedIQ];
22582240
}
22592241
}});
22602242
}
@@ -2326,6 +2308,9 @@ - (void)sendMessage:(XMPPMessage *)message withTag:(long)tag
23262308
if (state == STATE_XMPP_CONNECTED) {
23272309
[self continueSendMessage:modifiedMessage withTag:tag];
23282310
}
2311+
else {
2312+
[self failToSendMessage:modifiedMessage];
2313+
}
23292314
}});
23302315
}
23312316
}});
@@ -2395,6 +2380,8 @@ - (void)sendPresence:(XMPPPresence *)presence withTag:(long)tag
23952380

23962381
if (state == STATE_XMPP_CONNECTED) {
23972382
[self continueSendPresence:modifiedPresence withTag:tag];
2383+
} else {
2384+
[self failToSendPresence:modifiedPresence];
23982385
}
23992386
}});
24002387
}
@@ -2547,11 +2534,7 @@ - (void)sendElement:(NSXMLElement *)element
25472534
}
25482535
else
25492536
{
2550-
NSError *error = [NSError errorWithDomain:XMPPStreamErrorDomain
2551-
code:XMPPStreamInvalidState
2552-
userInfo:nil];
2553-
2554-
[self failToSendElement:element error:error];
2537+
[self failToSendElement:element];
25552538
}
25562539
}};
25572540

@@ -2591,11 +2574,7 @@ - (void)sendElement:(NSXMLElement *)element andGetReceipt:(XMPPElementReceipt **
25912574
}
25922575
else
25932576
{
2594-
NSError *error = [NSError errorWithDomain:XMPPStreamErrorDomain
2595-
code:XMPPStreamInvalidState
2596-
userInfo:nil];
2597-
2598-
[self failToSendElement:element error:error];
2577+
[self failToSendElement:element];
25992578
}
26002579
}};
26012580

@@ -2608,59 +2587,71 @@ - (void)sendElement:(NSXMLElement *)element andGetReceipt:(XMPPElementReceipt **
26082587
}
26092588
}
26102589

2611-
- (void)failToSendElement:(NSXMLElement *)element error:(NSError *)error
2590+
- (void)failToSendElement:(NSXMLElement *)element
26122591
{
26132592
NSAssert(dispatch_get_specific(xmppQueueTag), @"Invoked on incorrect queue");
26142593

26152594
if ([element isKindOfClass:[XMPPIQ class]])
26162595
{
2617-
[self failToSendIQ:(XMPPIQ *)element error:error];
2596+
[self failToSendIQ:(XMPPIQ *)element];
26182597
}
26192598
else if ([element isKindOfClass:[XMPPMessage class]])
26202599
{
2621-
[self failToSendMessage:(XMPPMessage *)element error:error];
2600+
[self failToSendMessage:(XMPPMessage *)element];
26222601
}
26232602
else if ([element isKindOfClass:[XMPPPresence class]])
26242603
{
2625-
[self failToSendPresence:(XMPPPresence *)element error:error];
2604+
[self failToSendPresence:(XMPPPresence *)element];
26262605
}
26272606
else
26282607
{
26292608
NSString *elementName = [element name];
26302609

26312610
if ([elementName isEqualToString:@"iq"])
26322611
{
2633-
[self failToSendIQ:[XMPPIQ iqFromElement:element] error:error];
2612+
[self failToSendIQ:[XMPPIQ iqFromElement:element]];
26342613
}
26352614
else if ([elementName isEqualToString:@"message"])
26362615
{
2637-
[self failToSendMessage:[XMPPMessage messageFromElement:element] error:error];
2616+
[self failToSendMessage:[XMPPMessage messageFromElement:element]];
26382617
}
26392618
else if ([elementName isEqualToString:@"presence"])
26402619
{
2641-
[self failToSendPresence:[XMPPPresence presenceFromElement:element] error:error];
2620+
[self failToSendPresence:[XMPPPresence presenceFromElement:element]];
26422621
}
26432622
}
26442623
}
26452624

2646-
- (void)failToSendIQ:(XMPPIQ *)iq error:(NSError *)error
2625+
- (void)failToSendIQ:(XMPPIQ *)iq
26472626
{
26482627
NSAssert(dispatch_get_specific(xmppQueueTag), @"Invoked on incorrect queue");
26492628

2629+
NSError *error = [NSError errorWithDomain:XMPPStreamErrorDomain
2630+
code:XMPPStreamInvalidState
2631+
userInfo:nil];
2632+
26502633
[multicastDelegate xmppStream:self didFailToSendIQ:iq error:error];
26512634
}
26522635

2653-
- (void)failToSendMessage:(XMPPMessage *)message error:(NSError *)error
2636+
- (void)failToSendMessage:(XMPPMessage *)message
26542637
{
26552638
NSAssert(dispatch_get_specific(xmppQueueTag), @"Invoked on incorrect queue");
26562639

2640+
NSError *error = [NSError errorWithDomain:XMPPStreamErrorDomain
2641+
code:XMPPStreamInvalidState
2642+
userInfo:nil];
2643+
26572644
[multicastDelegate xmppStream:self didFailToSendMessage:message error:error];
26582645
}
26592646

2660-
- (void)failToSendPresence:(XMPPPresence *)presence error:(NSError *)error
2647+
- (void)failToSendPresence:(XMPPPresence *)presence
26612648
{
26622649
NSAssert(dispatch_get_specific(xmppQueueTag), @"Invoked on incorrect queue");
26632650

2651+
NSError *error = [NSError errorWithDomain:XMPPStreamErrorDomain
2652+
code:XMPPStreamInvalidState
2653+
userInfo:nil];
2654+
26642655
[multicastDelegate xmppStream:self didFailToSendPresence:presence error:error];
26652656
}
26662657

0 commit comments

Comments
 (0)