const Value MessageSelectorEnv::specialValue(const string& id) const { Value v; // TODO: Just use a simple if chain for now - improve this later if ( id=="delivery_mode" ) { v = msg.getEncoding().isPersistent() ? PERSISTENT : NON_PERSISTENT; } else if ( id=="redelivered" ) { v = msg.getDeliveryCount()>0 ? true : false; } else if ( id=="priority" ) { v = int64_t(msg.getPriority()); } else if ( id=="correlation_id" ) { MessageId cId = msg.getEncoding().getCorrelationId(); if (cId) { returnedStrings.push_back(new string(cId.str())); v = returnedStrings[returnedStrings.size()-1]; } } else if ( id=="message_id" ) { MessageId mId = msg.getEncoding().getMessageId(); if (mId) { returnedStrings.push_back(new string(mId.str())); v = returnedStrings[returnedStrings.size()-1]; } } else if ( id=="to" ) { v = EMPTY; // Hard to get this correct for both 1.0 and 0-10 } else if ( id=="reply_to" ) { v = EMPTY; // Hard to get this correct for both 1.0 and 0-10 } else if ( id=="absolute_expiry_time" ) { qpid::sys::AbsTime expiry = msg.getExpiration(); // Java property has value of 0 for no expiry v = (expiry==qpid::sys::FAR_FUTURE) ? 0 : qpid::sys::Duration(qpid::sys::AbsTime::Epoch(), expiry) / qpid::sys::TIME_MSEC; } else if ( id=="creation_time" ) { // Use the time put on queue (if it is enabled) as 0-10 has no standard way to get message // creation time and we're not paying attention to the 1.0 creation time yet. v = int64_t(msg.getTimestamp() * 1000); // getTimestamp() returns time in seconds we need milliseconds } else if ( id=="jms_type" ) { // Currently we can't distinguish between an empty JMSType and no JMSType // We'll assume for now that setting an empty JMSType doesn't make a lot of sense const string jmsType = msg.getAnnotation("jms-type").asString(); if ( !jmsType.empty() ) { returnedStrings.push_back(new string(jmsType)); v = returnedStrings[returnedStrings.size()-1]; } } else { v = Value(); } return v; }