Author: rhs
Date: Wed Aug 21 15:16:19 2013
New Revision: 1516184
URL: http://svn.apache.org/r1516184
Log:
don't set an error for PN_OVERFLOW, this fixes PROTON-336, also fixed error
accessors to be consistent
Added:
qpid/proton/trunk/proton-c/src/tests/message.c
Modified:
qpid/proton/trunk/examples/messenger/c/recv.c
qpid/proton/trunk/examples/messenger/c/send.c
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/messenger/jni/JNIMessenger.java
qpid/proton/trunk/proton-c/bindings/perl/lib/qpid/proton/Messenger.pm
qpid/proton/trunk/proton-c/bindings/php/proton.php
qpid/proton/trunk/proton-c/bindings/python/proton.py
qpid/proton/trunk/proton-c/bindings/ruby/lib/qpid_proton/message.rb
qpid/proton/trunk/proton-c/bindings/ruby/lib/qpid_proton/messenger.rb
qpid/proton/trunk/proton-c/include/proton/message.h
qpid/proton/trunk/proton-c/include/proton/messenger.h
qpid/proton/trunk/proton-c/src/message/message.c
qpid/proton/trunk/proton-c/src/messenger/messenger.c
qpid/proton/trunk/proton-c/src/tests/CMakeLists.txt
qpid/proton/trunk/tests/tools/apps/c/msgr-common.h
Modified: qpid/proton/trunk/examples/messenger/c/recv.c
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/examples/messenger/c/recv.c?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/examples/messenger/c/recv.c (original)
+++ qpid/proton/trunk/examples/messenger/c/recv.c Wed Aug 21 15:16:19 2013
@@ -26,13 +26,13 @@
#include <stdlib.h>
#include <ctype.h>
-#define check(messenger) \
- { \
- if(pn_messenger_errno(messenger)) \
- { \
- die(__FILE__, __LINE__, pn_messenger_error(messenger)); \
- } \
- } \
+#define check(messenger) \
+ { \
+ if(pn_messenger_errno(messenger)) \
+ { \
+ die(__FILE__, __LINE__, pn_error_text(pn_messenger_error(messenger))); \
+ } \
+ } \
void die(const char *file, int line, const char *message)
{
Modified: qpid/proton/trunk/examples/messenger/c/send.c
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/examples/messenger/c/send.c?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/examples/messenger/c/send.c (original)
+++ qpid/proton/trunk/examples/messenger/c/send.c Wed Aug 21 15:16:19 2013
@@ -27,13 +27,13 @@
#include <string.h>
#include <ctype.h>
-#define check(messenger) \
- { \
- if(pn_messenger_errno(messenger)) \
- { \
- die(__FILE__, __LINE__, pn_messenger_error(messenger)); \
- } \
- } \
+#define check(messenger) \
+ { \
+ if(pn_messenger_errno(messenger)) \
+ { \
+ die(__FILE__, __LINE__, pn_error_text(pn_messenger_error(messenger))); \
+ } \
+ } \
void die(const char *file, int line, const char *message)
{
Modified:
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/messenger/jni/JNIMessenger.java
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/messenger/jni/JNIMessenger.java?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
---
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/messenger/jni/JNIMessenger.java
(original)
+++
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/messenger/jni/JNIMessenger.java
Wed Aug 21 15:16:19 2013
@@ -277,7 +277,7 @@ class JNIMessenger implements Messenger
{
if(errorCode != 0 && errorCode != Proton.PN_INPROGRESS)
{
- String errorMessage = Proton.pn_messenger_error(_impl);
+ String errorMessage =
Proton.pn_error_text(Proton.pn_messenger_error(_impl));
if(errorCode == Proton.PN_TIMEOUT)
{
throw new TimeoutException(errorMessage);
Modified: qpid/proton/trunk/proton-c/bindings/perl/lib/qpid/proton/Messenger.pm
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/perl/lib/qpid/proton/Messenger.pm?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/bindings/perl/lib/qpid/proton/Messenger.pm
(original)
+++ qpid/proton/trunk/proton-c/bindings/perl/lib/qpid/proton/Messenger.pm Wed
Aug 21 15:16:19 2013
@@ -92,7 +92,7 @@ sub get_incoming_window {
sub get_error {
my ($self) = @_;
- return cproton_perl::pn_messenger_error($self->{_impl});
+ return
cproton_perl::pn_error_text(cproton_perl::pn_messenger_error($self->{_impl}));
}
sub get_errno {
Modified: qpid/proton/trunk/proton-c/bindings/php/proton.php
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/php/proton.php?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/bindings/php/proton.php (original)
+++ qpid/proton/trunk/proton-c/bindings/php/proton.php Wed Aug 21 15:16:19 2013
@@ -58,7 +58,7 @@ class Messenger
if ($value < 0) {
$exc = code2exc($value);
if ($exc == null) $exc = "MessengerException";
- throw new $exc("[$value]: " . pn_messenger_error($this->impl));
+ throw new $exc("[$value]: " .
pn_error_text(pn_messenger_error($this->impl)));
} else {
return $value;
}
Modified: qpid/proton/trunk/proton-c/bindings/python/proton.py
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/python/proton.py?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/bindings/python/proton.py (original)
+++ qpid/proton/trunk/proton-c/bindings/python/proton.py Wed Aug 21 15:16:19
2013
@@ -235,7 +235,7 @@ class Messenger(object):
if (err == PN_INPROGRESS):
return
exc = EXCEPTIONS.get(err, MessengerException)
- raise exc("[%s]: %s" % (err, pn_messenger_error(self._mng)))
+ raise exc("[%s]: %s" % (err,
pn_error_text(pn_messenger_error(self._mng))))
else:
return err
Modified: qpid/proton/trunk/proton-c/bindings/ruby/lib/qpid_proton/message.rb
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/ruby/lib/qpid_proton/message.rb?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/bindings/ruby/lib/qpid_proton/message.rb
(original)
+++ qpid/proton/trunk/proton-c/bindings/ruby/lib/qpid_proton/message.rb Wed Aug
21 15:16:19 2013
@@ -155,7 +155,7 @@ module Qpid
# Returns the most recent error message.
#
def error
- Cproton.pn_message_error(@impl)
+ Cproton.pn_error_text(Cproton.pn_message_error(@impl))
end
# Returns whether there is currently an error reported.
Modified: qpid/proton/trunk/proton-c/bindings/ruby/lib/qpid_proton/messenger.rb
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/ruby/lib/qpid_proton/messenger.rb?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/bindings/ruby/lib/qpid_proton/messenger.rb
(original)
+++ qpid/proton/trunk/proton-c/bindings/ruby/lib/qpid_proton/messenger.rb Wed
Aug 21 15:16:19 2013
@@ -98,7 +98,7 @@ module Qpid
# Returns the most recent error message.
#
def error
- Cproton.pn_messenger_error(@impl)
+ Cproton.pn_error_text(Cproton.pn_messenger_error(@impl))
end
# Starts the +Messenger+, allowing it to begin sending and
Modified: qpid/proton/trunk/proton-c/include/proton/message.h
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/include/proton/message.h?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/include/proton/message.h (original)
+++ qpid/proton/trunk/proton-c/include/proton/message.h Wed Aug 21 15:16:19 2013
@@ -25,6 +25,7 @@
#include <proton/import_export.h>
#include <proton/types.h>
#include <proton/codec.h>
+#include <proton/error.h>
#include <sys/types.h>
#ifndef __cplusplus
#include <stdbool.h>
@@ -50,7 +51,7 @@ PN_EXTERN void pn_message_free
PN_EXTERN void pn_message_clear(pn_message_t *msg);
PN_EXTERN int pn_message_errno(pn_message_t *msg);
-PN_EXTERN const char * pn_message_error(pn_message_t *msg);
+PN_EXTERN pn_error_t *pn_message_error(pn_message_t *msg);
PN_EXTERN bool pn_message_is_inferred(pn_message_t *msg);
PN_EXTERN int pn_message_set_inferred(pn_message_t *msg, bool
inferred);
Modified: qpid/proton/trunk/proton-c/include/proton/messenger.h
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/include/proton/messenger.h?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/include/proton/messenger.h (original)
+++ qpid/proton/trunk/proton-c/include/proton/messenger.h Wed Aug 21 15:16:19
2013
@@ -172,10 +172,10 @@ PN_EXTERN int pn_messenger_errno(pn_mess
*
* @param[in] messenger the messenger to check for errors
*
- * @return a descriptive error message or NULL if no error has
- * occurred
+ * @return a pointer to the messenger's error descriptor
+ * @see error.h
*/
-PN_EXTERN const char *pn_messenger_error(pn_messenger_t *messenger);
+PN_EXTERN pn_error_t *pn_messenger_error(pn_messenger_t *messenger);
/** Gets the outgoing window for a Messenger. @see
* ::pn_messenger_set_outgoing_window
Modified: qpid/proton/trunk/proton-c/src/message/message.c
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/message/message.c?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/message/message.c (original)
+++ qpid/proton/trunk/proton-c/src/message/message.c Wed Aug 21 15:16:19 2013
@@ -387,10 +387,10 @@ int pn_message_errno(pn_message_t *msg)
return pn_error_code(msg->error);
}
-const char *pn_message_error(pn_message_t *msg)
+pn_error_t *pn_message_error(pn_message_t *msg)
{
assert(msg);
- return pn_error_text(msg->error);
+ return msg->error;
}
bool pn_message_is_inferred(pn_message_t *msg)
@@ -839,9 +839,14 @@ int pn_message_encode(pn_message_t *msg,
size_t remaining = *size;
ssize_t encoded = pn_data_encode(msg->data, bytes, remaining);
- if (encoded < 0)
- return pn_error_format(msg->error, encoded, "data error: %s",
- pn_data_error(msg->data));
+ if (encoded < 0) {
+ if (encoded == PN_OVERFLOW) {
+ return encoded;
+ } else {
+ return pn_error_format(msg->error, encoded, "data error: %s",
+ pn_data_error(msg->data));
+ }
+ }
bytes += encoded;
remaining -= encoded;
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=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/messenger/messenger.c (original)
+++ qpid/proton/trunk/proton-c/src/messenger/messenger.c Wed Aug 21 15:16:19
2013
@@ -332,13 +332,10 @@ int pn_messenger_errno(pn_messenger_t *m
}
}
-const char *pn_messenger_error(pn_messenger_t *messenger)
+pn_error_t *pn_messenger_error(pn_messenger_t *messenger)
{
- if (messenger) {
- return pn_error_text(messenger->error);
- } else {
- return NULL;
- }
+ assert(messenger);
+ return messenger->error;
}
void pn_messenger_flow(pn_messenger_t *messenger)
@@ -504,7 +501,7 @@ void pn_messenger_endpoints(pn_messenger
if (pn_delivery_readable(d)) {
int err = pni_pump_in(messenger,
pn_terminus_get_address(pn_link_source(link)), link);
if (err) {
- fprintf(stderr, "%s\n", pn_messenger_error(messenger));
+ fprintf(stderr, "%s\n", pn_error_text(messenger->error));
}
}
d = pn_work_next(d);
Modified: qpid/proton/trunk/proton-c/src/tests/CMakeLists.txt
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/tests/CMakeLists.txt?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/tests/CMakeLists.txt (original)
+++ qpid/proton/trunk/proton-c/src/tests/CMakeLists.txt Wed Aug 21 15:16:19 2013
@@ -26,4 +26,14 @@ set_target_properties (
)
pn_c_files (object.c)
+add_executable (c-message-tests message.c)
+target_link_libraries (c-message-tests qpid-proton)
+set_target_properties (
+ c-message-tests
+ PROPERTIES
+ COMPILE_FLAGS "${COMPILE_WARNING_FLAGS} ${COMPILE_PLATFORM_FLAGS}"
+ )
+pn_c_files (message.c)
+
add_test (c-object-tests c-object-tests)
+add_test (c-message-tests c-message-tests)
Added: qpid/proton/trunk/proton-c/src/tests/message.c
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/tests/message.c?rev=1516184&view=auto
==============================================================================
--- qpid/proton/trunk/proton-c/src/tests/message.c (added)
+++ qpid/proton/trunk/proton-c/src/tests/message.c Wed Aug 21 15:16:19 2013
@@ -0,0 +1,46 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <proton/error.h>
+#include <proton/message.h>
+
+#define assert(E) ((E) ? 0 : (abort(), 0))
+
+static void test_overflow_error()
+{
+ pn_message_t *message = pn_message();
+ char buf[8];
+ size_t size = 8;
+
+ int err = pn_message_encode(message, buf, &size);
+ assert(err == PN_OVERFLOW);
+ assert(pn_message_errno(message) == 0);
+}
+
+int main(int argc, char **argv)
+{
+ test_overflow_error();
+ return 0;
+}
Modified: qpid/proton/trunk/tests/tools/apps/c/msgr-common.h
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/tests/tools/apps/c/msgr-common.h?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/tests/tools/apps/c/msgr-common.h (original)
+++ qpid/proton/trunk/tests/tools/apps/c/msgr-common.h Wed Aug 21 15:16:19 2013
@@ -50,7 +50,7 @@ pn_timestamp_t msgr_now();
void parse_password( const char *, char ** );
#define check_messenger(m) \
- { check(pn_messenger_errno(m) == 0, pn_messenger_error(m)) }
+ { check(pn_messenger_errno(m) == 0, pn_error_text(pn_messenger_error(m))) }
#define check( expression, message ) \
{ if (!(expression)) msgr_die(__FILE__,__LINE__, message); }
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]