Author: gsim
Date: Mon Mar 31 10:20:08 2008
New Revision: 643067

URL: http://svn.apache.org/viewvc?rev=643067&view=rev
Log:
Updated xml fragment to reflect correct types for connection.start.mechanisms, 
connection.start.locales and connection.open.capabilities
Updated connection handler in line with above changes
Added Str16Value to FieldValues
Allow Array instances of different types to be created


Modified:
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.h
    incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Array.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Array.h
    incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldValue.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldValue.h
    incubator/qpid/trunk/qpid/cpp/xml/extra.xml

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp?rev=643067&r1=643066&r2=643067&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp 
(original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp Mon Mar 
31 10:20:08 2008
@@ -66,8 +66,12 @@
 
 ConnectionHandler::ConnectionHandler(Connection& connection)  : handler(new 
Handler(connection)) {
     FieldTable properties;
-    string mechanisms(PLAIN);
-    string locales(en_US);
+    Array mechanisms(0x95);
+    boost::shared_ptr<FieldValue> m(new Str16Value(PLAIN));
+    mechanisms.add(m);
+    Array locales(0x95);
+    boost::shared_ptr<FieldValue> l(new Str16Value(en_US));
+    locales.add(l);
     handler->serverMode = true;
     handler->client.start(properties, mechanisms, locales);
 }
@@ -105,7 +109,7 @@
 }
         
 void ConnectionHandler::Handler::open(const string& /*virtualHost*/,
-    const string& /*capabilities*/, bool /*insist*/)
+                                      const framing::Array& /*capabilities*/, 
bool /*insist*/)
 {
     string knownhosts;
     client.openOk(knownhosts);

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.h
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.h?rev=643067&r1=643066&r2=643067&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.h Mon Mar 
31 10:20:08 2008
@@ -56,7 +56,7 @@
         void tuneOk(uint16_t channelMax, uint32_t frameMax, uint16_t 
heartbeat); 
         void heartbeat() {}
         void open(const std::string& virtualHost,
-                  const std::string& capabilities, bool insist); 
+                  const framing::Array& capabilities, bool insist); 
         void close(uint16_t replyCode, const std::string& replyText,
                    uint16_t classId, uint16_t methodId); 
         void closeOk(); 

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Array.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Array.cpp?rev=643067&r1=643066&r2=643067&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Array.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Array.cpp Mon Mar 31 
10:20:08 2008
@@ -30,6 +30,8 @@
 
 Array::Array() : typeOctet(0xF0/*void*/) {}
 
+Array::Array(uint8_t type) : typeOctet(type) {}
+
 Array::Array(const std::vector<std::string>& in)
 {
     typeOctet = 0xA4;
@@ -39,6 +41,7 @@
     }
 } 
 
+
 uint32_t Array::size() const {
     //note: size is only included when used as a 'top level' type
     uint32_t len(4/*size*/ + 1/*type*/ + 4/*count*/);
@@ -107,6 +110,14 @@
     }
 
     return true;
+}
+
+void Array::add(ValuePtr value)
+{
+    if (typeOctet != value->getType()) {
+        throw SyntaxErrorException(QPID_MSG("Wrong type of value, expected " 
<< typeOctet));
+    }
+    values.push_back(value);
 }
 
 

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Array.h
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Array.h?rev=643067&r1=643066&r2=643067&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Array.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Array.h Mon Mar 31 10:20:08 
2008
@@ -47,8 +47,11 @@
     bool operator==(const Array& other) const;
 
     Array();
-    //only long string arrays can currently be created (any type can be 
decoded)
+    Array(uint8_t type);
+    //creates a longstr array
     Array(const std::vector<std::string>& in);
+
+    void add(ValuePtr value);
 
     template <class T>
     void collect(std::vector<T>& out)

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldValue.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldValue.cpp?rev=643067&r1=643066&r2=643067&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldValue.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldValue.cpp Mon Mar 31 
10:20:08 2008
@@ -25,6 +25,11 @@
 namespace qpid {
 namespace framing {
 
+uint8_t FieldValue::getType()
+{
+    return typeOctet;
+}
+
 void FieldValue::setType(uint8_t type)
 {
     typeOctet = type;
@@ -105,6 +110,14 @@
             reinterpret_cast<const uint8_t*>(v.data()+v.size())))
 {
 }
+
+Str16Value::Str16Value(const std::string& v) :
+    FieldValue(
+        0x95,
+        new VariableWidthValue<2>(
+            reinterpret_cast<const uint8_t*>(v.data()),
+            reinterpret_cast<const uint8_t*>(v.data()+v.size())))
+{}
 
 IntegerValue::IntegerValue(int v) :
     FieldValue(0x21, new FixedWidthValue<4>(v))

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldValue.h
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldValue.h?rev=643067&r1=643066&r2=643067&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldValue.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/framing/FieldValue.h Mon Mar 31 
10:20:08 2008
@@ -79,6 +79,7 @@
     FieldValue(): data(0) {};
     // Default assignment operator is fine
     void setType(uint8_t type);
+    uint8_t getType();
     Data& getData() { return *data; }
     uint32_t size() const { return 1 + data->size(); };
     bool empty() const { return data.get() == 0; } 
@@ -204,6 +205,11 @@
 class StringValue : public FieldValue {
   public:
     StringValue(const std::string& v);
+};
+
+class Str16Value : public FieldValue {
+  public:
+    Str16Value(const std::string& v);
 };
 
 /*

Modified: incubator/qpid/trunk/qpid/cpp/xml/extra.xml
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/xml/extra.xml?rev=643067&r1=643066&r2=643067&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/xml/extra.xml (original)
+++ incubator/qpid/trunk/qpid/cpp/xml/extra.xml Mon Mar 31 10:20:08 2008
@@ -87,11 +87,11 @@
             <doc>blah, blah</doc>
       </field>
 
-      <field name="mechanisms" domain="longstr" label="available security 
mechanisms">
+      <field name="mechanisms" domain="array" label="available security 
mechanisms">
             <doc>blah, blah</doc>
       </field>
 
-      <field name="locales" domain="longstr" label="available message locales">
+      <field name="locales" domain="array" label="available message locales">
       </field>
 
 </method>
@@ -316,7 +316,7 @@
         <assert check="regexp" value="^[a-zA-Z0-9/-_]+$" />
       </field>
 
-      <field name="capabilities" domain="shortstr" label="required 
capabilities">
+      <field name="capabilities" domain="array" label="required capabilities">
         <doc>
           The client can specify zero or more capability names, delimited by 
spaces. The server can
           use this string to how to process the client's connection request.


Reply via email to