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]