Skip to content

Commit 1da7288

Browse files
committed
Merge branch 'master' of github.com:robbiehanson/XMPPFramework
2 parents 5607a35 + d887e43 commit 1da7288

File tree

14 files changed

+684
-133
lines changed

14 files changed

+684
-133
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#import "XMPPMessage.h"
2+
@class XMPPJID;
3+
4+
@interface XMPPMessage (XEP_0280)
5+
6+
- (NSXMLElement *)receivedMessageCarbon;
7+
- (NSXMLElement *)sentMessageCarbon;
8+
9+
- (BOOL)isMessageCarbon;
10+
- (BOOL)isReceivedMessageCarbon;
11+
- (BOOL)isSentMessageCarbon;
12+
- (BOOL)isTrustedMessageCarbon;
13+
- (BOOL)isTrustedMessageCarbonForMyJID:(XMPPJID *)jid;
14+
15+
- (XMPPMessage *)messageCarbonForwardedMessage;
16+
17+
- (void)addPrivateMessageCarbons;
18+
19+
@end
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
#import "XMPPMessage+XEP_0280.h"
2+
#import "XMPPJID.h"
3+
#import "NSXMLElement+XMPP.h"
4+
#import "NSXMLElement+XEP_0297.h"
5+
6+
#if ! __has_feature(objc_arc)
7+
#warning This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
8+
#endif
9+
10+
#define XMLNS_XMPP_MESSAGE_CARBONS @"urn:xmpp:carbons:2"
11+
12+
@implementation XMPPMessage (XEP_0280)
13+
14+
- (NSXMLElement *)receivedMessageCarbon
15+
{
16+
return [self elementForName:@"received" xmlns:XMLNS_XMPP_MESSAGE_CARBONS];
17+
}
18+
19+
- (NSXMLElement *)sentMessageCarbon
20+
{
21+
return [self elementForName:@"sent" xmlns:XMLNS_XMPP_MESSAGE_CARBONS];
22+
}
23+
24+
25+
- (BOOL)isMessageCarbon
26+
{
27+
if([self isReceivedMessageCarbon] || [self isSentMessageCarbon])
28+
{
29+
return YES;
30+
}
31+
else
32+
{
33+
return NO;
34+
}
35+
}
36+
37+
- (BOOL)isReceivedMessageCarbon
38+
{
39+
if([self receivedMessageCarbon])
40+
{
41+
return YES;
42+
}
43+
else
44+
{
45+
return NO;
46+
}
47+
}
48+
49+
- (BOOL)isSentMessageCarbon
50+
{
51+
if([self sentMessageCarbon])
52+
{
53+
return YES;
54+
}
55+
else
56+
{
57+
return NO;
58+
}
59+
}
60+
61+
- (BOOL)isTrustedMessageCarbon
62+
{
63+
BOOL isTrustedMessageCarbon = NO;
64+
XMPPMessage *messageCarbonForwardedMessage = [self messageCarbonForwardedMessage];
65+
66+
if([self isSentMessageCarbon])
67+
{
68+
if([[self from] isEqualToJID:[messageCarbonForwardedMessage from] options:XMPPJIDCompareBare])
69+
{
70+
isTrustedMessageCarbon = YES;
71+
}
72+
73+
}
74+
else if([self isReceivedMessageCarbon])
75+
{
76+
if([[self from] isEqualToJID:[messageCarbonForwardedMessage to] options:XMPPJIDCompareBare])
77+
{
78+
isTrustedMessageCarbon = YES;
79+
}
80+
}
81+
82+
return isTrustedMessageCarbon;
83+
}
84+
85+
- (BOOL)isTrustedMessageCarbonForMyJID:(XMPPJID *)jid
86+
{
87+
if([self isTrustedMessageCarbon] && [[jid bareJID] isEqualToJID:self.from])
88+
{
89+
return YES;
90+
}
91+
else
92+
{
93+
return NO;
94+
}
95+
}
96+
97+
- (XMPPMessage *)messageCarbonForwardedMessage
98+
{
99+
NSXMLElement *carbon = nil;
100+
101+
if([self receivedMessageCarbon])
102+
{
103+
carbon = [self receivedMessageCarbon];
104+
}
105+
else if([self sentMessageCarbon])
106+
{
107+
carbon = [self sentMessageCarbon];
108+
}
109+
110+
return [carbon forwardedMessage];
111+
}
112+
113+
- (void)addPrivateMessageCarbons
114+
{
115+
[self addChild:[NSXMLElement elementWithName:@"private" xmlns:XMLNS_XMPP_MESSAGE_CARBONS]];
116+
}
117+
118+
@end
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#import "XMPPModule.h"
2+
@class XMPPMessage;
3+
@class XMPPIDTracker;
4+
5+
#define _XMPP_MESSAGE_CARBONS_H
6+
7+
@interface XMPPMessageCarbons : XMPPModule
8+
{
9+
BOOL autoEnableMessageCarbons;
10+
BOOL allowsUntrustedMessageCarbons;
11+
BOOL messageCarbonsEnabled;
12+
13+
XMPPIDTracker *xmppIDTracker;
14+
}
15+
16+
/**
17+
* Wether or not to automatically enable Message Carbons.
18+
*
19+
* Default YES
20+
**/
21+
@property (assign) BOOL autoEnableMessageCarbons;
22+
23+
/**
24+
* Wether Message Carbons is currently enabled or not.
25+
*
26+
* @see enableMessageCarbons
27+
* @see disableMessageCarbons
28+
**/
29+
@property (assign, getter = isMessageCarbonsEnabled,readonly) BOOL messageCarbonsEnabled;
30+
31+
/**
32+
* Whether Message Carbons are validated before calling the delegate methods.
33+
*
34+
* @see xmppMessageCarbons:willReceiveMessage:outgoing:
35+
* @see xmppMessageCarbons:didReceiveMessage:outgoing:
36+
*
37+
* A Message Carbon is Trusted if:
38+
*
39+
* - It is from the Stream's Bare JID
40+
* - Sent Forward Messages are from the Stream's JID
41+
* - Received Forward Messages are to the Stream's JID
42+
*
43+
* Default is NO
44+
**/
45+
@property (assign) BOOL allowsUntrustedMessageCarbons;
46+
47+
/**
48+
* Enable Message Carbons
49+
**/
50+
- (void)enableMessageCarbons;
51+
52+
/**
53+
* Disable Message Carbons
54+
**/
55+
- (void)disableMessageCarbons;
56+
57+
@end
58+
59+
@protocol XMPPMessageCarbonsDelegate <NSObject>
60+
61+
- (void)xmppMessageCarbons:(XMPPMessageCarbons *)xmppMessageCarbons willReceiveMessage:(XMPPMessage *)message outgoing:(BOOL)isOutgoing;
62+
63+
- (void)xmppMessageCarbons:(XMPPMessageCarbons *)xmppMessageCarbons didReceiveMessage:(XMPPMessage *)message outgoing:(BOOL)isOutgoing;
64+
65+
@end

0 commit comments

Comments
 (0)