Author: astitcher
Date: Thu May 29 20:01:29 2014
New Revision: 1598389
URL: http://svn.apache.org/r1598389
Log:
PROTON-429: Separated out read-only byte ranges from writable byte ranges
Modified:
qpid/proton/trunk/proton-c/include/proton/buffer.h
qpid/proton/trunk/proton-c/include/proton/cproton.i
qpid/proton/trunk/proton-c/include/proton/types.h
qpid/proton/trunk/proton-c/src/buffer.c
qpid/proton/trunk/proton-c/src/codec/codec.c
qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.c
qpid/proton/trunk/proton-c/src/messenger/messenger.c
qpid/proton/trunk/proton-c/src/sasl/sasl.c
qpid/proton/trunk/proton-c/src/types.c
Modified: qpid/proton/trunk/proton-c/include/proton/buffer.h
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/include/proton/buffer.h?rev=1598389&r1=1598388&r2=1598389&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/include/proton/buffer.h (original)
+++ qpid/proton/trunk/proton-c/include/proton/buffer.h Thu May 29 20:01:29 2014
@@ -29,6 +29,11 @@
extern "C" {
#endif
+typedef struct {
+ size_t size;
+ char *start;
+} pn_buffer_memory_t;
+
typedef struct pn_buffer_t pn_buffer_t;
PN_EXTERN pn_buffer_t *pn_buffer(size_t capacity);
@@ -44,6 +49,7 @@ PN_EXTERN int pn_buffer_trim(pn_buffer_t
PN_EXTERN void pn_buffer_clear(pn_buffer_t *buf);
PN_EXTERN int pn_buffer_defrag(pn_buffer_t *buf);
PN_EXTERN pn_bytes_t pn_buffer_bytes(pn_buffer_t *buf);
+PN_EXTERN pn_buffer_memory_t pn_buffer_memory(pn_buffer_t *buf);
PN_EXTERN int pn_buffer_print(pn_buffer_t *buf);
#ifdef __cplusplus
Modified: qpid/proton/trunk/proton-c/include/proton/cproton.i
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/include/proton/cproton.i?rev=1598389&r1=1598388&r2=1598389&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/include/proton/cproton.i (original)
+++ qpid/proton/trunk/proton-c/include/proton/cproton.i Thu May 29 20:01:29 2014
@@ -30,6 +30,10 @@ typedef long long int int64_t;
/* Parse these interface header files to generate APIs for script languages */
%include "proton/import_export.h"
+
+/* We cannot safely just wrap pn_bytes_t but each language binding must have a
typemap for it - presumably to a string type */
+%ignore pn_bytes_t;
+
%include "proton/types.h"
%ignore pn_string_vformat;
%ignore pn_string_vaddf;
Modified: qpid/proton/trunk/proton-c/include/proton/types.h
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/include/proton/types.h?rev=1598389&r1=1598388&r2=1598389&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/include/proton/types.h (original)
+++ qpid/proton/trunk/proton-c/include/proton/types.h Thu May 29 20:01:29 2014
@@ -59,11 +59,10 @@ typedef struct {
typedef struct {
size_t size;
- char *start;
+ const char *start;
} pn_bytes_t;
-PN_EXTERN pn_bytes_t pn_bytes(size_t size, char *start);
-PN_EXTERN pn_bytes_t pn_bytes_dup(size_t size, const char *start);
+PN_EXTERN pn_bytes_t pn_bytes(size_t size, const char *start);
/** @}
*/
Modified: qpid/proton/trunk/proton-c/src/buffer.c
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/buffer.c?rev=1598389&r1=1598388&r2=1598389&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/buffer.c (original)
+++ qpid/proton/trunk/proton-c/src/buffer.c Thu May 29 20:01:29 2014
@@ -273,6 +273,18 @@ pn_bytes_t pn_buffer_bytes(pn_buffer_t *
}
}
+pn_buffer_memory_t pn_buffer_memory(pn_buffer_t *buf)
+{
+ if (buf) {
+ pn_buffer_defrag(buf);
+ pn_buffer_memory_t r = {buf->size, buf->bytes};
+ return r;
+ } else {
+ pn_buffer_memory_t r = {0, NULL};
+ return r;
+ }
+}
+
int pn_buffer_print(pn_buffer_t *buf)
{
printf("pn_buffer(\"");
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=1598389&r1=1598388&r2=1598389&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/codec/codec.c (original)
+++ qpid/proton/trunk/proton-c/src/codec/codec.c Thu May 29 20:01:29 2014
@@ -422,7 +422,7 @@ int pn_data_grow(pn_data_t *data)
return 0;
}
-ssize_t pn_data_intern(pn_data_t *data, char *start, size_t size)
+ssize_t pn_data_intern(pn_data_t *data, const char *start, size_t size)
{
size_t offset = pn_buffer_size(data->buf);
int err = pn_buffer_append(data->buf, start, size);
@@ -464,7 +464,7 @@ int pn_data_intern_node(pn_data_t *data,
node->data = true;
node->data_offset = offset;
node->data_size = bytes->size;
- pn_bytes_t buf = pn_buffer_bytes(data->buf);
+ pn_buffer_memory_t buf = pn_buffer_memory(data->buf);
bytes->start = buf.start + offset;
if (pn_buffer_capacity(data->buf) != oldcap) {
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=1598389&r1=1598388&r2=1598389&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.c (original)
+++ qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.c Thu May 29 20:01:29
2014
@@ -212,7 +212,7 @@ int pn_post_frame(pn_dispatcher_t *disp,
encode_performatives:
pn_buffer_clear( disp->frame );
- pn_bytes_t buf = pn_buffer_bytes( disp->frame );
+ pn_buffer_memory_t buf = pn_buffer_memory( disp->frame );
buf.size = pn_buffer_available( disp->frame );
ssize_t wr = pn_data_encode( disp->output_args, buf.start, buf.size );
@@ -290,7 +290,7 @@ int pn_post_transfer_frame(pn_dispatcher
encode_performatives:
pn_buffer_clear( disp->frame );
- pn_bytes_t buf = pn_buffer_bytes( disp->frame );
+ pn_buffer_memory_t buf = pn_buffer_memory( disp->frame );
buf.size = pn_buffer_available( disp->frame );
ssize_t wr = pn_data_encode(disp->output_args, buf.start, buf.size);
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=1598389&r1=1598388&r2=1598389&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/messenger/messenger.c (original)
+++ qpid/proton/trunk/proton-c/src/messenger/messenger.c Thu May 29 20:01:29
2014
@@ -974,7 +974,7 @@ int pni_pump_in(pn_messenger_t *messenge
size_t pending = pn_delivery_pending(d);
int err = pn_buffer_ensure(buf, pending + 1);
if (err) return pn_error_format(messenger->error, err, "get: error growing
buffer");
- char *encoded = pn_buffer_bytes(buf).start;
+ char *encoded = pn_buffer_memory(buf).start;
ssize_t n = pn_link_recv(receiver, encoded, pending);
if (n != (ssize_t) pending) {
return pn_error_format(messenger->error, n,
@@ -1667,7 +1667,7 @@ int pni_pump_out(pn_messenger_t *messeng
pn_buffer_t *buf = pni_entry_bytes(entry);
pn_bytes_t bytes = pn_buffer_bytes(buf);
- char *encoded = bytes.start;
+ const char *encoded = bytes.start;
size_t size = bytes.size;
// XXX: proper tag
@@ -1747,7 +1747,7 @@ int pn_messenger_put(pn_messenger_t *mes
pni_rewrite(messenger, msg);
while (true) {
- char *encoded = pn_buffer_bytes(buf).start;
+ char *encoded = pn_buffer_memory(buf).start;
size_t size = pn_buffer_capacity(buf);
int err = pn_message_encode(msg, encoded, &size);
if (err == PN_OVERFLOW) {
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=1598389&r1=1598388&r2=1598389&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/sasl/sasl.c (original)
+++ qpid/proton/trunk/proton-c/src/sasl/sasl.c Thu May 29 20:01:29 2014
@@ -236,7 +236,7 @@ void pn_sasl_free(pn_sasl_t *sasl)
void pn_client_init(pn_sasl_t *sasl)
{
- pn_bytes_t bytes = pn_buffer_bytes(sasl->send_data);
+ pn_buffer_memory_t bytes = pn_buffer_memory(sasl->send_data);
pn_post_frame(sasl->disp, 0, "DL[sz]", SASL_INIT, sasl->mechanisms,
bytes.size, bytes.start);
pn_buffer_clear(sasl->send_data);
@@ -292,7 +292,7 @@ void pn_sasl_process(pn_sasl_t *sasl)
}
if (pn_buffer_size(sasl->send_data)) {
- pn_bytes_t bytes = pn_buffer_bytes(sasl->send_data);
+ pn_buffer_memory_t bytes = pn_buffer_memory(sasl->send_data);
pn_post_frame(sasl->disp, 0, "DL[z]", sasl->client ? SASL_RESPONSE :
SASL_CHALLENGE,
bytes.size, bytes.start);
pn_buffer_clear(sasl->send_data);
Modified: qpid/proton/trunk/proton-c/src/types.c
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/types.c?rev=1598389&r1=1598388&r2=1598389&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/types.c (original)
+++ qpid/proton/trunk/proton-c/src/types.c Thu May 29 20:01:29 2014
@@ -23,20 +23,8 @@
#include <stdlib.h>
#include <string.h>
-pn_bytes_t pn_bytes(size_t size, char *start)
+pn_bytes_t pn_bytes(size_t size, const char *start)
{
pn_bytes_t bytes = {size, start};
return bytes;
}
-
-pn_bytes_t pn_bytes_dup(size_t size, const char *start)
-{
- if (size && start)
- {
- char *dup = (char *) malloc(size);
- memmove(dup, start, size);
- return pn_bytes(size, dup);
- } else {
- return pn_bytes(0, NULL);
- }
-}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]