Commit Graph

157 Commits (cfb6ca881132f7d44121935f55493e144511fbb6)

Author SHA1 Message Date
Alex Balashov d132d676e9 Renamed redisContext struct member 'unix' to 'unix_sock' to avoid encountering defined constant 'unix' in GNU C environment (see commit d8145d79ce).
Not all code using hiredis can compile using '-std=c99', and/or not all users are able to easily make that change to the build process of various open-source projects, so it is more pragmatic to choose a different identifier that does not impose this requirement.
2015-04-30 15:01:31 -04:00
Jan-Erik Rediger 31436c33ac Release version 0.13.0 2015-04-16 21:30:43 +02:00
Jan-Erik Rediger af598dbce5 Change copyright date and add copyright holder 2015-04-16 21:29:41 +02:00
Jan-Erik Rediger b676007253 Document reconnect method 2015-04-16 21:01:00 +02:00
Jan-Erik Rediger d9e0b0f6ab Implement a reconnect method for the client context
Originally implemented by @abedra as part of #306.

In case a write or read times out, we force an error state, because we
can't guarantuee that the next read will get the right data.
Instead we need to reconnect to have a clean-state connection, which is
now easily possible with this method.
2015-04-16 21:00:30 +02:00
Matt Stancliff 9be3a07d8a Release hiredis 0.12.1
Major fix:
  - `make install` now works properly

Minor fix:
  - `make test` now works after `make 32bit` on a 64-bit platform
  - added more automated travis tests
2015-01-26 10:08:40 -05:00
Matt Stancliff 7b51834c16 Increase version to 0.12.0 2015-01-22 16:00:38 -05:00
Matt Stancliff 195aca3427 Improve digit counting for multibulk creation
This replaces the old intlen() implementation with a slightly
faster way of counting digits.

Implementation taken from the same place where digits10() in
redis/src/util.c came from.

The old 'intlen' allowed negative inputs, but no usage in hiredis
was passing negative numbers, so that ability is removed.  Also,
the new implementation can count higher (uint64_t) instead of
limited to just int as before.

Fixes #295 by replacing implementation
2015-01-22 16:00:38 -05:00
Matt Stancliff cc20232406 Fix errno error buffers to not clobber errors
The strerror_r API has two flavors depending on system options.

The bad flavor uses a static buffer for returning results, so if
you save the pointer from strerror_r, the string you're referencing
becomes useless if anybody else calls strerror_r again

The good flavor does what you expect: it writes the error to your buffer.

This commit uses strerror_r directly if it's a good version or copies
the static buffer into our private buffer if it's a bad version.

Thanks to gemorin for explaining the problem and drafting a fix.

Fixes #239
2015-01-05 16:53:23 -05:00
tzickel ba3e74c408 Refactor reading code into read.c
Makes hiredis reading functions easier to include in external projects

[fixed all merge conflicts against current version]

Closes #249
2015-01-05 16:53:22 -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
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
Pieter Noordhuis a9c21e4d48 Fix const correctness 2014-04-09 22:30:04 -07: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
Allen.Dou 9dff5105fc Make KeepAlive optional
Make Connection KeepAlive being optional instead of default.
2013-04-30 00:11:57 +08:00
Allen.Dou 8d5bc445e5 SetKeepAlive
Keep client alive even though no command was sent to server for a long time.
2013-04-19 11:26:43 +08:00
Pieter Noordhuis 0fff0f182b Bump minor version because reader struct changed 2012-08-27 23:55:52 -07: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
Alex Leverington 01cce89d9d async: support for determining monitor mode, if so, repush replies callback in expectation of another reply. 2012-07-11 02:53:58 -05: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
Pieter Noordhuis 3cc6a7f299 Bump patch version 2011-06-19 13:45:36 +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 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 6d026b70d0 Bump version to 0.10.0 2011-04-22 12:15:50 +02:00
Pieter Noordhuis 0cb7c27d9c Update license 2011-04-21 22:46:23 +02:00
Pieter Noordhuis 8419b060f2 Handle OOM when doing blocking requests 2011-04-21 21:34:43 +02:00
Pieter Noordhuis d4ebb60d65 More OOM checks in the protocol reader 2011-04-21 18:50:10 +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 58caf62a52 Move prototypes around in header 2011-04-21 14:39:03 +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 026636b0cd Remove accessor functions now the redisReader struct is public 2011-04-21 14:27:03 +02:00
Pieter Noordhuis f0307c6172 Move definitions around 2011-04-21 14:23:59 +02:00
Pieter Noordhuis 41d4d9c6f4 Forward declaration is not necessary 2011-04-21 14:22:27 +02:00
Pieter Noordhuis 727e1babec Make redisReader struct public 2011-04-21 14:21:58 +02:00
Pieter Noordhuis eaf58bd32a Use pre-allocated buffer for error strings in reader 2011-04-20 17:06:19 +02: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 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 43ab0f8018 Return error on socket timeout for a blocking context 2011-01-07 13:04:42 +01:00
Pieter Noordhuis 3ce8d5b08b Change reply processing code to prepare for pub/sub 2010-12-31 15:49:21 +01:00
Pieter Noordhuis 29ea901b24 Fix the async free() and disconnect() functions
To make sure that these functions can also be called from functions
other than command callbacks, the flag IN_CALLBACK is introduced that
holds whether the context is currently executing a callback. If so,
redisAsyncFree() and redisAsyncDisconnect() should delegate their task
to the reply processor to avoid segfaults.
2010-12-28 20:29:29 +01:00
Pieter Noordhuis e3776bfaa6 Add function to explicitly free an async context 2010-12-28 19:19:25 +01:00
Pieter Noordhuis 0fbfa45f23 Bump version 2010-12-16 23:22:13 +01:00
Pieter Noordhuis a1e2c6dfed Add myself to license in some files 2010-12-16 22:08:46 +01:00
Pieter Noordhuis 2ef9c2e5f7 Redefine REDIS_REPLY_ERROR to be non-zero
When no reply object functions are defined, the reply type integer is
returned from redisGetReply(). This sets the *reply argument to the
consumed reply, where 0 means that it was not possible to consume a full
reply. With REDIS_REPLY_ERROR having the same value, there is no way to
tell the difference between an error reply and not consuming a reply.
2010-12-16 21:50:37 +01:00
Pieter Noordhuis 89c6927282 Bump version 2010-11-26 15:31:53 +01:00
Pieter Noordhuis adb0895e99 Rename 'parent' field in read tasks to 'obj' 2010-11-26 13:04:42 +01:00
Pieter Noordhuis d4058be7b0 Add pointer to parent task in read tasks 2010-11-24 15:21:34 +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
Ryan Tecco 74254a3b39 add extern "C" for C++ compiles 2010-11-19 12:25:04 +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 2e5e9a49fd Return the reply type when the reply object function set is NULL 2010-11-04 13:15:44 +01:00
Pieter Noordhuis 3be1d6e66d Add version information to hiredis.h 2010-11-03 11:50:46 +01:00
Pieter Noordhuis f25a5267cc Allow to connect using a unix socket from hiredis 2010-11-03 11:38:26 +01:00
Pieter Noordhuis e13674dd4e Expose redisGetReplyFromReader as public API 2010-11-03 00:40:07 +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 5db8008d97 Remove superfluous definition 2010-11-02 14:55:24 +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 4e3bd7893d Add support to lazily disconnect an asynchronous connection 2010-11-01 09:27:43 +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 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
Pieter Noordhuis 47e1f77149 Refactor internal function flow and add redisAppendCommand* family 2010-10-31 12:34:45 +01:00
Pieter Noordhuis 298e9325d7 First step in decoupling reply callbacks from internals 2010-10-31 10:56:24 +01:00
Pieter Noordhuis a3a405bcba Format a command using an argument vector 2010-10-31 10:34:29 +01:00
Pieter Noordhuis e95c9d4c5b Change redisFormatCommand to return the command in a char*
This allows users of the API to format a command without the need to
have all the sds functions included, only for free'ing the returned
wire-level command.
2010-10-30 20:38:29 +02:00
Pieter Noordhuis 171b5a24d4 Drop dependency on sds.h for exposed API 2010-10-30 17:47:19 +02:00
Pieter Noordhuis 1e7f5ae6bd Rename struct 2010-10-30 16:36:08 +02:00
Pieter Noordhuis d4b4a9128e Revert e5dd32d8 that added the const qualifier for command callbacks 2010-10-19 21:24:30 +02:00
Pieter Noordhuis ba42ab2ef8 Revert privdata in context callbacks to being non-const 2010-10-19 14:19:51 +02:00
Pieter Noordhuis 61ba85ce57 Move context callbacks into struct and make privdata const 2010-10-18 12:37:33 +02:00
Pieter Noordhuis 3dfacba4f7 Add comments for function prototypes in hiredis.h 2010-10-12 00:27:04 +02:00
Pieter Noordhuis a7acd97ad1 Move event_base code out of libevent.h
This removes the need to wrap an event_base pointer in the redisContext
struct and allows multiple connections to be used in a single
event_base. Also, use the *privdata argument to the provided callbacks
to curry the redisEvent struct around.
2010-10-11 18:33:15 +02:00
Nicolas Favre-Felix 135e9265ac Added event_base to libevent code. 2010-10-10 20:51:27 +02:00
Pieter Noordhuis 9cd3b03d84 Fire callback when the context is being disconnected by the user 2010-10-07 17:36:22 +02:00
Pieter Noordhuis e5dd32d809 Add const qualifier to privdata pointer for command callbacks 2010-10-07 17:35:31 +02:00
Pieter Noordhuis 1c245845ed Trigger callbacks when a command is issued or the context is free'd 2010-09-25 22:31:07 +02:00
Pieter Noordhuis 9e417047ed Add function to free an allocated context 2010-09-25 15:33:27 +02:00
Pieter Noordhuis bc3ec0f35a Rename HIREDIS_BLOCK to REDIS_BLOCK 2010-09-25 15:11:59 +02:00
Pieter Noordhuis a7d7618141 Deprecate the error object for I/O and protocol errors
Rather, use the return value REDIS_OK and REDIS_ERR to designate if
calling a function has a successful outcome. When there was an error in
performing the call the error field will be set inside the reader or the
context.
2010-09-25 15:09:13 +02:00
Pieter Noordhuis e6fb160b44 Rename defines HIREDIS_* to REDIS_* 2010-09-25 12:06:47 +02:00
Pieter Noordhuis bb668e1b94 Support callback functions in a non-blocking context 2010-09-25 12:06:00 +02:00
Pieter Noordhuis 817d26b81d Use context variable to keep state for a connection
The context supports both blocking and non-blocking connections. All
read and write events are not handled by hiredis, but hiredis exposes an
API for buffered reading/writing to Redis.
2010-09-24 18:42:22 +02:00
Pieter Noordhuis af8ba74cbf Rename functions to be more consistent, split feed from get reply 2010-09-21 11:39:18 +02:00
Pieter Noordhuis b1bedf5c6d Use a set of function pointers for building the reply
Allows libraries to wrap the reply parsing code and build the reply in a
streaming fashion. Reply objects can immediately be initialized to the
required type without having to convert an intermediary format.
2010-09-20 22:04:35 +02:00
Pieter Noordhuis db5244045c Introduce read tasks to allow hooking other code into reply parsing 2010-09-20 18:02:28 +02:00