Commit Graph

192 Commits

Author SHA1 Message Date
Nan Xiao b6a860795c Fix redisvFormatCommand format parsing
Flags can occur in any order in format string, so we can't assume any order.

In original code, the redisvFormatCommand can process " %#+d" correctly,
but can't process "%+#d".

Closes #257
2015-01-05 16:39:30 -05:00
Matt Stancliff 9a753b4251 Add API to free hiredis (sds) formattings
External callers may not know about sdsfree, so let's
give them an easy way to know how to free their sds result.
2015-01-05 16:39:30 -05:00
Mareq 1b392eb796 Add API to free hiredis (char *) formattings
[Cleaned up:
  - name of function: freeRedis... -> redisFree...
  - return value of function (free doesn't return anything)
  - parameter type for function.
    - we don't need to free a char**, the char** is just
    for returning from the assignment functoin.]

Closes #250
2015-01-05 16:39:30 -05:00
mike 7c4d2557c4 Add support for SO_REUSEADDR
[This introduces some new API functions.]

* Adds new flag to the connection context indicating SO_REUSEADDR
  should be set.
* Adds max number of retries constant for when connect() hits
  EADDRNOTAVAIL.
* Adds new function, redisAsyncConnectBindWithReuse(), letting
  clients enable this functionality.

[Removed trailing whitespace in new header lines.]

Closes #264
2015-01-05 16:39:30 -05:00
jinguoli a1bc89b236 Improve calloc() correctness
[It doesn't _actually_ matter, but technically
the order argument is: (number of items, size of items)]

Closes #279
2015-01-05 16:39:30 -05:00
michael-grunder 40f7035ba4 Improve redisAppendCommandArgv performance
OK, perhaps the second time is a charm.  I forgot that I had
hiredis forked from a long time ago, so the initial pull
request was hosed.  :)

* Pulled in sdscatfmt() from Redis, and modified it to accept a
  size_t (%T) style format specifier.

* Pulled in sdsll2str() and sdsull2str() from Redis (needed by
  sdscatfmt).

* Added a new method, redisFormatSdsCommandArgv() which takes
  and sds* as the target, rather than char* (and uses sdscatfmt
  instead of sprintf for the construction).

I get roughly the following improvement:

Old: 1.044806
New: 0.481620

The benchmark code itself can be found here:
https://gist.github.com/michael-grunder/c92ef31bb632b3d0ad81

Closes #260
2015-01-05 11:21:38 -05:00
Daniel Melani 05b85ebe7f Less surprising behaviour.
Make redisFree() and freeReplyObject() less surprising by behaving just
like free(). That is, don't crash when passing in NULL.
2014-05-29 16:05:27 +02:00
Pieter Noordhuis a9c21e4d48 Fix const correctness 2014-04-09 22:30:04 -07:00
antirez 334525359a Upgrade sds to latest version
SDS is now broken out of Redis into its own project, so include
the latest version from the SDS repo.

This is a backport of the Redis commit doing the same to the bundled hiredis:
320fa02b9b
2014-04-09 17:02:42 -04:00
Axel Etcheverry 66192a0052 Add new redisAppendFormatedCommand with tests
Closes #202
2014-04-09 17:02:42 -04:00
Eddy Jansson ae30d58ff9 Add redisConnectFd() and redisFreeKeepFd()
These allows for easier integration of hiredis with external
code that wants to manage its fds, say for instance in a pool.

Closes #223
2014-04-09 17:02:42 -04:00
Matt Stancliff 37d25a392c Add ability to bind source address on connect
Some environments require binding to specific source addresses instead
of letting the system determine which IP a connection should originate
from.

Closes #233
2014-04-08 19:37:54 -04:00
Noah Williamsson fbf1bb648e Mark the timeout parameter as const in various functions
The struct timeval argument in redisConnectWithTimeout(),
redisConnectUnixWithTimeout(), redisSetTimeout(),
redisContextSetTimeout(), redisContextConnectTcp()
and redisContextConnectUnix() is never modified and can
therefore be marked as const.

Signed-off-by: Noah Williamsson <noah.williamsson@gmail.com>
2013-07-10 23:34:49 -07:00
Pieter Noordhuis c532edc27f Fix const-related compiler errors 2013-07-10 23:31:30 -07:00
Pieter Noordhuis 049346aa33 Merge pull request #132 from nwmcsween/constify
constify: constify some variables / functions
2013-07-10 23:13:36 -07:00
Wolfgang Richter 37a840dc2c Emphasize size_t length for %b formatting
Closes #121.
2013-07-10 23:05:39 -07:00
Allen.Dou 9dff5105fc Make KeepAlive optional
Make Connection KeepAlive being optional instead of default.
2013-04-30 00:11:57 +08:00
Pieter Noordhuis f05909cd53 Merge pull request #147 from hdoreau/d7e3268f48b457cb52336d264f8860b336faea9f
Prevent hiredis from crashing on memory allocation failure
2013-01-26 11:18:45 -08:00
Henri Doreau 814be4f5bd Made connect functions return NULL on alloc failures.
Updated documentation and examples accordingly.
2013-01-22 10:19:46 +01:00
Nathan McSween ba6c3c152c constify: constify some variables / functions 2012-11-12 19:48:21 +00:00
Fabien MARTY bf161d996f Try again later for EINTR errors (see issue #99) 2012-11-06 18:42:05 +01:00
antirez f7f022e4e0 On stack buffer to read replies set to 16k (was 2k).
It was verified experimentally that this value, on Linux kernels, provides
better performances compared to the 2k value. However larger values
apparently don't produce any noticeable effect on performances.
2012-08-21 15:10:16 +02:00
antirez 51ab89d899 Max depth of multi-bulk reply moved from 2 to 7.
Hiredis can handle multi bulk replies with a fixed (hardcoded) level of
nesting. This should be changed in the future in order to avoid
hardcoded limits. As a quick fix this commit moves the max nesting from 2
to 7, so that there are no problems when processing replies from the SLOWLOG
command, from Redis Sentinel, or generated by Redis Lua Scripts (that are
allowed to generate replies with any level of nesting).
2012-08-21 15:06:06 +02:00
antirez 7f095053c6 Configurable reader max idle buffer size.
Hiredis used to free unused redisReader buffers bigger than 16k. Now
this limit is configurable (see the documentation updated by this commit)
in order to allow working with big payloads without incurring to speed
penalty.
2012-08-21 15:01:47 +02:00
Chip Salzenberg 56ae8aa110 DRY list of integer formats 2011-12-20 10:06:23 -08:00
mrb 52a29a124b increase read depth by one, would allow ruby redis client to read from slowlog 2011-12-02 08:45:13 -05:00
John Zwinck 347528cf48 Fix minor inconsistencies in comment. 2011-11-28 16:37:35 -05:00
Pieter Noordhuis 2da784ce8f Abort on invalid format
There is no way we can guess the width of the argument when we cannot
infer its type from the format specifier.
2011-07-09 15:08:45 +02:00
Pieter Noordhuis 27c96dde77 Use correct type when calling va_arg in formatter 2011-07-09 15:08:45 +02:00
Pieter Noordhuis 375ba48eea Revert "Add function to retrieve formatted reply"
This reverts commit 77540aa316. The change
in buffer strategy is too large to put in a minor release. It is put in
a separate branch in the meantime, so it can be refined and released
together with a minor version bump.
2011-06-19 13:41:25 +02:00
Pieter Noordhuis 5f5b3d9787 Fix for issue #45 2011-06-09 09:25:09 +02:00
Pieter Noordhuis 77540aa316 Add function to retrieve formatted reply
This is done by only truncating the read buffer once a full reply has
been read. The buffer is no longer truncated halfway through reading a
reply. In addition: pass offset/length of protocol and content via the
read tasks.
2011-05-05 17:01:34 +02:00
Pieter Noordhuis 0cb7c27d9c Update license 2011-04-21 22:46:23 +02:00
Pieter Noordhuis f3f02b6419 Let the async API segfault on OOM for now 2011-04-21 22:40:36 +02:00
Pieter Noordhuis c9dc93e1de Move chrtos to hiredis.c (not used elsewhere) 2011-04-21 22:39:19 +02:00
Pieter Noordhuis 8419b060f2 Handle OOM when doing blocking requests 2011-04-21 21:34:43 +02:00
Pieter Noordhuis e932709a66 More safety 2011-04-21 21:18:08 +02:00
Pieter Noordhuis dd5fc26457 Make command formatters gracefully abort when out of memory 2011-04-21 20:59:41 +02:00
Pieter Noordhuis d4ebb60d65 More OOM checks in the protocol reader 2011-04-21 18:50:10 +02:00
Pieter Noordhuis df1d693b03 Include fmacros.h to make sure strerror_p is defined on Linux 2011-04-21 16:24:03 +02:00
Pieter Noordhuis 965d42640f Rename *ReplyReader* to *Reader* 2011-04-21 16:03:32 +02:00
Pieter Noordhuis 0ee7c66818 Use static buffer for error string on context 2011-04-21 15:56:22 +02:00
Pieter Noordhuis 6d207ea98e Create protocol reader when creating context 2011-04-21 15:04:42 +02:00
Pieter Noordhuis a926232293 Reply object functions can be set by the user after creating the reader 2011-04-21 14:37:29 +02:00
Pieter Noordhuis 5ba49014da Privdata can be set directly on the struct 2011-04-21 14:34:03 +02:00
Pieter Noordhuis 2002218981 Remove useless casts 2011-04-21 14:31:02 +02:00
Pieter Noordhuis e1abacb7b4 Return when memory cannot be allocated 2011-04-21 14:28:39 +02:00
Pieter Noordhuis 026636b0cd Remove accessor functions now the redisReader struct is public 2011-04-21 14:27:03 +02:00
Pieter Noordhuis 727e1babec Make redisReader struct public 2011-04-21 14:21:58 +02:00
Pieter Noordhuis 26588f5007 Test if there is a freeObject function 2011-04-21 10:54:15 +02:00
Pieter Noordhuis eaf58bd32a Use pre-allocated buffer for error strings in reader 2011-04-20 17:06:19 +02:00
Pieter Noordhuis 5d78214557 First pass at making the protocol reader properly handle OOM 2011-04-20 13:15:58 +02:00
Pieter Noordhuis 421eec9a4d Lazily destroy protocol reader buffer 2011-04-03 18:04:15 +02:00
Pieter Noordhuis 921150fc8a Individual reply object functions may be NULL 2011-04-03 17:46:59 +02:00
Pieter Noordhuis 8e2c39200d Fix formatCommand to work with all empty interpolations 2011-03-06 11:38:07 +01:00
Pieter Noordhuis 2fc0d8756e Use select(2) for enforce a timeout on blocking connect(2) 2011-02-04 15:26:28 +01:00
Pieter Noordhuis 663d6d1258 Properly reset state after protocol error in reply reader 2011-01-27 14:39:34 +01:00
Pieter Noordhuis 864bce944b redisReplyReaderFeed should take a const char* 2011-01-27 14:07:06 +01:00
Pieter Noordhuis fbe756d838 Avoid warnings with -Wstrict-prototypes 2011-01-27 12:50:55 +01:00
Pieter Noordhuis 3e8cbd53cf Let sds.c figure out where the range stops 2011-01-19 18:10:27 +01:00
Pieter Noordhuis f6a501001c Discard consumed part of buffer less often 2011-01-19 18:01:01 +01:00
Pieter Noordhuis 43ab0f8018 Return error on socket timeout for a blocking context 2011-01-07 13:04:42 +01:00
Pieter Noordhuis e3776bfaa6 Add function to explicitly free an async context 2010-12-28 19:19:25 +01:00
Pieter Noordhuis a1e2c6dfed Add myself to license in some files 2010-12-16 22:08:46 +01:00
Pieter Noordhuis 7684d556bd Add (nearly) full printf support by delegating to vsprintf 2010-12-02 16:20:55 +01:00
Pieter Noordhuis 2635feb0ac Wait with setting CONNECTED until there is an fd 2010-12-01 12:54:47 +01:00
Pieter Noordhuis e73289a5c6 Use r->len in another spot 2010-11-26 15:25:19 +01:00
Pieter Noordhuis 4eab917a24 Use custom stroll 2010-11-26 14:48:04 +01:00
Pieter Noordhuis f14108361b Reply objects don't need to be calloc'ed 2010-11-26 14:47:01 +01:00
Pieter Noordhuis 5cf292cdd0 Use explicit buffer length field in the reply reader 2010-11-26 13:49:15 +01:00
Pieter Noordhuis adb0895e99 Rename 'parent' field in read tasks to 'obj' 2010-11-26 13:04:42 +01:00
Pieter Noordhuis b4dd17b57f Remove leftover line from earlier commit 2010-11-24 15:46:50 +01:00
Pieter Noordhuis 257a9d40a9 Set error on unexpected nesting of multi bulks 2010-11-24 15:46:05 +01:00
Pieter Noordhuis d4058be7b0 Add pointer to parent task in read tasks 2010-11-24 15:21:34 +01:00
Pieter Noordhuis 3d702d0bf1 Don't care if object returned by object function is NULL 2010-11-24 15:05:25 +01:00
Pieter Noordhuis 1927c643da Add privdata field to reply reader
This field is set in the read tasks that are passed to the reply object
functions. This allows to curry arbitrary data to these functions.
2010-11-24 12:27:46 +01:00
Pieter Noordhuis 56bbeb7049 Abort on code path that should never be taken 2010-11-22 10:38:07 +01:00
Pieter Noordhuis b6b96f776e Make error messages consistent in casing 2010-11-22 10:37:14 +01:00
Pieter Noordhuis cb89a472b6 Fix formatting literal percent characters 2010-11-22 10:00:45 +01:00
Pieter Noordhuis 9d9b8e1c79 Correctly format commands with empty interpolated values 2010-11-22 09:55:54 +01:00
Pieter Noordhuis 8ce0b3228d Finding \r\n without strstr is a little harder 2010-11-04 23:52:47 +01:00
Pieter Noordhuis 8b616d3547 The buffer length to feed should be a size_t 2010-11-04 20:55:03 +01:00
Pieter Noordhuis 183220bf60 Make moveToNextTask non-recursive 2010-11-04 13:26:45 +01:00
Pieter Noordhuis 9c4ee606d6 Use strchr in a loop rather than strstr 2010-11-04 13:26:22 +01:00
Pieter Noordhuis 2e5e9a49fd Return the reply type when the reply object function set is NULL 2010-11-04 13:15:44 +01:00
Pieter Noordhuis f25a5267cc Allow to connect using a unix socket from hiredis 2010-11-03 11:38:26 +01:00
Pieter Noordhuis 0ccb2c8d89 Add functiont to net.c to connect to a unix socket 2010-11-03 11:31:33 +01:00
Pieter Noordhuis e13674dd4e Expose redisGetReplyFromReader as public API 2010-11-03 00:40:07 +01:00
Pieter Noordhuis e51ddd7c2c Make setError receive an sds 2010-11-02 17:14:03 +01:00
Pieter Noordhuis b8b296654d Strip net.c down to the bare minimum 2010-11-02 17:09:26 +01:00
Pieter Noordhuis ffa8666a64 Change error reporting to have an explicit type
When there is an I/O error, errno should be used to find out what is
wrong. In other cases, errno cannot be used. So, use an explicit type in
Hiredis to define the different error scenarios that can occur.
2010-11-02 16:36:38 +01:00
Pieter Noordhuis 5fa8d30599 There is no longer need for a separate redisDisconnect 2010-11-01 14:20:51 +01:00
Pieter Noordhuis ef995accb2 Strip non-blocking callbacks from hiredis.c 2010-11-01 14:13:03 +01:00
Pieter Noordhuis 435e545dd2 Fix redisGetReply 2010-10-31 21:11:25 +01:00
Pieter Noordhuis 6042c569b1 Move include of stdio.h to hiredis.h for size_t 2010-10-31 17:25:20 +01:00
Pieter Noordhuis 1d4f16b571 Extract OOM killer to util.h 2010-10-31 17:21:49 +01:00
Pieter Noordhuis a0b9f04eaa Move stdarg.h include to the hiredis header file 2010-10-31 14:45:15 +01:00
Pieter Noordhuis 44a2d08b30 The reply object functions may not change the read tasks 2010-10-31 14:44:36 +01:00
Pieter Noordhuis 3f0394b8a9 Use a fixed size stack instead of a dynamic list for read tasks 2010-10-31 14:42:48 +01:00
Pieter Noordhuis f463734e91 Remove reply object functions from connect functions 2010-10-31 12:53:57 +01:00