1
0
mirror of https://github.com/vitalif/pecl-tools-stomp synced 2019-04-16 04:14:55 +03:00

100 Commits

Author SHA1 Message Date
acf43f619f Only add content-length header for messages containing zero byte
Allows OpenMQ/ActiveMQ to correctly map messages to JMS TextMessages
instead of only BytesMessages.

Fixes https://bugs.php.net/bug.php?id=70280
2015-08-18 12:08:17 +03:00
618d2bd4d4 Fix compiler warning (assignment makes pointer from integer without a cast) 2015-08-18 12:07:50 +03:00
Gennady Feldman
eb55496781 Fixing stomp_writable() check so we can catch when connect failed. 2015-06-05 14:41:04 -04:00
Gennady Feldman
15a3b9a059 1.0.8 => 1.0.9-dev 2015-05-18 18:19:58 -04:00
Gennady Feldman
50bfb5d8da Releasing v1.0.8 2015-05-18 18:17:11 -04:00
Gennady Feldman
4bd40f20a2 Fixing PHP_STOMP_VERSION constant, per Remi's request. 2015-05-18 18:08:25 -04:00
Remi Collet
bf4539e523 fix perm on source files 2015-05-16 07:18:45 +02:00
Gennady Feldman
2c4b2f8bf1 1.0.7 => 1.0.8-dev 2015-05-15 17:21:29 -04:00
Gennady Feldman
0e38c2452e Releasing v1.0.7 2015-05-15 17:12:34 -04:00
Gennady Feldman
59b74e4142 Merge branch 'pull-request/6' 2015-05-05 10:20:59 -04:00
Gennady Feldman
fbacdccd37 Fix error checking after stomp_send().
This one has been in there for a while and would hang for me in
1.0.6 release if the connection was refused.

Some tests would fail too. This error was also somewhat masked in
previous release. We should abort and throw an exception if send
fails.
2015-05-05 10:17:49 -04:00
Gennady Feldman
bdedf5922c Adding #ifdef HAVE_NETINET_IN_H around the new TCP_NODELAY code to fix compilation on Windows and possibly others. 2015-02-25 11:58:32 -05:00
Pierrick Charron
8b0bbd4db2 Improve frame stack and add test 2014-12-09 01:49:39 -05:00
Pierrick Charron
79a3ca34c4 Fix error message on invalid receipt 2014-12-09 01:10:11 -05:00
Remi Collet
5024fff376 add missing LICENSE file (mandatory for downstream) 2014-12-08 06:25:08 +01:00
Pierrick Charron
8aece537c1 1.0.6 => 1.0.7-dev 2014-12-07 21:57:57 -05:00
Pierrick Charron
ca0de7d66a Release stomp v1.0.6 2014-12-07 21:53:45 -05:00
Pierrick Charron
200bd35bb2 Fix error message mismatch 2014-12-07 21:15:03 -05:00
Pierrick Charron
059566498b Make stomp_set_error() to be printf like (mi+php at aldan dot algebra dot com) 2014-12-07 18:49:04 -05:00
Pierrick Charron
d37e34917d Make sure connection is closed on error 2014-12-07 14:40:23 -05:00
Pierrick Charron
189b8dcfc2 Fixed bug #64671 (Add stomp_nack and Stomp::nack functions). 2014-12-07 13:22:01 -05:00
Pierrick Charron
026798d7c4 Update package.xml for merged #68497 2014-12-07 13:03:31 -05:00
Pierrick Charron
aafb968d49 Merge remote-tracking branch 'github-fntlnz/fix-bug-68497' 2014-12-07 13:01:37 -05:00
Pierrick Charron
c338977f53 Update package.xml for Bug #67170 2014-12-07 12:55:45 -05:00
Lorenzo Fontana
8e18eb079d Fix Bug #68497 Stomp client doesn't parse ERROR response on CONNECT 2014-12-02 19:28:20 +01:00
Yarek Tyshchenko
214d0eb602 Disable Nagle's Algorithm by adding TCP_NODELAY option to the socket
Signed-off-by: Gennady Feldman <gena01@gmail.com>
2014-12-01 10:43:38 -05:00
Peter Petermann
beb86e70fe added fix be marcelog, see #59970 2013-03-17 17:33:02 +01:00
Pierrick Charron
5ac6a47e5d Remove compilation warnings 2012-11-21 08:59:02 -05:00
Pierrick Charron
6dff7f7fd1 Remove useless new line 2012-11-20 21:45:38 -05:00
Pierrick Charron
d705083ab3 Merge branch 'read_buffer'
* read_buffer:
  Reimplement read_line and read_buffer
  read buffer implementation on top of stomp_recv
2012-11-20 21:28:31 -05:00
Pierrick Charron
e7feab2950 Reimplement read_line and read_buffer 2012-11-20 21:25:46 -05:00
Pierrick Charron
19f47cd105 read buffer implementation on top of stomp_recv 2012-11-20 19:54:00 -05:00
Pierrick Charron
9e0839fff1 Rename few things 2012-11-20 19:12:26 -05:00
Pierrick Charron
36c7391402 Auto ack for this test 2012-11-20 17:34:51 -05:00
Pierrick Charron
6a0fd1393f Package.xml 2012-11-20 17:11:12 -05:00
Pierrick Charron
d4c9f11e07 Combine the two sendto call in one 2012-11-20 17:00:43 -05:00
Pierrick Charron
0a6e6b2f5a s#writeable#writable#g 2012-11-19 09:03:22 -05:00
Pierrick Charron
a1619b9aa1 Add new note 2012-11-18 20:31:55 -05:00
Pierrick Charron
520e311c83 Fix rabbitmq compatibility 2012-11-18 20:20:23 -05:00
Pierrick Charron
71caee45bc Add two new ini config default_username and default_password 2012-11-18 19:33:12 -05:00
Pierrick Charron
5f7d260c05 Fix stomp_read_frame when buffered 2012-11-18 19:23:27 -05:00
Pierrick Charron
ce374724b9 1.0.5 => 1.0.6-dev 2012-11-18 17:35:17 -05:00
Pierrick Charron
5a3c1fe602 Package XML 2012-11-18 17:32:28 -05:00
Pierrick Charron
04fd7131b1 Prepare version number for release 2012-11-18 17:32:21 -05:00
Pierrick Charron
acde8ab523 Add tests for binary safety 2012-11-18 17:12:26 -05:00
Pierrick Charron
8e8861ea8f Auto ack received messages for readframe test 2012-11-18 17:08:14 -05:00
Pierrick Charron
7d61983988 Fixed bug #59972 - Make body binary safe 2012-11-18 17:05:32 -05:00
Pierrick Charron
5793a7efee Add a buffer for receipts 2012-11-18 11:09:14 -05:00
Pierrick Charron
d83dfa7117 Fix memory leak when Stomp can not write it's message 2012-11-17 17:27:40 -05:00
Pierrick Charron
49ae478103 Fix test to work on all versions of activeMQ 2012-11-17 12:38:54 -05:00
Pierrick Charron
b68730beb9 New maintenance version 2012-09-17 14:13:40 +00:00
Pierrick Charron
4886ef7435 Fixed bug #62831 (Stomp module seems not initializing SSL library first). (Patch by lwhsu at lwhsu dot org) 2012-08-16 03:23:42 +00:00
Pierrick Charron
6643708893 Add item in the todo list 2011-09-14 15:50:08 +00:00
Pierrick Charron
43be636313 Make test work with -dev 2011-09-09 19:27:26 +00:00
Pierrick Charron
4afeec47b5 Fix macros 2011-09-01 14:19:38 +00:00
Pierrick Charron
e95a759e70 Modify the phpinfo to display either or not the SSL support is enabled 2010-10-16 03:50:50 +00:00
Pierrick Charron
df9b30bbb3 Update the php documentation 2010-10-13 03:39:55 +00:00
Pierrick Charron
957f9528dc Tag 1.0.3 and bump trunk version 2010-10-13 03:28:20 +00:00
Pierrick Charron
98ed6eac3c Fixed default read timeout usec 2010-10-13 03:13:56 +00:00
Pierrick Charron
61327e6fa7 Fixed bug #18772 (setTimeout usecs not honored). 2010-10-13 03:13:19 +00:00
Pierrick Charron
90ef82399f Remove useless call to zend_hash_internal_pointer_reset 2010-08-20 05:36:18 +00:00
Pierrick Charron
8655cf0971 Update package.xml 2010-08-13 14:06:56 +00:00
Pierrick Charron
77271afef3 Modify package.xml and version number for release 1.0.2 2010-08-13 13:51:33 +00:00
Pierrick Charron
d667481cd7 Coding standards 2010-08-12 03:27:21 +00:00
Pierrick Charron
e4b0c389d6 Avoid too many call to php_pollfd_for_ms (this fix SSL connection problem) 2010-08-12 03:21:53 +00:00
Pierrick Charron
cc688cd647 tag 1.0.1 release 2010-08-03 13:21:20 +00:00
Pierrick Charron
c3d53e5f2e Update tests to match new changes 2010-07-27 06:09:14 +00:00
Pierrick Charron
7d24da3a22 Update package.xml with recent changes 2010-07-27 05:55:15 +00:00
Pierrick Charron
078bac3324 New details property in the StompException class
New method StompException::getDetails()
Add the body content in the Stomp::Error() method
2010-07-27 05:48:59 +00:00
Pierrick Charron
ca58640f70 Fix memory leak 2010-07-26 05:11:37 +00:00
Pierrick Charron
f444d89b61 TODO list 2010-06-09 20:31:41 +00:00
Pierrick Charron
97ab0bcdd2 Add more specific error messages when receipt is not valid 2010-06-08 03:56:04 +00:00
Pierrick Charron
cabdb94a17 Update package.xml 2010-06-07 02:55:28 +00:00
Pierrick Charron
928bc0975e Code cleaning 2010-06-07 02:53:34 +00:00
Pierrick Charron
56c9d3d3f9 Fixed bug #17262 (Server is not responding on win32). 2010-06-07 02:31:30 +00:00
Pierrick Charron
3c59221f67 Remove unused variable 2010-06-07 01:06:18 +00:00
Pierrick Charron
2c77d459c0 Update tests 2010-06-07 00:07:31 +00:00
Pierrick Charron
cb81e1651a Update package.xml 2010-06-06 18:31:29 +00:00
Pierrick Charron
994b70f0b6 Make the php_stomp.c compile with the new runtime cache 2010-06-06 18:22:03 +00:00
Pierrick Charron
3b33476692 Add headers param to the constructor to allow things like activemq durable/retroactive client support 2010-03-17 08:28:53 +00:00
Pierrick Charron
4fcd961e8b Bump to stable 2010-02-12 04:55:47 +00:00
Pierrick Charron
781c5830c3 Update the phpdoc in the example 2010-02-01 14:09:23 +00:00
Pierrick Charron
a4ba550d94 Tag release 0.4.1 2010-01-19 05:16:24 +00:00
Pierrick Charron
7293ab3977 Fix compilation issue on 5.2.x 2010-01-18 13:53:47 +00:00
Pierrick Charron
b3743c3f77 Package.xml file ready to release 2010-01-18 03:25:50 +00:00
Pierrick Charron
e2a724ed9b New test for the stomp extension 2010-01-18 03:25:16 +00:00
Pierrick Charron
3b149a22b1 Add new methods/functions arg info 2010-01-18 02:42:16 +00:00
Pierrick Charron
ec0f049612 # Change version to 0.4.0-dev
# Modification of the package.xml for a future release
2010-01-17 14:02:02 +00:00
Pierrick Charron
3e73da930b Adds the ability to specify an alternative class for readFrame 2010-01-16 06:07:42 +00:00
Pierrick Charron
f50e766836 New copyright for 2010 2010-01-04 20:22:09 +00:00
Pierrick Charron
7d0911ffd5 Fix typo in comments 2009-12-31 20:34:08 +00:00
Pierrick Charron
8a19087270 Move the use_ssl bool into the option struct 2009-12-28 01:05:04 +00:00
Pierrick Charron
7c135b9664 First step to make the stomp.c/stomp.h more reusable 2009-12-28 01:01:07 +00:00
Pierrick Charron
b986c891d8 Rename frame_destroy => stomp_free_frame 2009-12-27 23:51:12 +00:00
Pierrick Charron
d1934cf31b Rename stomp_new by stomp_init 2009-12-27 18:53:12 +00:00
Pierrick Charron
26427f95cd Remove useless TSRM from the stomp_close 2009-12-27 18:48:22 +00:00
Pierrick Charron
5940fe8264 Remove useless TSRM from the stomp_new 2009-12-27 18:36:22 +00:00
Pierrick Charron
c7ea4d16e0 Fix extern declaration warning 2009-12-27 04:15:15 +00:00
Pierrick Charron
332a4d8a05 Add svn keywords Id and Revision 2009-12-15 14:19:32 +00:00
Pierrick Charron
db3abd3904 Code cleaning 2009-12-05 19:49:26 +00:00
26 changed files with 1904 additions and 1127 deletions

28
.gitignore vendored Normal file
View File

@@ -0,0 +1,28 @@
.deps
.libs/
Makefile
Makefile.fragments
Makefile.global
Makefile.objects
acinclude.m4
aclocal.m4
autom4te.cache/
config.guess
config.h
config.h.in
config.log
config.nice
config.status
config.sub
configure
configure.in
install-sh
libtool
ltmain.sh
missing
mkinstalldirs
modules/
php_stomp.lo
run-tests.php
stomp.la
stomp.lo

View File

@@ -1,2 +0,0 @@
this extension is experimental, its functions may change their names or move
to extension all together so do not rely to much on them you have been warned!

68
LICENSE Normal file
View File

@@ -0,0 +1,68 @@
--------------------------------------------------------------------
The PHP License, version 3.01
Copyright (c) 1999 - 2014 The PHP Group. All rights reserved.
--------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
modification, is permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
3. The name "PHP" must not be used to endorse or promote products
derived from this software without prior written permission. For
written permission, please contact group@php.net.
4. Products derived from this software may not be called "PHP", nor
may "PHP" appear in their name, without prior written permission
from group@php.net. You may indicate that your software works in
conjunction with PHP by saying "Foo for PHP" instead of calling
it "PHP Foo" or "phpfoo"
5. The PHP Group may publish revised and/or new versions of the
license from time to time. Each version will be given a
distinguishing version number.
Once covered code has been published under a particular version
of the license, you may always continue to use it under the terms
of that version. You may also choose to use such covered code
under the terms of any subsequent version of the license
published by the PHP Group. No one other than the PHP Group has
the right to modify the terms applicable to covered code created
under this License.
6. Redistributions of any form whatsoever must retain the following
acknowledgment:
"This product includes PHP software, freely available from
<http://www.php.net/software/>".
THIS SOFTWARE IS PROVIDED BY THE PHP DEVELOPMENT TEAM ``AS IS'' AND
ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PHP
DEVELOPMENT TEAM OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.
--------------------------------------------------------------------
This software consists of voluntary contributions made by many
individuals on behalf of the PHP Group.
The PHP Group can be contacted via Email at group@php.net.
For more information on the PHP Group and the PHP project,
please see <http://www.php.net>.
PHP includes the Zend Engine, freely available at
<http://www.zend.com>.

5
TODO Normal file
View File

@@ -0,0 +1,5 @@
- Add the ability to connect to a network of brokers
(Cf: http://activemq.apache.org/networks-of-brokers.html)
- Add Stomp 1.1 full support
- Verify if we need to call recv with MSG_PEEK for the newline char
or if the current implementation is enough (cf bug #59217)

View File

@@ -5,11 +5,12 @@ class Stomp {
/**
* Connect to server
*
* @param string $broker Broker URI
* @param string $broker The broker URI
* @param string $username The username
* @param string $password The password
* @param array $headers additional headers (example: receipt).
*/
public function __construct($broker = null, $username = null, $password = null) {
public function __construct($broker = null, $username = null, $password = null, array $headers = array()) {
}
/**
@@ -33,30 +34,30 @@ class Stomp {
*
* @param string $destination indicates where to send the message
* @param string|StompFrame $msg message to be sent
* @param array $properties extra properties (example: receipt, transaction)
* @param array $headers additional headers (example: receipt).
* @return boolean TRUE on success, or FALSE on failure
*/
public function send($destination, $msg, array $properties = array()) {
public function send($destination, $msg, array $headers = array()) {
}
/**
* Register to listen to a given destination
*
* @param string $destination indicates which destination to subscribe to
* @param array $properties extra properties (example: receipt, transaction, id)
* @param array $headers additional headers (example: receipt).
* @return boolean TRUE on success, or FALSE on failure
*/
public function subscribe($destination, array $properties = array()) {
public function subscribe($destination, array $headers = array()) {
}
/**
* Remove an existing subscription
*
* @param string $destination indicates which subscription to remove
* @param array $properties extra properties (example: receipt, transaction, id)
* @param array $headers additional headers (example: receipt).
* @return boolean TRUE on success, or FALSE on failure
*/
public function unsubscribe($destination, array $properties = array()) {
public function unsubscribe($destination, array $headers = array()) {
}
/**
@@ -70,9 +71,10 @@ class Stomp {
/**
* Read the next frame
*
* @return StompFrame on success, or FALSE on failure
* @param string $className name of the class to instantiate.
* @return object on success, or FALSE on failure
*/
public function readFrame() {
public function readFrame($className = 'stompFrame') {
}
/**
@@ -106,10 +108,10 @@ class Stomp {
* Acknowledge consumption of a message from a subscription using client acknowledgment
*
* @param string|StompFrame $msg message/messageId to be acknowledged
* @param array $properties extra properties (example: receipt, transaction)
* @param array $headers additional headers (example: receipt).
* @return boolean TRUE on success, or FALSE on failure
*/
public function ack($msg, array $properties = array()) {
public function ack($msg, array $headers = array()) {
}
/**
@@ -162,4 +164,12 @@ class StompFrame {
}
class StompException extends Exception {
/**
* Get the stomp server error details
*
* @return string
*/
public function getDetails() {
}
}

View File

@@ -14,9 +14,10 @@ function stomp_version() {
* @param string $broker broker URI
* @param string $username The username
* @param string $password The password
* @param array $headers additional headers (example: receipt).
* @return Ressource stomp connection identifier on success, or FALSE on failure
*/
function stomp_connect($broker = null, $username = null, $password = null) {
function stomp_connect($broker = null, $username = null, $password = null, array $headers = array()) {
}
/**
@@ -43,10 +44,10 @@ function stomp_close($link) {
* @param ressource $link identifier returned by stomp_connect
* @param string $destination indicates where to send the message
* @param string|StompFrame $msg message to be sent
* @param array $properties extra properties (example: receipt, transaction)
* @param array $headers additional headers (example: receipt).
* @return boolean TRUE on success, or FALSE on failure
*/
function stomp_send($link, $destination, $msg, array $properties = array()) {
function stomp_send($link, $destination, $msg, array $headers = array()) {
}
/**
@@ -54,10 +55,10 @@ function stomp_send($link, $destination, $msg, array $properties = array()) {
*
* @param ressource $link identifier returned by stomp_connect
* @param string $destination indicates which destination to subscribe to
* @param array $properties extra properties (example: receipt, transaction, id)
* @param array $headers additional headers (example: receipt).
* @return boolean TRUE on success, or FALSE on failure
*/
function stomp_subscribe($link, $destination, array $properties = array()) {
function stomp_subscribe($link, $destination, array $headers = array()) {
}
/**
@@ -65,10 +66,10 @@ function stomp_subscribe($link, $destination, array $properties = array()) {
*
* @param ressource $link identifier returned by stomp_connect
* @param string $destination indicates which subscription to remove
* @param array $properties extra properties (example: receipt, transaction, id)
* @param array $headers additional headers (example: receipt).
* @return boolean TRUE on success, or FALSE on failure
*/
function stomp_unsubscribe($link, $destination, array $properties = array()) {
function stomp_unsubscribe($link, $destination, array $headers = array()) {
}
/**
@@ -124,10 +125,10 @@ function stomp_abort($link, $transaction_id) {
*
* @param ressource $link identifier returned by stomp_connect
* @param string|StompFrame $msg message/messageId to be acknowledged
* @param array $properties extra properties (example: receipt, transaction)
* @param array $headers additional headers (example: receipt).
* @return boolean TRUE on success, or FALSE on failure
*/
function stomp_ack($link, $msg, array $properties = array()) {
function stomp_ack($link, $msg, array $headers = array()) {
}
/**

View File

@@ -4,7 +4,7 @@
<channel>pecl.php.net</channel>
<summary>Stomp client extension</summary>
<description>
This extension allows php applications to communicate with any Stomp compliant Message Brokers through easy object oriented and procedural interfaces.
This extension allows php applications to communicate with any Stomp compliant Message Brokers through easy object oriented and procedural interfaces.
</description>
<lead>
<name>Pierrick Charron</name>
@@ -12,20 +12,22 @@ This extension allows php applications to communicate with any Stomp compliant M
<email>pierrick@php.net</email>
<active>yes</active>
</lead>
<date>2009-11-22</date>
<version><release>0.3.2</release><api>0.3.2</api></version>
<stability><release>beta</release><api>beta</api></stability>
<lead>
<name>Gennady Feldman</name>
<user>gena01</user>
<email>gena01@php.net</email>
<active>yes</active>
</lead>
<date>XXXX-XX-XX</date>
<version><release>1.0.X</release><api>1.0.X</api></version>
<stability><release>stable</release><api>stable</api></stability>
<license uri="http://www.php.net/license">PHP License</license>
<notes>
- Fixed bug #16936 (Module segfaults on readFrame if Frame > STOMP_BUFSIZE)
- Fixed bug #16933 (readFrame does not notice when server shuts down)
- Fixed bug #16930 (readFrame reports error-frames as "timeout")
</notes>
<contents>
<dir name="/">
<file role="doc" name="CREDITS" />
<file role="doc" name="EXPERIMENTAL" />
<file role="doc" name="LICENSE" />
<file role="src" name="config.m4" />
<file role="src" name="config.w32" />
<file role="src" name="php_stomp.c" />
@@ -45,6 +47,9 @@ This extension allows php applications to communicate with any Stomp compliant M
<file role="test" name="tests/008-unsubscribe/001.phpt" />
<file role="test" name="tests/009-readFrame/001.phpt" />
<file role="test" name="tests/009-readFrame/002.phpt" />
<file role="test" name="tests/009-readFrame/003.phpt" />
<file role="test" name="tests/009-readFrame/004.phpt" />
<file role="test" name="tests/009-readFrame/005.phpt" />
<file role="test" name="tests/010-timeout/001.phpt" />
<file role="test" name="tests/010-timeout/002.phpt" />
<file role="test" name="tests/011-commit/001.phpt" />
@@ -74,10 +79,140 @@ This extension allows php applications to communicate with any Stomp compliant M
<providesextension>stomp</providesextension>
<extsrcrelease>
<configureoption default="/usr" name="with-openssl-dir" prompt="OpenSSL install prefix (no to disable SSL support)" />
<configureoption default="/usr" name="with-openssl-dir" prompt="OpenSSL install prefix (no to disable SSL support)" />
</extsrcrelease>
<changelog>
<release>
<version><release>1.0.8</release><api>1.0.8</api></version>
<stability><release>stable</release><api>stable</api></stability>
<license uri="http://www.php.net/license">PHP License</license>
<date>2015-05-18</date>
<notes>
- Fix perm on source files. (Remi)
- Fixing PHP_STOMP_VERSION constant, per Remi's request. (Gennady)
</notes>
</release>
<release>
<version><release>1.0.7</release><api>1.0.7</api></version>
<stability><release>stable</release><api>stable</api></stability>
<license uri="http://www.php.net/license">PHP License</license>
<date>2015-05-15</date>
<notes>
- add LICENSE file as documentation (Remi)
- Fixed Windows compilation regression due to new TCP_NODELAY code. (Gennady Feldman)
- Fixed bug where error checking was missing after stomp_send(). (Gennady Feldman)
</notes>
</release>
<release>
<version><release>1.0.6</release><api>1.0.6</api></version>
<stability><release>stable</release><api>stable</api></stability>
<license uri="http://www.php.net/license">PHP License</license>
<date>2014-12-07</date>
<notes>
- Add two new ini options stomp.default_username and stomp.default_passowrd (Pierrick)
- General performance improvements (Pierrick)
- Fix stomp_read_frame when buffered (Pierrick)
- Fixed bug #59217 (Connections to RabbitMQ via CLI). (Pierrick).
- Fixed bug #59970 (acking a message makes rabbitmq disconnect the server). (Pierrick)
- Fixed bug #67170 (Disable Nagle's Algorithm with TCP_NODELAY, it delays sending small messages). (Yarek Tyshchenko)
- Fixed bug #68497 (Stomp client doesn't parse ERROR response on CONNECT). (Lorenzo Fontana)
- Fixed bug #64671 (Add stomp_nack and Stomp::nack functions). (Pierrick)
</notes>
</release>
<release>
<version><release>1.0.5</release><api>1.0.5</api></version>
<stability><release>stable</release><api>stable</api></stability>
<license uri="http://www.php.net/license">PHP License</license>
<date>2012-11-18</date>
<notes>
- Fix memory leak when Stomp can't write the message on the queue. (Pierrick)
- Add a buffer for receipts. (Pierrick)
- Fixed bug #62831 (Stomp module seems not initializing SSL library first).
(Patch by lwhsu at lwhsu dot org)
- Fixed bug #59972 (Message body are not binary safe). (Pierrick)
</notes>
</release>
<release>
<version><release>1.0.4</release><api>1.0.4</api></version>
<stability><release>stable</release><api>stable</api></stability>
<license uri="http://www.php.net/license">PHP License</license>
<date>2012-09-17</date>
<notes>
- Fix compatibility with 5.4
</notes>
</release>
<release>
<version><release>1.0.3</release><api>1.0.3</api></version>
<stability><release>stable</release><api>stable</api></stability>
<license uri="http://www.php.net/license">PHP License</license>
<date>2010-10-12</date>
<notes>
- Fixed bug #18772 (setTimeout usecs not honored)
</notes>
</release>
<release>
<version><release>1.0.2</release><api>1.0.2</api></version>
<stability><release>stable</release><api>stable</api></stability>
<license uri="http://www.php.net/license">PHP License</license>
<date>2010-08-13</date>
<notes>
- Fixed SSL connection bug introduced in 1.0.1
</notes>
</release>
<release>
<version><release>1.0.1</release><api>1.0.1</api></version>
<stability><release>stable</release><api>stable</api></stability>
<license uri="http://www.php.net/license">PHP License</license>
<date>2010-08-03</date>
<notes>
- Add new parameter to the constructor to allow client to send extra informations
- Add zend engine runtime cache support (introduced into trunk)
- Add new details property in the StompException class
- Add new StompException::getDetails() method
- Add the frame body content in the Stomp::Error() method
- Fixed bug #17262 (Server is not responding on win32)
</notes>
</release>
<release>
<version><release>1.0.0</release><api>1.0.0</api></version>
<stability><release>stable</release><api>stable</api></stability>
<license uri="http://www.php.net/license">PHP License</license>
<date>2010-02-11</date>
<notes>
- Bump to stable
</notes>
</release>
<release>
<version><release>0.4.1</release><api>0.4.1</api></version>
<stability><release>beta</release><api>beta</api></stability>
<license uri="http://www.php.net/license">PHP License</license>
<date>2010-01-19</date>
<notes>
- Fix compilation issue on PHP5.2 branch
</notes>
</release>
<release>
<version><release>0.4.0</release><api>0.4.0</api></version>
<stability><release>beta</release><api>beta</api></stability>
<license uri="http://www.php.net/license">PHP License</license>
<date>2010-01-17</date>
<notes>
- Adds the ability to specify an alternative class for readFrame
</notes>
</release>
<release>
<version><release>0.3.2</release><api>0.3.2</api></version>
<stability><release>beta</release><api>beta</api></stability>
<license uri="http://www.php.net/license">PHP License</license>
<date>2009-11-22</date>
<notes>
- Adds alt class
- Fixed bug #16936 (Module segfaults on readFrame if Frame > STOMP_BUFSIZE)
- Fixed bug #16933 (readFrame does not notice when server shuts down)
- Fixed bug #16930 (readFrame reports error-frames as "timeout")
</notes>
</release>
<release>
<version><release>0.3.1</release><api>0.3.1</api></version>
<stability><release>beta</release><api>beta</api></stability>
@@ -97,8 +232,8 @@ This extension allows php applications to communicate with any Stomp compliant M
- new stomp_connect_error() function (pierrick)
- stomp_begin, stomp_abort and stomp_commit now accept additional headers (pierrick)
- new connection timeout and read timeout ini configuration (pierrick)
- Fix a memory leak in stomp_read_line (pierrick)
- Better set of test (Pierrick and Anis)
- Fix a memory leak in stomp_read_line (pierrick)
- Better set of test (Pierrick and Anis)
</notes>
</release>
<release>
@@ -108,7 +243,7 @@ This extension allows php applications to communicate with any Stomp compliant M
<date>2009-11-01</date>
<notes>
- Windows build fix (kalle)
- Add SSL support (pierrick)
- Add SSL support (pierrick)
</notes>
</release>
<release>
@@ -117,9 +252,8 @@ This extension allows php applications to communicate with any Stomp compliant M
<license uri="http://www.php.net/license">PHP License</license>
<date>2009-10-30</date>
<notes>
- Initial PECL release. (pierrick)
- Initial PECL release. (pierrick)
</notes>
</release>
</changelog>
</package>

1529
php_stomp.c Executable file → Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2009 The PHP Group |
| Copyright (c) 1997-2010 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -24,15 +24,12 @@
#include "stomp.h"
typedef struct _stomp_object {
zend_object std;
stomp_t *stomp;
zend_object std;
stomp_t *stomp;
} stomp_object_t;
#define PHP_STOMP_EXTNAME "Stomp"
#define PHP_STOMP_MAJOR_VERSION "0"
#define PHP_STOMP_MINOR_VERSION "3"
#define PHP_STOMP_PATCH_VERSION "2"
#define PHP_STOMP_VERSION PHP_STOMP_MAJOR_VERSION "." PHP_STOMP_MINOR_VERSION "." PHP_STOMP_PATCH_VERSION
#define PHP_STOMP_VERSION "1.0.9-dev"
#define PHP_STOMP_RES_NAME "stomp connection"
@@ -81,23 +78,28 @@ PHP_FUNCTION(stomp_begin);
PHP_FUNCTION(stomp_commit);
PHP_FUNCTION(stomp_abort);
PHP_FUNCTION(stomp_ack);
PHP_FUNCTION(stomp_nack);
PHP_FUNCTION(stomp_error);
PHP_FUNCTION(stomp_set_read_timeout);
PHP_FUNCTION(stomp_get_read_timeout);
PHP_METHOD(stompframe, __construct);
ZEND_BEGIN_MODULE_GLOBALS(stomp)
/* INI */
char *default_broker;
long read_timeout_sec;
long read_timeout_usec;
long connection_timeout_sec;
long connection_timeout_usec;
PHP_METHOD(stompexception, getDetails);
/* Others */
long error_no;
char *error_msg;
ZEND_BEGIN_MODULE_GLOBALS(stomp)
/* INI */
char *default_broker;
long read_timeout_sec;
long read_timeout_usec;
long connection_timeout_sec;
long connection_timeout_usec;
char *default_username;
char *default_password;
/* Others */
long error_no;
char *error_msg;
ZEND_END_MODULE_GLOBALS(stomp)
#ifdef ZTS

944
stomp.c

File diff suppressed because it is too large Load Diff

87
stomp.h Executable file → Normal file
View File

@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2009 The PHP Group |
| Copyright (c) 1997-2010 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -30,45 +30,68 @@
#define STOMP_BUFSIZE 4096
#define INIT_STOMP_FRAME(f) \
f = (stomp_frame_t *) emalloc(sizeof(stomp_frame_t)); \
f->command = NULL; f->body = NULL; \
ALLOC_HASHTABLE(f->headers); \
zend_hash_init(f->headers, 0, NULL, NULL, 0);
f = (stomp_frame_t *) emalloc(sizeof(stomp_frame_t)); \
f->command = NULL; f->body = NULL; \
ALLOC_HASHTABLE(f->headers); \
zend_hash_init(f->headers, 0, NULL, NULL, 0);
typedef struct _stomp {
php_socket_t fd;
php_sockaddr_storage localaddr;
char *host;
unsigned short port;
int status;
char *error;
int errnum;
long read_timeout_sec;
long read_timeout_usec;
char *session;
typedef struct _stomp_options {
long connect_timeout_sec;
long connect_timeout_usec;
long read_timeout_sec;
long read_timeout_usec;
#if HAVE_STOMP_SSL
SSL *ssl_handle;
int use_ssl;
#endif
} stomp_t;
int use_ssl;
#endif
} stomp_options_t;
typedef struct _stomp_frame {
char *command;
int command_length;
HashTable *headers;
char *body;
int body_length;
char *command;
int command_length;
HashTable *headers;
char *body;
int body_length;
} stomp_frame_t;
stomp_t *stomp_new(const char *host, unsigned short port, long read_timeout_sec, long read_timeout_usec TSRMLS_DC);
int stomp_connect(stomp_t *stomp TSRMLS_DC);
void stomp_close(stomp_t *stomp TSRMLS_DC);
typedef struct _stomp_frame_stack {
stomp_frame_t *frame;
struct _stomp_frame_stack *next;
} stomp_frame_stack_t;
typedef struct _stomp {
php_socket_t fd;
php_sockaddr_storage localaddr;
stomp_options_t options;
char *host;
unsigned short port;
int status;
char *error;
int errnum;
char *error_details;
char *session;
#if HAVE_STOMP_SSL
SSL *ssl_handle;
#endif
stomp_frame_stack_t *frame_stack;
struct {
size_t size;
char buf[STOMP_BUFSIZE];
char *pos;
} read_buffer;
} stomp_t;
stomp_t *stomp_init();
int stomp_connect(stomp_t *stomp, const char *host, unsigned short port TSRMLS_DC);
void stomp_close(stomp_t *stomp);
int stomp_send(stomp_t *connection, stomp_frame_t *frame TSRMLS_DC);
stomp_frame_t *stomp_read_frame(stomp_t *connection);
stomp_frame_t *stomp_read_frame_ex(stomp_t *connection, int use_stack);
int stomp_valid_receipt(stomp_t *connection, stomp_frame_t *frame);
int stomp_select(stomp_t *connection);
void stomp_set_error(stomp_t *stomp, const char *error, int errnum);
void frame_destroy(stomp_frame_t *frame);
int stomp_select_ex(stomp_t *connection, const long int sec, const long int usec);
void stomp_set_error(stomp_t *stomp, const char *error, int errnum, const char *fmt, ...) ZEND_ATTRIBUTE_PTR_FORMAT(printf, 4, 0);
void stomp_free_frame(stomp_frame_t *frame);
#define stomp_select(s) stomp_select_ex(s, s->options.read_timeout_sec, s->options.read_timeout_sec)
#define stomp_read_frame(c) stomp_read_frame_ex(c, 1)
#endif /* _STOMP_H_ */
/*

View File

@@ -7,4 +7,4 @@ Test stomp_version()
echo stomp_version();
?>
--EXPECTF--
%d.%d.%d
%d.%d.%s

View File

@@ -0,0 +1,14 @@
--TEST--
Test stomp_connect() - Test error on CONNECT
--SKIPIF--
<?php if (!extension_loaded("stomp")) print "skip"; ?>
--FILE--
<?php
try {
$stomp = new Stomp('tcp://localhost', 'anotpresentusername1234');
} catch (Exception $e) {
var_dump(get_class($e));
}
?>
--EXPECTF--
string(14) "StompException"

View File

@@ -14,7 +14,6 @@ stomp_send($link, '/queue/test-06', array());
var_dump(stomp_send($link, '/queue/test-06', ''));
var_dump(stomp_send($link, '/queue/test-06', 'A realMessage'));
var_dump(stomp_send($link, '/queue/test-06', 'بياريك شارون'));
var_dump(stomp_send($link, 'بياريك شارون', 'بياريك شارون', array('receipt' => 'message-123')), stomp_error($link));
?>
--EXPECTF--
@@ -24,5 +23,3 @@ Warning: stomp_send(): Expects parameter %d to be a string or a StompFrame objec
bool(true)
bool(true)
bool(true)
bool(false)
string(%d) "%s"

View File

@@ -14,7 +14,6 @@ $s->send('/queue/test-06', array());
var_dump($s->send('/queue/test-06', ''));
var_dump($s->send('/queue/test-06', 'A realMessage'));
var_dump($s->send('/queue/test-06', 'بياريك شارون'));
var_dump($s->send('بياريك شارون', 'بياريك شارون', array('receipt' => 'message-123')), $s->error());
?>
--EXPECTF--
@@ -24,5 +23,3 @@ Warning: Stomp::send(): Expects parameter %d to be a string or a StompFrame obje
bool(true)
bool(true)
bool(true)
bool(false)
string(%d) "%s"

14
tests/006-send/003.phpt Normal file
View File

@@ -0,0 +1,14 @@
--TEST--
Test stomp::send() - test send with receipt
--SKIPIF--
<?php
if (!extension_loaded("stomp")) print "skip";
if (!stomp_connect()) print "skip";
?>
--FILE--
<?php
$s = new Stomp();
var_dump($s->send('/queue/test-06', 'A real message', array('receipt' => 'message-12345')));
?>
--EXPECTF--
bool(true)

View File

@@ -14,4 +14,4 @@ $s->subscribe('/queue/test', 'string');
--EXPECTF--
Warning: Stomp::subscribe(): Destination can not be empty in %s on line %d
Catchable fatal error: Argument 2 passed to Stomp::subscribe() must be an array, string given in %s on line %d
Catchable fatal error: Argument 2 passed to Stomp::subscribe() must be %s array, string given in %s on line %d

View File

@@ -14,4 +14,4 @@ $s->unsubscribe('/queue/test', 'string');
--EXPECTF--
Warning: Stomp::unsubscribe(): Destination can not be empty in %s on line %d
Catchable fatal error: Argument 2 passed to Stomp::unsubscribe() must be an array, string given in %s on line %d
Catchable fatal error: Argument 2 passed to Stomp::unsubscribe() must be %s array, string given in %s on line %d

View File

@@ -9,9 +9,9 @@ Test stomp::readFrame() - tests functionnality and parameters
<?php
$s = new Stomp();
$s->send('/queue/test-09', 'A test Message');
$s->subscribe('/queue/test-09');
$s->subscribe('/queue/test-09', array('ack' => 'auto'));
var_dump($s->readFrame()->body);
var_dump($s->readFrame('frame'));
var_dump($s->readFrame());
?>
--EXPECTF--

View File

@@ -9,14 +9,12 @@ Test stomp_read_frame() - test functionnality and parameters
<?php
$link = stomp_connect();
stomp_send($link, '/queue/test-09', 'A test Message');
stomp_subscribe($link, '/queue/test-09');
stomp_subscribe($link, '/queue/test-09', array('ack' => 'auto'));
$result = stomp_read_frame($link);
var_dump($result['body']);
var_dump(stomp_read_frame($link, 'frame'));
var_dump(stomp_read_frame($link));
?>
--EXPECTF--
string(14) "A test Message"
Warning: stomp_read_frame() expects exactly 1 parameter, 2 given in %s on line %d
NULL
bool(false)

View File

@@ -0,0 +1,27 @@
--TEST--
Test stomp::readFrame() - custom frame class
--SKIPIF--
<?php
if (!extension_loaded("stomp")) print "skip";
if (!stomp_connect()) print "skip";
?>
--FILE--
<?php
class customFrame extends stompFrame
{
public function __construct($cmd, $headers, $body)
{
parent::__construct($cmd, $headers, $body);
}
}
$s = new Stomp();
$s->send('/queue/test-09', 'A test Message');
$s->subscribe('/queue/test-09', array('ack' => 'auto'));
$frame = $s->readFrame('customFrame');
var_dump(get_class($frame), $frame->body);
?>
--EXPECT--
string(11) "customFrame"
string(14) "A test Message"

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,26 @@
--TEST--
Test stomp::readFrame() - test frame stack
--SKIPIF--
<?php
if (!extension_loaded("stomp")) print "skip";
if (!stomp_connect()) print "skip";
?>
--FILE--
<?php
$s = new Stomp();
var_dump($s->subscribe('/queue/test-buffer', array('ack' => 'auto')));
var_dump($s->send('/queue/test-buffer', "Message1", array('receipt' => 'msg-1')));
var_dump($s->send('/queue/test-buffer', "Message2", array('receipt' => 'msg-2')));
var_dump($s->send('/queue/test-buffer', "Message3", array('receipt' => 'msg-3')));
var_dump($s->readFrame()->body);
var_dump($s->readFrame()->body);
var_dump($s->readFrame()->body);
?>
--EXPECTF--
bool(true)
bool(true)
bool(true)
bool(true)
string(8) "Message1"
string(8) "Message2"
string(8) "Message3"

View File

@@ -17,7 +17,7 @@ var_dump($s->send('/queue/test-011-commit', 'bar', array('transaction' => 't1'))
// sends a message to the queue and asks for a receipt
$s->send('/queue/test-011-commit', 'bar', array('transaction' => 't2', 'receipt' => 'tptp'));
var_dump($s->error());
echo gettype($s->error()) . PHP_EOL;
// commits a valid transaction
var_dump($s->commit('t1'));
@@ -28,15 +28,15 @@ var_dump($s->commit(null));
// commits a non valid transaction (a transaction id that does not exist) and asks for a receipt
$s->commit('t2', array('receipt' => 'commit-key'));
var_dump($s->error());
echo gettype($s->error());
unset($s);
?>
--EXPECTF--
bool(true)
bool(true)
string(%d) "Invalid transaction id: %s"
string
bool(true)
bool(false)
bool(true)
string(%d) "Must specify the transaction you are committing"
string

View File

@@ -19,7 +19,7 @@ try {
$stomp->send($queue, $msg);
/* subscribe to messages from the queue 'foo' */
$stomp->subscribe($queue);
$stomp->subscribe($queue, array('ack' => 'auto'));
/* read a frame */
$frame = $stomp->readFrame();