Author: rhs
Date: Sat May 25 08:23:02 2013
New Revision: 1486299
URL: http://svn.apache.org/r1486299
Log:
replaced ad-hoc lists with proper data structures; improved protocol traces
Modified:
qpid/proton/trunk/proton-c/src/codec/codec.c
qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.c
qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.h
qpid/proton/trunk/proton-c/src/engine/engine-internal.h
qpid/proton/trunk/proton-c/src/engine/engine.c
qpid/proton/trunk/proton-c/src/protocol.h.py
qpid/proton/trunk/proton-c/src/sasl/sasl.c
Modified: qpid/proton/trunk/proton-c/src/codec/codec.c
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/codec/codec.c?rev=1486299&r1=1486298&r2=1486299&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/codec/codec.c (original)
+++ qpid/proton/trunk/proton-c/src/codec/codec.c Sat May 25 08:23:02 2013
@@ -30,6 +30,8 @@
#include <stdlib.h>
#include <ctype.h>
#include "encodings.h"
+#define DEFINE_FIELDS
+#include "protocol.h"
#include "../platform_fmt.h"
#include "../util.h"
@@ -322,29 +324,39 @@ size_t pn_atoms_ltrim(pn_atoms_t *atoms,
return size;
}
-int pn_format_atoms_one(pn_bytes_t *bytes, pn_atoms_t *atoms, int level)
+int pn_format_atoms_one(pn_bytes_t *bytes, pn_atoms_t *atoms, int level,
pn_fields_t *fields)
{
if (!atoms->size) return PN_UNDERFLOW;
pn_iatom_t *atom = atoms->start;
pn_atoms_ltrim(atoms, 1);
int err, count;
- bool list;
+ pn_fields_t *f;
switch (atom->type) {
case PN_DESCRIPTOR:
if ((err = pn_bytes_format(bytes, "@"))) return err;
- if ((err = pn_format_atoms_one(bytes, atoms, level + 1))) return err;
+ if (atoms->start->type == PN_ULONG) {
+ f = &FIELDS[atoms->start->u.as_ulong];
+ } else {
+ f = NULL;
+ }
+ if (f && f->name) {
+ if ((err = pn_bytes_format(bytes, "%s", f->name))) return err;
+ pn_atoms_ltrim(atoms, 1);
+ } else {
+ if ((err = pn_format_atoms_one(bytes, atoms, level + 1, NULL))) return
err;
+ }
if ((err = pn_bytes_format(bytes, " "))) return err;
- if ((err = pn_format_atoms_one(bytes, atoms, level + 1))) return err;
+ if ((err = pn_format_atoms_one(bytes, atoms, level + 1, f))) return err;
return 0;
case PN_ARRAY:
count = atom->u.count;
if ((err = pn_bytes_format(bytes, "@"))) return err;
- if ((err = pn_format_atoms_one(bytes, atoms, level + 1))) return err;
+ if ((err = pn_format_atoms_one(bytes, atoms, level + 1, NULL))) return err;
if ((err = pn_bytes_format(bytes, "["))) return err;
for (int i = 0; i < count; i++)
{
- if ((err = pn_format_atoms_one(bytes, atoms, level + 1))) return err;
+ if ((err = pn_format_atoms_one(bytes, atoms, level + 1, NULL))) return
err;
if (i < count - 1) {
if ((err = pn_bytes_format(bytes, ", "))) return err;
}
@@ -352,28 +364,52 @@ int pn_format_atoms_one(pn_bytes_t *byte
if ((err = pn_bytes_format(bytes, "]"))) return err;
return 0;
case PN_LIST:
+ {
+ count = atom->u.count;
+ if ((err = pn_bytes_format(bytes, "["))) return err;
+ bool comma = false;
+ for (int i = 0; i < count; i++)
+ {
+ const char *name = NULL;
+ bool render = true;
+ if (fields) {
+ name = fields->fields[i];
+ if (atoms->start->type == PN_NULL) {
+ pn_atoms_ltrim(atoms, 1);
+ render = false;
+ }
+ }
+
+ if (render) {
+ if (comma) {
+ if ((err = pn_bytes_format(bytes, ", "))) return err;
+ } else {
+ comma = true;
+ }
+ if (name) {
+ if ((err = pn_bytes_format(bytes, "%s=", name))) return err;
+ }
+ if ((err = pn_format_atoms_one(bytes, atoms, level + 1, NULL)))
return err;
+ }
+ }
+ }
+ if ((err = pn_bytes_format(bytes, "]"))) return err;
+ return 0;
case PN_MAP:
count = atom->u.count;
- list = atom->type == PN_LIST;
- if ((err = pn_bytes_format(bytes, "%s", list ? "[" : "{"))) return err;
+ if ((err = pn_bytes_format(bytes, "{"))) return err;
for (int i = 0; i < count; i++)
{
- if ((err = pn_format_atoms_one(bytes, atoms, level + 1))) return err;
- if (list) {
+ if ((err = pn_format_atoms_one(bytes, atoms, level + 1, NULL))) return
err;
+ if (i % 2) {
if (i < count - 1) {
if ((err = pn_bytes_format(bytes, ", "))) return err;
}
} else {
- if (i % 2) {
- if (i < count - 1) {
- if ((err = pn_bytes_format(bytes, ", "))) return err;
- }
- } else {
- if ((err = pn_bytes_format(bytes, "="))) return err;
- }
+ if ((err = pn_bytes_format(bytes, "="))) return err;
}
}
- if ((err = pn_bytes_format(bytes, "%s", list ? "]" : "}"))) return err;
+ if ((err = pn_bytes_format(bytes, "}"))) return err;
return 0;
default:
return pn_format_atom(bytes, *atom);
@@ -387,7 +423,7 @@ ssize_t pn_format_atoms(char *buf, size_
while (copy.size)
{
- int e = pn_format_atoms_one(&bytes, ©, 0);
+ int e = pn_format_atoms_one(&bytes, ©, 0, NULL);
if (e) return e;
if (copy.size) {
e = pn_bytes_format(&bytes, " ");
Modified: qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.c
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.c?rev=1486299&r1=1486298&r2=1486299&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.c (original)
+++ qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.c Sat May 25 08:23:02
2013
@@ -72,11 +72,10 @@ void pn_dispatcher_free(pn_dispatcher_t
}
}
-void pn_dispatcher_action(pn_dispatcher_t *disp, uint8_t code, const char
*name,
+void pn_dispatcher_action(pn_dispatcher_t *disp, uint8_t code,
pn_action_t *action)
{
disp->actions[code] = action;
- disp->names[code] = name;
}
typedef enum {IN, OUT} pn_dir_t;
@@ -85,14 +84,10 @@ static void pn_do_trace(pn_dispatcher_t
pn_data_t *args, const char *payload, size_t size)
{
if (disp->trace & PN_TRACE_FRM) {
- uint64_t code64;
- bool scanned;
- pn_data_scan(args, "D?L.", &scanned, &code64);
- uint8_t code = scanned ? code64 : 0;
size_t n = SCRATCH;
pn_data_format(args, disp->scratch, &n);
- pn_dispatcher_trace(disp, ch, "%s %s %s", dir == OUT ? "->" : "<-",
- disp->names[code], disp->scratch);
+ pn_dispatcher_trace(disp, ch, "%s %s", dir == OUT ? "->" : "<-",
+ disp->scratch);
if (size) {
char buf[1024];
int e = pn_quote_data(buf, 1024, payload, size);
Modified: qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.h
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.h?rev=1486299&r1=1486298&r2=1486299&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.h (original)
+++ qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.h Sat May 25 08:23:02
2013
@@ -38,7 +38,6 @@ typedef int (pn_action_t)(pn_dispatcher_
struct pn_dispatcher_t {
pn_action_t *actions[256];
- const char *names[256];
uint8_t frame_type;
pn_trace_t trace;
pn_buffer_t *input;
@@ -66,7 +65,7 @@ struct pn_dispatcher_t {
pn_dispatcher_t *pn_dispatcher(uint8_t frame_type, void *context);
void pn_dispatcher_free(pn_dispatcher_t *disp);
-void pn_dispatcher_action(pn_dispatcher_t *disp, uint8_t code, const char
*name,
+void pn_dispatcher_action(pn_dispatcher_t *disp, uint8_t code,
pn_action_t *action);
int pn_scan_args(pn_dispatcher_t *disp, const char *fmt, ...);
void pn_set_payload(pn_dispatcher_t *disp, const char *data, size_t size);
Modified: qpid/proton/trunk/proton-c/src/engine/engine-internal.h
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/engine/engine-internal.h?rev=1486299&r1=1486298&r2=1486299&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/engine/engine-internal.h (original)
+++ qpid/proton/trunk/proton-c/src/engine/engine-internal.h Sat May 25 08:23:02
2013
@@ -90,10 +90,8 @@ typedef struct {
pn_sequence_t incoming_window;
pn_sequence_t outgoing_transfer_count;
pn_sequence_t outgoing_window;
- pn_link_state_t *links;
- size_t link_capacity;
- pn_link_state_t **handles;
- size_t handle_capacity;
+ pn_hash_t *local_handles;
+ pn_hash_t *remote_handles;
uint64_t disp_code;
bool disp_settled;
@@ -155,10 +153,8 @@ struct pn_transport_t {
uint64_t last_bytes_output;
pn_error_t *error;
- pn_session_state_t *sessions;
- size_t session_capacity;
- pn_session_state_t **channels;
- size_t channel_capacity;
+ pn_hash_t *local_channels;
+ pn_hash_t *remote_channels;
char scratch[SCRATCH];
/* statistics */
@@ -201,8 +197,8 @@ struct pn_session_t {
pn_endpoint_t endpoint;
pn_connection_t *connection;
pn_list_t *links;
- size_t id;
void *context;
+ pn_session_state_t state;
};
struct pn_terminus_t {
@@ -237,8 +233,8 @@ struct pn_link_t {
pn_sequence_t queued;
bool drain;
bool drained; // sender only
- size_t id;
void *context;
+ pn_link_state_t state;
};
struct pn_delivery_t {
Modified: qpid/proton/trunk/proton-c/src/engine/engine.c
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/engine/engine.c?rev=1486299&r1=1486298&r2=1486299&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/engine/engine.c (original)
+++ qpid/proton/trunk/proton-c/src/engine/engine.c Sat May 25 08:23:02 2013
@@ -223,20 +223,14 @@ void pn_transport_free(pn_transport_t *t
pn_ssl_free(transport->ssl);
pn_sasl_free(transport->sasl);
pn_dispatcher_free(transport->disp);
- for (unsigned i = 0; i < transport->session_capacity; i++) {
- pn_delivery_buffer_free(&transport->sessions[i].incoming);
- pn_delivery_buffer_free(&transport->sessions[i].outgoing);
- free(transport->sessions[i].links);
- free(transport->sessions[i].handles);
- }
free(transport->remote_container);
free(transport->remote_hostname);
pn_data_free(transport->remote_offered_capabilities);
pn_data_free(transport->remote_desired_capabilities);
pn_error_free(transport->error);
pn_condition_tini(&transport->remote_condition);
- free(transport->sessions);
- free(transport->channels);
+ pn_free(transport->local_channels);
+ pn_free(transport->remote_channels);
free(transport->input_buf);
free(transport->output_buf);
free(transport);
@@ -246,7 +240,6 @@ void pn_add_session(pn_connection_t *con
{
pn_list_add(conn->sessions, ssn);
ssn->connection = conn;
- ssn->id = pn_list_size(conn->sessions);
}
void pn_remove_session(pn_connection_t *conn, pn_session_t *ssn)
@@ -292,7 +285,6 @@ void pn_add_link(pn_session_t *ssn, pn_l
{
pn_list_add(ssn->links, link);
link->session = ssn;
- link->id = pn_list_size(ssn->links);
}
void pn_remove_link(pn_session_t *ssn, pn_link_t *link)
@@ -649,6 +641,11 @@ static void pn_session_finalize(void *ob
pn_session_t *session = (pn_session_t *) object;
pn_free(session->links);
pn_endpoint_tini(&session->endpoint);
+
+ pn_delivery_buffer_free(&session->state.incoming);
+ pn_delivery_buffer_free(&session->state.outgoing);
+ pn_free(session->state.local_handles);
+ pn_free(session->state.remote_handles);
}
pn_session_t *pn_session(pn_connection_t *conn)
@@ -664,6 +661,14 @@ pn_session_t *pn_session(pn_connection_t
ssn->links = pn_list(0, PN_REFCOUNT);
ssn->context = 0;
+ // begin transport state
+ ssn->state = (pn_session_state_t) {ssn, (uint16_t)-1, (uint16_t)-1};
+ pn_delivery_buffer_init(&ssn->state.incoming, 0, PN_SESSION_WINDOW);
+ pn_delivery_buffer_init(&ssn->state.outgoing, 0, PN_SESSION_WINDOW);
+ ssn->state.local_handles = pn_hash(0, 0.75, PN_REFCOUNT);
+ ssn->state.remote_handles = pn_hash(0, 0.75, PN_REFCOUNT);
+ // end transport state
+
return ssn;
}
@@ -721,15 +726,15 @@ void pn_transport_init(pn_transport_t *t
amqp->buffered_input = NULL;
amqp->next = NULL;
- pn_dispatcher_action(transport->disp, OPEN, "OPEN", pn_do_open);
- pn_dispatcher_action(transport->disp, BEGIN, "BEGIN", pn_do_begin);
- pn_dispatcher_action(transport->disp, ATTACH, "ATTACH", pn_do_attach);
- pn_dispatcher_action(transport->disp, TRANSFER, "TRANSFER", pn_do_transfer);
- pn_dispatcher_action(transport->disp, FLOW, "FLOW", pn_do_flow);
- pn_dispatcher_action(transport->disp, DISPOSITION, "DISPOSITION",
pn_do_disposition);
- pn_dispatcher_action(transport->disp, DETACH, "DETACH", pn_do_detach);
- pn_dispatcher_action(transport->disp, END, "END", pn_do_end);
- pn_dispatcher_action(transport->disp, CLOSE, "CLOSE", pn_do_close);
+ pn_dispatcher_action(transport->disp, OPEN, pn_do_open);
+ pn_dispatcher_action(transport->disp, BEGIN, pn_do_begin);
+ pn_dispatcher_action(transport->disp, ATTACH, pn_do_attach);
+ pn_dispatcher_action(transport->disp, TRANSFER, pn_do_transfer);
+ pn_dispatcher_action(transport->disp, FLOW, pn_do_flow);
+ pn_dispatcher_action(transport->disp, DISPOSITION, pn_do_disposition);
+ pn_dispatcher_action(transport->disp, DETACH, pn_do_detach);
+ pn_dispatcher_action(transport->disp, END, pn_do_end);
+ pn_dispatcher_action(transport->disp, CLOSE, pn_do_close);
transport->open_sent = false;
transport->open_rcvd = false;
@@ -751,11 +756,8 @@ void pn_transport_init(pn_transport_t *t
transport->error = pn_error();
pn_condition_init(&transport->remote_condition);
- transport->sessions = NULL;
- transport->session_capacity = 0;
-
- transport->channels = NULL;
- transport->channel_capacity = 0;
+ transport->local_channels = pn_hash(0, 0.75, PN_REFCOUNT);
+ transport->remote_channels = pn_hash(0, 0.75, PN_REFCOUNT);
transport->bytes_input = 0;
transport->bytes_output = 0;
@@ -766,31 +768,25 @@ void pn_transport_init(pn_transport_t *t
pn_session_state_t *pn_session_get_state(pn_transport_t *transport,
pn_session_t *ssn)
{
- int old_capacity = transport->session_capacity;
- PN_ENSURE(transport->sessions, transport->session_capacity, ssn->id + 1,
pn_session_state_t);
- for (unsigned i = old_capacity; i < transport->session_capacity; i++)
- {
- pn_session_state_t t = {NULL, (uint16_t)-1, (uint16_t)-1};
- transport->sessions[i] = t;
- pn_delivery_buffer_init(&transport->sessions[i].incoming, 0,
PN_SESSION_WINDOW);
- pn_delivery_buffer_init(&transport->sessions[i].outgoing, 0,
PN_SESSION_WINDOW);
- }
- pn_session_state_t *state = &transport->sessions[ssn->id];
- state->session = ssn;
- return state;
+ return &ssn->state;
}
pn_session_state_t *pn_channel_state(pn_transport_t *transport, uint16_t
channel)
{
- PN_ENSUREZ(transport->channels, transport->channel_capacity, (size_t)
channel + 1, pn_session_state_t *);
- return transport->channels[channel];
+ pn_session_t *ssn = (pn_session_t *) pn_hash_get(transport->remote_channels,
channel);
+ return &ssn->state;
}
-void pn_map_channel(pn_transport_t *transport, uint16_t channel,
pn_session_state_t *state)
+static void pn_map_channel(pn_transport_t *transport, uint16_t channel,
pn_session_state_t *state)
{
- PN_ENSUREZ(transport->channels, transport->channel_capacity, (size_t)
channel + 1, pn_session_state_t *);
+ pn_hash_put(transport->remote_channels, channel, state->session);
state->remote_channel = channel;
- transport->channels[channel] = state;
+}
+
+static void pn_unmap_channel(pn_transport_t *transport, pn_session_state_t
*state)
+{
+ pn_hash_del(transport->remote_channels, state->remote_channel);
+ state->remote_channel = -2;
}
pn_transport_t *pn_transport()
@@ -933,6 +929,14 @@ pn_link_t *pn_link_new(int type, pn_sess
link->drained = false;
link->context = 0;
+ // begin transport state
+ link->state.link = link;
+ link->state.local_handle = -1;
+ link->state.remote_handle = -1;
+ link->state.delivery_count = 0;
+ link->state.link_credit = 0;
+ // end transport stat
+
return link;
}
@@ -1083,39 +1087,27 @@ int pn_terminus_copy(pn_terminus_t *term
return 0;
}
-void pn_link_state_init(pn_link_state_t *ls)
+pn_link_state_t *pn_link_get_state(pn_session_state_t *ssn_state, pn_link_t
*link)
{
- ls->link = NULL;
- ls->local_handle = -1;
- ls->remote_handle = -1;
- ls->delivery_count = 0;
- ls->link_credit = 0;
+ return &link->state;
}
-pn_link_state_t *pn_link_get_state(pn_session_state_t *ssn_state, pn_link_t
*link)
+static void pn_map_handle(pn_session_state_t *ssn_state, uint32_t handle,
pn_link_state_t *state)
{
- int old_capacity = ssn_state->link_capacity;
- PN_ENSURE(ssn_state->links, ssn_state->link_capacity, link->id + 1,
pn_link_state_t);
- for (unsigned i = old_capacity; i < ssn_state->link_capacity; i++)
- {
- pn_link_state_init(&ssn_state->links[i]);
- }
- pn_link_state_t *state = &ssn_state->links[link->id];
- state->link = link;
- return state;
+ state->remote_handle = handle;
+ pn_hash_put(ssn_state->remote_handles, handle, state->link);
}
-void pn_map_handle(pn_session_state_t *ssn_state, uint32_t handle,
pn_link_state_t *state)
+static void pn_unmap_handle(pn_session_state_t *ssn_state, pn_link_state_t
*state)
{
- PN_ENSUREZ(ssn_state->handles, ssn_state->handle_capacity, handle + 1,
pn_link_state_t*);
- state->remote_handle = handle;
- ssn_state->handles[handle] = state;
+ pn_hash_del(ssn_state->remote_handles, state->remote_handle);
+ state->remote_handle = -2;
}
pn_link_state_t *pn_handle_state(pn_session_state_t *ssn_state, uint32_t
handle)
{
- PN_ENSUREZ(ssn_state->handles, ssn_state->handle_capacity, handle + 1,
pn_link_state_t*);
- return ssn_state->handles[handle];
+ pn_link_t *link = (pn_link_t *) pn_hash_get(ssn_state->remote_handles,
handle);
+ return &link->state;
}
pn_link_t *pn_sender(pn_session_t *session, const char *name)
@@ -1457,14 +1449,14 @@ int pn_do_begin(pn_dispatcher_t *disp)
int err = pn_scan_args(disp, "D.[?HI]", &reply, &remote_channel, &next);
if (err) return err;
- pn_session_state_t *state;
+ pn_session_t *ssn;
if (reply) {
// XXX: what if session is NULL?
- state = &transport->sessions[remote_channel];
+ ssn = (pn_session_t *) pn_hash_get(transport->local_channels,
remote_channel);
} else {
- pn_session_t *ssn = pn_session(transport->connection);
- state = pn_session_get_state(transport, ssn);
+ ssn = pn_session(transport->connection);
}
+ pn_session_state_t *state = pn_session_get_state(transport, ssn);
state->incoming_transfer_count = next;
pn_map_channel(transport, disp->channel, state);
PN_SET_REMOTE(state->session->endpoint.state, PN_REMOTE_ACTIVE);
@@ -1800,7 +1792,7 @@ int pn_do_detach(pn_dispatcher_t *disp)
err = pn_scan_error(disp, &link->endpoint.remote_condition, true);
if (err) return err;
- link_state->remote_handle = -2;
+ pn_unmap_handle(ssn_state, link_state);
if (closed)
{
@@ -1819,7 +1811,7 @@ int pn_do_end(pn_dispatcher_t *disp)
pn_session_t *session = ssn_state->session;
int err = pn_scan_error(disp, &session->endpoint.remote_condition, false);
if (err) return err;
- ssn_state->remote_channel = -2;
+ pn_unmap_channel(transport, ssn_state);
PN_SET_REMOTE(session->endpoint.state, PN_REMOTE_CLOSED);
return 0;
}
@@ -2035,6 +2027,18 @@ int pn_process_conn_setup(pn_transport_t
return 0;
}
+static uint16_t allocate_alias(pn_hash_t *aliases)
+{
+ for (uint32_t i = 0; i < 65536; i++) {
+ if (!pn_hash_get(aliases, i)) {
+ return i;
+ }
+ }
+
+ assert(false);
+ return 0;
+}
+
int pn_process_ssn_setup(pn_transport_t *transport, pn_endpoint_t *endpoint)
{
if (endpoint->type == SESSION && transport->open_sent)
@@ -2043,15 +2047,14 @@ int pn_process_ssn_setup(pn_transport_t
pn_session_state_t *state = pn_session_get_state(transport, ssn);
if (!(endpoint->state & PN_LOCAL_UNINIT) && state->local_channel ==
(uint16_t) -1)
{
- // XXX: we use the session id as the outgoing channel, we depend
- // on this for looking up via remote channel
- uint16_t channel = ssn->id;
+ uint16_t channel = allocate_alias(transport->local_channels);
pn_post_frame(transport->disp, channel, "DL[?HIII]", BEGIN,
((int16_t) state->remote_channel >= 0),
state->remote_channel,
state->outgoing_transfer_count,
pn_delivery_buffer_available(&state->incoming),
pn_delivery_buffer_available(&state->outgoing));
state->local_channel = channel;
+ pn_hash_put(transport->local_channels, channel, ssn);
}
}
@@ -2085,8 +2088,8 @@ int pn_process_link_setup(pn_transport_t
if (((int16_t) ssn_state->local_channel >= 0) &&
!(endpoint->state & PN_LOCAL_UNINIT) && state->local_handle ==
(uint32_t) -1)
{
- // XXX
- state->local_handle = link->id;
+ state->local_handle = allocate_alias(ssn_state->local_handles);
+ pn_hash_put(ssn_state->local_handles, state->local_handle, link);
int err = pn_post_frame(transport->disp, ssn_state->local_channel,
"DL[SIonn?DL[SIsIoCnCnCC]?DL[SIsIoCC]nnI]",
ATTACH,
pn_string_get(link->name),
Modified: qpid/proton/trunk/proton-c/src/protocol.h.py
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/protocol.h.py?rev=1486299&r1=1486298&r2=1486299&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/protocol.h.py (original)
+++ qpid/proton/trunk/proton-c/src/protocol.h.py Sat May 25 08:23:02 2013
@@ -25,6 +25,8 @@ print "#ifndef _PROTON_PROTOCOL_H"
print "#define _PROTON_PROTOCOL_H 1"
print
+fields = {}
+
for type in TYPES:
fidx = 0
for f in type.query["field"]:
@@ -40,7 +42,39 @@ for type in TYPES:
hi, lo = [int(x, 0) for x in desc["@code"].split(":")]
code = (hi << 32) + lo
print "#define %s ((uint64_t) %s)" % (name, code)
+ fields[code] = (type["@name"], [f["@name"] for f in type.query["field"]])
idx += 1
print
+
+print """typedef struct {
+ const char *name;
+ const char *fields[32];
+} pn_fields_t;"""
+
+print
+
+print "#ifndef DEFINE_FIELDS"
+print "extern"
+print "#endif"
+
+print "pn_fields_t FIELDS[256]"
+print "#ifdef DEFINE_FIELDS"
+print " = {"
+
+for i in range(256):
+ if i in fields:
+ name, fnames = fields[i]
+ if fnames:
+ print ' {"%s", {%s}},' % (name, ", ".join(['"%s"' % f for f in fnames]))
+ else:
+ print ' {"%s", {NULL}},' % name
+ else:
+ print ' {NULL, {NULL}},'
+
+print "}"
+print "#endif"
+print ";"
+
+print
print "#endif /* protocol.h */"
Modified: qpid/proton/trunk/proton-c/src/sasl/sasl.c
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/sasl/sasl.c?rev=1486299&r1=1486298&r2=1486299&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/sasl/sasl.c (original)
+++ qpid/proton/trunk/proton-c/src/sasl/sasl.c Sat May 25 08:23:02 2013
@@ -70,11 +70,11 @@ pn_sasl_t *pn_sasl(pn_transport_t *trans
sasl->disp = pn_dispatcher(1, sasl);
sasl->disp->batch = false;
- pn_dispatcher_action(sasl->disp, SASL_INIT, "SASL-INIT", pn_do_init);
- pn_dispatcher_action(sasl->disp, SASL_MECHANISMS, "SASL-MECHANISMS",
pn_do_mechanisms);
- pn_dispatcher_action(sasl->disp, SASL_CHALLENGE, "SASL-CHALLENGE",
pn_do_challenge);
- pn_dispatcher_action(sasl->disp, SASL_RESPONSE, "SASL-RESPONSE",
pn_do_response);
- pn_dispatcher_action(sasl->disp, SASL_OUTCOME, "SASL-OUTCOME",
pn_do_outcome);
+ pn_dispatcher_action(sasl->disp, SASL_INIT, pn_do_init);
+ pn_dispatcher_action(sasl->disp, SASL_MECHANISMS, pn_do_mechanisms);
+ pn_dispatcher_action(sasl->disp, SASL_CHALLENGE, pn_do_challenge);
+ pn_dispatcher_action(sasl->disp, SASL_RESPONSE, pn_do_response);
+ pn_dispatcher_action(sasl->disp, SASL_OUTCOME, pn_do_outcome);
sasl->client = false;
sasl->configured = false;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]