@@ -145,27 +145,11 @@ Handle<Value> Messenger::Subscribe(const Arguments& args) {
145
145
REQUIRE_ARGUMENT_OBJECT (1 , bag);
146
146
OPTIONAL_ARGUMENT_FUNCTION (2 , callback);
147
147
148
-
149
- pn_data_t *filter_key = NULL , *filter_value = NULL ;
148
+ pn_data_t *filter_value = NULL ;
150
149
if (bag->Has (String::New (" sourceFilter" ))) {
151
150
Handle <Value> obj = bag->Get (String::New (" sourceFilter" ));
152
151
if (obj->IsArray ()) {
153
- Handle <Array> filter = Handle <v8::Array>::Cast (obj);
154
- if (filter->Length () == 2 ) {
155
- filter_key = ProtonData::ParseJSData (filter->Get (0 ));
156
- filter_value = ProtonData::ParseJSData (filter->Get (1 ));
157
-
158
- if (!filter_key || !filter_value) {
159
- // TODO -- error;
160
- if (filter_key) {
161
- pn_data_free (filter_key);
162
- }
163
- if (filter_value) {
164
- pn_data_free (filter_value);
165
- }
166
- filter_key = filter_value = NULL ;
167
- }
168
- }
152
+ filter_value = ProtonData::ParseJSData (obj);
169
153
} else {
170
154
// TODO -- unsupported
171
155
}
@@ -175,7 +159,7 @@ Handle<Value> Messenger::Subscribe(const Arguments& args) {
175
159
int subIdx = msgr->AddSubscription (new Subscription (*addr, callback));
176
160
NODE_CPROTON_MUTEX_UNLOCK (&msgr->mutex );
177
161
Local<Function> var;
178
- SubscribeBaton *baton = new SubscribeBaton (msgr, subIdx, filter_key, filter_value, var);
162
+ SubscribeBaton *baton = new SubscribeBaton (msgr, subIdx, filter_value, var);
179
163
Work_BeginSubscribe (baton);
180
164
181
165
return args.This ();
@@ -198,8 +182,8 @@ void Messenger::Work_Subscribe(uv_work_t* req) {
198
182
pn_subscription_t * sub = pn_messenger_subscribe (baton->msgr ->receiver , subscription->address .c_str ());
199
183
if (sub) {
200
184
baton->msgr ->SetSubscriptionHandle (baton->subscriptionIndex , sub);
201
- if (baton->filter_key && baton-> filter_value ) {
202
- baton->msgr ->SetSourceFilter (subscription->address , baton->filter_key , baton-> filter_value );
185
+ if (baton->filter_value ) {
186
+ baton->msgr ->SetSourceFilter (subscription->address , baton->filter_value );
203
187
}
204
188
} else {
205
189
// TODO -- error getting subscription?
@@ -255,14 +239,13 @@ Handle<Value> Messenger::AddSourceFilter(const Arguments& args) {
255
239
Messenger* msgr = ObjectWrap::Unwrap<Messenger>(args.This ());
256
240
257
241
REQUIRE_ARGUMENT_STRING (0 , addr);
258
- REQUIRE_ARGUMENT_ARRAY (1 , filter);
242
+ REQUIRE_ARGUMENT_OBJECT (1 , filter);
259
243
OPTIONAL_ARGUMENT_FUNCTION (2 , callback);
260
244
261
- pn_data_t *key = ProtonData::ParseJSData (filter->Get (0 ));
262
- pn_data_t *value = ProtonData::ParseJSData (filter->Get (1 ));
245
+ pn_data_t *value = ProtonData::ParseJSData (filter);
263
246
264
- if (key && value) {
265
- AddSourceFilterBaton *baton = new AddSourceFilterBaton (msgr, callback, *addr, key, value);
247
+ if (value) {
248
+ AddSourceFilterBaton *baton = new AddSourceFilterBaton (msgr, callback, *addr, value);
266
249
Work_BeginAddSourceFilter (baton);
267
250
}
268
251
@@ -277,26 +260,16 @@ void Messenger::Work_BeginAddSourceFilter(Baton* baton) {
277
260
278
261
}
279
262
280
- void Messenger::SetSourceFilter (std::string & address, pn_data_t *key, pn_data_t *value ) {
281
- pn_link_t * link = pn_messenger_get_link ( this -> receiver , address. c_str (), 0 );
282
- if ( link ) {
283
- pn_terminus_t *sr = pn_link_source (link );
284
- if (sr) {
285
- pn_data_t *filter = pn_terminus_filter (sr);
286
- if ( filter) {
287
- if (pn_data_size ( filter) == 0 ) {
288
- pn_data_put_map (filter);
263
+ void Messenger::SetSourceFilter (std::string & address, pn_data_t *filter_value ) {
264
+ if (filter_value) {
265
+ pn_link_t * link = pn_messenger_get_link ( this -> receiver , address. c_str (), 0 );
266
+ if (link ) {
267
+ pn_terminus_t *sr = pn_link_source ( link );
268
+ if (sr) {
269
+ pn_data_t * filter = pn_terminus_filter (sr);
270
+ if (filter) {
271
+ pn_data_copy (filter, filter_value );
289
272
}
290
- pn_data_next (filter);
291
- pn_data_enter (filter);
292
- while (pn_data_next (filter)) {
293
- // go to the end of the map
294
- ;
295
- }
296
- pn_data_append (filter, key);
297
- pn_data_append (filter, value);
298
- pn_data_exit (filter);
299
- pn_data_rewind (filter);
300
273
}
301
274
}
302
275
}
@@ -308,7 +281,7 @@ void Messenger::Work_AddSourceFilter(uv_work_t* req) {
308
281
309
282
// TODO - add check for subscribed to address
310
283
NODE_CPROTON_MUTEX_LOCK (&baton->msgr ->mutex )
311
- baton->msgr ->SetSourceFilter (baton->address , baton->filter_key , baton-> filter_value );
284
+ baton->msgr ->SetSourceFilter (baton->address , baton->filter_value );
312
285
NODE_CPROTON_MUTEX_UNLOCK (&baton->msgr ->mutex )
313
286
314
287
}
@@ -583,6 +556,15 @@ pn_message_t* Messenger::JSToMessage(Local<Object> obj) {
583
556
pn_data_put_string (msg_body, pn_bytes (body.length (), str_body));
584
557
585
558
}
559
+
560
+ if (obj->Has (String::New (" annotations" ))) {
561
+
562
+ Handle <Value> annotations (obj->Get (String::New (" annotations" )));
563
+
564
+ pn_data_t *anndata = ProtonData::ParseJSData (annotations);
565
+ pn_data_t *msgann = pn_message_annotations (message);
566
+ pn_data_copy (msgann, anndata);
567
+ }
586
568
587
569
return (message);
588
570
}
@@ -657,6 +639,40 @@ int Messenger::MessengerSettleOutgoing(pn_tracker_t tracker){
657
639
return result;
658
640
}
659
641
642
+ int Messenger::MessengerSend (){
643
+ int result;
644
+ NODE_CPROTON_MUTEX_LOCK (&mutex)
645
+ result = pn_messenger_send (messenger, 0 );
646
+ NODE_CPROTON_MUTEX_UNLOCK (&mutex)
647
+ return result;
648
+ }
649
+
650
+ int Messenger::MessengerWork (){
651
+ int result;
652
+ NODE_CPROTON_MUTEX_LOCK (&mutex)
653
+ result = pn_messenger_work (messenger, 0 );
654
+ NODE_CPROTON_MUTEX_UNLOCK (&mutex)
655
+ return result;
656
+ }
657
+
658
+ pn_tracker_t Messenger::MessengerGetOutgoingTracker (void ){
659
+ pn_tracker_t result;
660
+ NODE_CPROTON_MUTEX_LOCK (&mutex)
661
+ result = pn_messenger_outgoing_tracker (messenger);
662
+ NODE_CPROTON_MUTEX_UNLOCK (&mutex)
663
+ return result;
664
+ }
665
+
666
+ int Messenger::MessengerPut (pn_message_t *msg){
667
+ int result;
668
+ NODE_CPROTON_MUTEX_LOCK (&mutex)
669
+ result = pn_messenger_put (messenger, msg);
670
+ NODE_CPROTON_MUTEX_UNLOCK (&mutex)
671
+ return result;
672
+ }
673
+
674
+
675
+
660
676
std::string Messenger::MapErrorToString (int err) {
661
677
switch (err) {
662
678
case MSG_ERROR_NONE:
0 commit comments