Author: rhs
Date: Thu May  8 15:18:29 2014
New Revision: 1593307

URL: http://svn.apache.org/r1593307
Log:
PROTON-573: removed hardcoded address limits in messenger

Modified:
    qpid/proton/trunk/proton-c/src/messenger/messenger.c
    qpid/proton/trunk/proton-c/src/messenger/store.c

Modified: qpid/proton/trunk/proton-c/src/messenger/messenger.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/messenger/messenger.c?rev=1593307&r1=1593306&r2=1593307&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/messenger/messenger.c (original)
+++ qpid/proton/trunk/proton-c/src/messenger/messenger.c Thu May  8 15:18:29 
2014
@@ -100,6 +100,7 @@ struct pn_messenger_t {
   pn_tracker_t incoming_tracker;
   pn_string_t *original;
   pn_string_t *rewritten;
+  pn_string_t *domain;
   bool worked;
   int connection_error;
 };
@@ -635,6 +636,7 @@ pn_messenger_t *pn_messenger(const char 
     m->address.text = pn_string(NULL);
     m->original = pn_string(NULL);
     m->rewritten = pn_string(NULL);
+    m->domain = pn_string(NULL);
     m->connection_error = 0;
   }
 
@@ -775,6 +777,7 @@ static void pni_reclaim(pn_messenger_t *
 void pn_messenger_free(pn_messenger_t *messenger)
 {
   if (messenger) {
+    pn_free(messenger->domain);
     pn_free(messenger->rewritten);
     pn_free(messenger->original);
     pn_free(messenger->address.text);
@@ -1429,12 +1432,7 @@ pn_connection_t *pn_messenger_resolve(pn
 {
   assert(messenger);
   messenger->connection_error = 0;
-  char domain[1024];
-  if (address && sizeof(domain) < strlen(address) + 1) {
-    pn_error_format(messenger->error, PN_ERR,
-                    "address exceeded maximum length: %s", address);
-    return NULL;
-  }
+  pn_string_t *domain = messenger->domain;
 
   int err = pni_route(messenger, address);
   if (err) return NULL;
@@ -1459,16 +1457,14 @@ pn_connection_t *pn_messenger_resolve(pn
     return NULL;
   }
 
-  domain[0] = '\0';
+  pn_string_set(domain, "");
 
   if (user) {
-    strcat(domain, user);
-    strcat(domain, "@");
+    pn_string_addf(domain, "%s@", user);
   }
-  strcat(domain, host);
+  pn_string_addf(domain, "%s", host);
   if (port) {
-    strcat(domain, ":");
-    strcat(domain, port);
+    pn_string_addf(domain, ":%s", port);
   }
 
   for (size_t i = 0; i < pn_list_size(messenger->connections); i++) {
@@ -1480,7 +1476,7 @@ pn_connection_t *pn_messenger_resolve(pn
       return connection;
     }
     const char *container = pn_connection_remote_container(connection);
-    if (pn_streq(container, domain)) {
+    if (pn_streq(container, pn_string_get(domain))) {
       return connection;
     }
   }

Modified: qpid/proton/trunk/proton-c/src/messenger/store.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/messenger/store.c?rev=1593307&r1=1593306&r2=1593307&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/messenger/store.c (original)
+++ qpid/proton/trunk/proton-c/src/messenger/store.c Thu May  8 15:18:29 2014
@@ -46,7 +46,7 @@ struct pni_store_t {
 
 struct pni_stream_t {
   pni_store_t *store;
-  char address[1024]; // XXX
+  pn_string_t *address;
   pni_entry_t *stream_head;
   pni_entry_t *stream_tail;
   pni_stream_t *next;
@@ -104,13 +104,11 @@ pni_stream_t *pni_stream(pni_store_t *st
 {
   assert(store);
   assert(address);
-  // XXX
-  if (strlen(address) >= 1024) return NULL;
 
   pni_stream_t *prev = NULL;
   pni_stream_t *stream = store->streams;
   while (stream) {
-    if (!strcmp(stream->address, address)) {
+    if (!strcmp(pn_string_get(stream->address), address)) {
       return stream;
     }
     prev = stream;
@@ -120,7 +118,7 @@ pni_stream_t *pni_stream(pni_store_t *st
   if (create) {
     stream = (pni_stream_t *) malloc(sizeof(pni_stream_t));
     stream->store = store;
-    strcpy(stream->address, address);
+    stream->address = pn_string(address);
     stream->stream_head = NULL;
     stream->stream_tail = NULL;
     stream->next = NULL;
@@ -169,6 +167,8 @@ void pni_stream_free(pni_stream_t *strea
   while ((entry = LL_HEAD(stream, stream))) {
     pni_entry_free(entry);
   }
+  pn_free(stream->address);
+  stream->address = NULL;
   free(stream);
 }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to