From 5f7d260c05beed5dc8ebead24b045ef46d9a36ed Mon Sep 17 00:00:00 2001 From: Pierrick Charron Date: Sun, 18 Nov 2012 19:23:27 -0500 Subject: [PATCH] Fix stomp_read_frame when buffered --- package.xml | 1 + stomp.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/package.xml b/package.xml index 0523889..ecf1733 100644 --- a/package.xml +++ b/package.xml @@ -17,6 +17,7 @@ This extension allows php applications to communicate with any Stomp compliant M stablestable PHP License +- Fix stomp_read_frame when buffered (Pierrick) diff --git a/stomp.c b/stomp.c index a72dfeb..03f48af 100644 --- a/stomp.c +++ b/stomp.c @@ -553,14 +553,20 @@ stomp_frame_t *stomp_read_frame(stomp_t *stomp) /* Check for the content length */ if (zend_hash_find(f->headers, "content-length", sizeof("content-length"), (void **)&length_str) == SUCCESS) { + int recv = 0; char endbuffer[2]; length = 2; f->body_length = atoi(length_str); f->body = (char *) emalloc(f->body_length); - if (-1 == stomp_recv(stomp, f->body, f->body_length)) { - RETURN_READ_FRAME_FAIL; + while (recv != f->body_length) { + int l = stomp_recv(stomp, f->body + recv, f->body_length - recv); + if (-1 == l) { + RETURN_READ_FRAME_FAIL; + } else { + recv += l; + } } if (length != stomp_recv(stomp, endbuffer, length) || endbuffer[0] != '\0' || endbuffer[1] != '\n') {