@@ -138,6 +138,7 @@ @interface XMPPStream ()
138
138
XMPPIDTracker *idTracker;
139
139
140
140
NSMutableArray *receipts;
141
+ NSCountedSet *customElementNames;
141
142
142
143
id userTag;
143
144
}
@@ -2473,6 +2474,11 @@ - (void)continueSendElement:(NSXMLElement *)element withTag:(long)tag
2473
2474
[asyncSocket writeData: outgoingData
2474
2475
withTimeout: TIMEOUT_XMPP_WRITE
2475
2476
tag: tag];
2477
+
2478
+ if ([customElementNames countForObject: [element name ]])
2479
+ {
2480
+ [multicastDelegate xmppStream: self didSendCustomElement: element];
2481
+ }
2476
2482
}
2477
2483
2478
2484
/* *
@@ -3027,6 +3033,10 @@ - (void)injectElement:(NSXMLElement *)element
3027
3033
{
3028
3034
[self receivePresence: [XMPPPresence presenceFromElement: element]];
3029
3035
}
3036
+ else if ([customElementNames countForObject: elementName])
3037
+ {
3038
+ [multicastDelegate xmppStream: self didReceiveCustomElement: element];
3039
+ }
3030
3040
else
3031
3041
{
3032
3042
[multicastDelegate xmppStream: self didReceiveError: element];
@@ -3040,6 +3050,41 @@ - (void)injectElement:(NSXMLElement *)element
3040
3050
dispatch_async (xmppQueue, block);
3041
3051
}
3042
3052
3053
+ - (void )registerCustomElementNames : (NSSet *)names
3054
+ {
3055
+ dispatch_block_t block = ^{
3056
+
3057
+ if (customElementNames == nil )
3058
+ customElementNames = [[NSCountedSet alloc ] init ];
3059
+
3060
+ for (NSString *name in names)
3061
+ {
3062
+ [customElementNames addObject: name];
3063
+ }
3064
+ };
3065
+
3066
+ if (dispatch_get_specific (xmppQueueTag))
3067
+ block ();
3068
+ else
3069
+ dispatch_sync (xmppQueue, block);
3070
+ }
3071
+
3072
+ - (void )unregisterCustomElementNames : (NSSet *)names
3073
+ {
3074
+ dispatch_block_t block = ^{
3075
+
3076
+ for (NSString *name in names)
3077
+ {
3078
+ [customElementNames removeObject: name];
3079
+ }
3080
+ };
3081
+
3082
+ if (dispatch_get_specific (xmppQueueTag))
3083
+ block ();
3084
+ else
3085
+ dispatch_sync (xmppQueue, block);
3086
+ }
3087
+
3043
3088
// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3044
3089
#pragma mark Stream Negotiation
3045
3090
// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -4235,6 +4280,10 @@ - (void)xmppParser:(XMPPParser *)sender didReadElement:(NSXMLElement *)element
4235
4280
{
4236
4281
[multicastDelegate xmppStream: self didReceiveP2PFeatures: element];
4237
4282
}
4283
+ else if ([customElementNames countForObject: elementName])
4284
+ {
4285
+ [multicastDelegate xmppStream: self didReceiveCustomElement: element];
4286
+ }
4238
4287
else
4239
4288
{
4240
4289
[multicastDelegate xmppStream: self didReceiveError: element];
0 commit comments