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]

Reply via email to