// Called in deliverFrameQueue thread ConnectionPtr Cluster::getConnection(const EventFrame& e, Lock&) { ConnectionId id = e.connectionId; ConnectionMap::iterator i = connections.find(id); if (i != connections.end()) return i->second; ConnectionPtr cp; // If the frame is an announcement for a new connection, add it. const ClusterConnectionAnnounceBody *announce = castAnnounce(e.frame.getBody()); if (e.frame.getBody() && e.frame.getMethod() && announce) { if (id.getMember() == self) { // Announces one of my own cp = localConnections.getErase(id); assert(cp); } else { // New remote connection, create a shadow. qpid::sys::SecuritySettings secSettings; if (announce) { secSettings.ssf = announce->getSsf(); secSettings.authid = announce->getAuthid(); secSettings.nodict = announce->getNodict(); } cp = new Connection(*this, shadowOut, announce->getManagementId(), id, secSettings); } connections.insert(ConnectionMap::value_type(id, cp)); } return cp; }
void ConnectionIdMarshallerTest::test() { ConnectionIdMarshaller myMarshaller; ConnectionId myCommand; ConnectionId* myCommand2; CPPUNIT_ASSERT( myMarshaller.getDataStructureType() == myCommand.getDataStructureType() ); myCommand2 = dynamic_cast<ConnectionId*>( myMarshaller.createObject() ); CPPUNIT_ASSERT( myCommand2 != NULL ); delete myCommand2; }
void ConnectionIdMarshallerTest::testTightMarshal() { ConnectionIdMarshaller marshaller; Properties props; OpenWireFormat openWireFormat( props ); // Configure for this test. openWireFormat.setVersion( 6 ); openWireFormat.setTightEncodingEnabled( true ); ConnectionId outCommand; ConnectionId inCommand; try { // Marshal the dataStructure to a byte array. ByteArrayOutputStream baos; DataOutputStream dataOut( &baos ); // Phase 1 - count the size int size = 1; BooleanStream bs; size += marshaller.tightMarshal1( &openWireFormat, &outCommand, &bs ); size += bs.marshalledSize(); // Phase 2 - marshal dataOut.writeByte( outCommand.getDataStructureType() ); bs.marshal( &dataOut ); marshaller.tightMarshal2( &openWireFormat, &outCommand, &dataOut, &bs ); // Now read it back in and make sure it's all right. std::pair<const unsigned char*, int> array = baos.toByteArray(); ByteArrayInputStream bais( array.first, array.second, true ); DataInputStream dataIn( &bais ); unsigned char dataType = dataIn.readByte(); CPPUNIT_ASSERT( dataType == outCommand.getDataStructureType() ); bs.clear(); bs.unmarshal( &dataIn ); marshaller.tightUnmarshal( &openWireFormat, &inCommand, &dataIn, &bs ); CPPUNIT_ASSERT( inCommand.equals( &outCommand ) == true ); } catch( ActiveMQException& e ) { e.printStackTrace(); CPPUNIT_ASSERT( false ); } catch( ... ) { CPPUNIT_ASSERT( false ); } }
void ConnectionIdMarshallerTest::testLooseMarshal() { ConnectionIdMarshaller marshaller; Properties props; OpenWireFormat openWireFormat( props ); // Configure for this test. openWireFormat.setVersion( 9 ); openWireFormat.setTightEncodingEnabled( false ); ConnectionId outCommand; ConnectionId inCommand; try { // Marshal the dataStructure to a byte array. ByteArrayOutputStream baos; DataOutputStream dataOut( &baos ); dataOut.writeByte( outCommand.getDataStructureType() ); marshaller.looseMarshal( &openWireFormat, &outCommand, &dataOut ); // Now read it back in and make sure it's all right. std::pair<const unsigned char*, int> array = baos.toByteArray(); ByteArrayInputStream bais( array.first, array.second, true ); DataInputStream dataIn( &bais ); unsigned char dataType = dataIn.readByte(); CPPUNIT_ASSERT( dataType == outCommand.getDataStructureType() ); marshaller.looseUnmarshal( &openWireFormat, &inCommand, &dataIn ); CPPUNIT_ASSERT( inCommand.equals( (DataStructure*) &outCommand ) == true ); } catch( ActiveMQException& e ) { e.printStackTrace(); CPPUNIT_ASSERT( false ); } catch( ... ) { CPPUNIT_ASSERT( false ); } }