durable_rules 0.34.23 → 0.34.24
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/src/rules/events.c +42 -63
- data/src/rules/net.c +37 -41
- data/src/rules/net.h +1 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a4ba28ab92f56567a70857c565e48bffc95e8b5
|
4
|
+
data.tar.gz: e1cbe2d01c35bcadd14084b78d1e96ec5037271c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6606fba477f54cc6f76f8cd384aef942c5840ad206380af8c3b00e0edfb8101839278188063f622da768c4597c5be6e0a26e6ca379bcd44de21556eb644aa48
|
7
|
+
data.tar.gz: 6bfd931f12dc5e24b02f5227d9600c5b9b342d44485e1a47e5ed1a39b85c56fd21ebde19f24c4d075c968b1068ce7c7c153c089ff5e6922dca2c1c5372fb2911
|
data/src/rules/events.c
CHANGED
@@ -46,7 +46,6 @@
|
|
46
46
|
#define OP_NIL_NIL 0x0707
|
47
47
|
|
48
48
|
typedef struct actionContext {
|
49
|
-
unsigned long stateVersion;
|
50
49
|
void *rulesBinding;
|
51
50
|
redisReply *reply;
|
52
51
|
} actionContext;
|
@@ -1052,14 +1051,15 @@ static unsigned int handleMessageCore(ruleset *tree,
|
|
1052
1051
|
char **commands,
|
1053
1052
|
unsigned int *commandCount,
|
1054
1053
|
void **rulesBinding) {
|
1055
|
-
jsonProperty *midProperty;
|
1054
|
+
jsonProperty *midProperty = NULL;
|
1056
1055
|
int midLength;
|
1057
|
-
jsonProperty *sidProperty;
|
1056
|
+
jsonProperty *sidProperty = NULL;
|
1058
1057
|
int sidLength;
|
1059
1058
|
char *storeCommand;
|
1060
|
-
char *versionCommand;
|
1061
1059
|
int result = getId(properties, sidIndex, &sidProperty, &sidLength);
|
1062
|
-
if (result
|
1060
|
+
if (result == ERR_NO_ID_DEFINED) {
|
1061
|
+
sidLength = 1;
|
1062
|
+
} else if (result != RULES_OK) {
|
1063
1063
|
return result;
|
1064
1064
|
}
|
1065
1065
|
#ifdef _WIN32
|
@@ -1067,19 +1067,27 @@ static unsigned int handleMessageCore(ruleset *tree,
|
|
1067
1067
|
#else
|
1068
1068
|
char sid[sidLength + 1];
|
1069
1069
|
#endif
|
1070
|
-
|
1070
|
+
if (result == ERR_NO_ID_DEFINED) {
|
1071
|
+
*sid = '0';
|
1072
|
+
} else {
|
1073
|
+
strncpy(sid, message + sidProperty->valueOffset, sidLength);
|
1074
|
+
}
|
1071
1075
|
sid[sidLength] = '\0';
|
1072
|
-
|
1076
|
+
|
1073
1077
|
result = getId(properties, midIndex, &midProperty, &midLength);
|
1074
|
-
if (result
|
1078
|
+
if (result == ERR_NO_ID_DEFINED) {
|
1079
|
+
midLength = 0;
|
1080
|
+
} else if (result != RULES_OK) {
|
1075
1081
|
return result;
|
1076
1082
|
}
|
1077
1083
|
#ifdef _WIN32
|
1078
1084
|
char *mid = (char *)_alloca(sizeof(char)*(midLength + 1));
|
1079
1085
|
#else
|
1080
1086
|
char mid[midLength + 1];
|
1081
|
-
#endif
|
1082
|
-
|
1087
|
+
#endif
|
1088
|
+
if (midLength) {
|
1089
|
+
strncpy(mid, message + midProperty->valueOffset, midLength);
|
1090
|
+
}
|
1083
1091
|
mid[midLength] = '\0';
|
1084
1092
|
if (*commandCount == MAX_COMMAND_COUNT) {
|
1085
1093
|
return ERR_MAX_COMMAND_COUNT;
|
@@ -1093,20 +1101,13 @@ static unsigned int handleMessageCore(ruleset *tree,
|
|
1093
1101
|
}
|
1094
1102
|
}
|
1095
1103
|
|
1096
|
-
result = formatStoreSession(*rulesBinding, sid, state, 0, &storeCommand
|
1104
|
+
result = formatStoreSession(*rulesBinding, sid, state, 0, &storeCommand);
|
1097
1105
|
if (result != RULES_OK) {
|
1098
1106
|
return result;
|
1099
1107
|
}
|
1100
1108
|
|
1101
1109
|
commands[*commandCount] = storeCommand;
|
1102
1110
|
++*commandCount;
|
1103
|
-
|
1104
|
-
if (*commandCount == MAX_COMMAND_COUNT) {
|
1105
|
-
return ERR_MAX_COMMAND_COUNT;
|
1106
|
-
}
|
1107
|
-
|
1108
|
-
commands[*commandCount] = versionCommand;
|
1109
|
-
++*commandCount;
|
1110
1111
|
}
|
1111
1112
|
char *removeCommand = NULL;
|
1112
1113
|
char *addKeys[MAX_ADD_COUNT];
|
@@ -1156,7 +1157,6 @@ static unsigned int handleMessageCore(ruleset *tree,
|
|
1156
1157
|
addKeys,
|
1157
1158
|
addCount,
|
1158
1159
|
&addCommand);
|
1159
|
-
|
1160
1160
|
for (unsigned int i = 0; i < addCount; ++i) {
|
1161
1161
|
free(addKeys[i]);
|
1162
1162
|
}
|
@@ -1185,6 +1185,7 @@ static unsigned int handleMessageCore(ruleset *tree,
|
|
1185
1185
|
evalKeys,
|
1186
1186
|
evalCount,
|
1187
1187
|
&evalCommand);
|
1188
|
+
|
1188
1189
|
for (unsigned int i = 0; i < evalCount; ++i) {
|
1189
1190
|
free(evalKeys[i]);
|
1190
1191
|
}
|
@@ -1224,23 +1225,21 @@ static unsigned int handleMessageCore(ruleset *tree,
|
|
1224
1225
|
#ifdef _WIN32
|
1225
1226
|
char *stateMessage = (char *)_alloca(sizeof(char)*(36 + sidLength));
|
1226
1227
|
char *newState = (char *)_alloca(sizeof(char)*(12 + sidLength));
|
1227
|
-
if (sidProperty->type == JSON_STRING) {
|
1228
|
-
sprintf_s(stateMessage, sizeof(char)*(
|
1228
|
+
if (sidProperty && sidProperty->type == JSON_STRING) {
|
1229
|
+
sprintf_s(stateMessage, sizeof(char)*(26 + sidLength), "{\"sid\":\"%s\", \"$s\":1}", sid);
|
1229
1230
|
sprintf_s(newState, sizeof(char)*(12 + sidLength), "{\"sid\":\"%s\"}", sid);
|
1230
|
-
}
|
1231
|
-
|
1232
|
-
sprintf_s(stateMessage, sizeof(char)*(36 + sidLength), "{\"id\":\"$s\", \"sid\":%s, \"$s\":1}", sid);
|
1231
|
+
} else {
|
1232
|
+
sprintf_s(stateMessage, sizeof(char)*(26 + sidLength), "{\"sid\":%s, \"$s\":1}", sid);
|
1233
1233
|
sprintf_s(newState, sizeof(char)*(12 + sidLength), "{\"sid\":%s}", sid);
|
1234
1234
|
}
|
1235
1235
|
#else
|
1236
1236
|
char stateMessage[36 + sidLength];
|
1237
1237
|
char newState[12 + sidLength];
|
1238
|
-
if (sidProperty->type == JSON_STRING) {
|
1239
|
-
snprintf(stateMessage, sizeof(char)*(
|
1238
|
+
if (sidProperty && sidProperty->type == JSON_STRING) {
|
1239
|
+
snprintf(stateMessage, sizeof(char)*(26 + sidLength), "{\"sid\":\"%s\", \"$s\":1}", sid);
|
1240
1240
|
snprintf(newState, sizeof(char)*(12 + sidLength), "{\"sid\":\"%s\"}", sid);
|
1241
|
-
}
|
1242
|
-
|
1243
|
-
snprintf(stateMessage, sizeof(char)*(36 + sidLength), "{\"id\":\"$s\", \"sid\":%s, \"$s\":1}", sid);
|
1241
|
+
} else {
|
1242
|
+
snprintf(stateMessage, sizeof(char)*(26 + sidLength), "{\"sid\":%s, \"$s\":1}", sid);
|
1244
1243
|
snprintf(newState, sizeof(char)*(12 + sidLength), "{\"sid\":%s}", sid);
|
1245
1244
|
}
|
1246
1245
|
#endif
|
@@ -1249,21 +1248,13 @@ static unsigned int handleMessageCore(ruleset *tree,
|
|
1249
1248
|
return ERR_MAX_COMMAND_COUNT;
|
1250
1249
|
}
|
1251
1250
|
|
1252
|
-
result = formatStoreSession(*rulesBinding, sid, newState, 1, &storeCommand
|
1251
|
+
result = formatStoreSession(*rulesBinding, sid, newState, 1, &storeCommand);
|
1253
1252
|
if (result != RULES_OK) {
|
1254
1253
|
return result;
|
1255
1254
|
}
|
1256
1255
|
|
1257
1256
|
commands[*commandCount] = storeCommand;
|
1258
1257
|
++*commandCount;
|
1259
|
-
|
1260
|
-
if (*commandCount == MAX_COMMAND_COUNT) {
|
1261
|
-
return ERR_MAX_COMMAND_COUNT;
|
1262
|
-
}
|
1263
|
-
|
1264
|
-
commands[*commandCount] = versionCommand;
|
1265
|
-
++*commandCount;
|
1266
|
-
|
1267
1258
|
result = handleMessage(tree,
|
1268
1259
|
NULL,
|
1269
1260
|
stateMessage,
|
@@ -1399,7 +1390,6 @@ static unsigned int handleMessages(void *handle,
|
|
1399
1390
|
|
1400
1391
|
static unsigned int handleState(ruleset *tree,
|
1401
1392
|
char *state,
|
1402
|
-
unsigned long stateVersion,
|
1403
1393
|
char **commands,
|
1404
1394
|
unsigned int *commandCount,
|
1405
1395
|
void **rulesBinding) {
|
@@ -1414,15 +1404,15 @@ static unsigned int handleState(ruleset *tree,
|
|
1414
1404
|
|
1415
1405
|
char *stateMessagePostfix = state + 1;
|
1416
1406
|
#ifdef _WIN32
|
1417
|
-
char *stateMessage = (char *)_alloca(sizeof(char)*(
|
1407
|
+
char *stateMessage = (char *)_alloca(sizeof(char)*(24 + stateLength - 1));
|
1418
1408
|
#else
|
1419
|
-
char stateMessage[
|
1409
|
+
char stateMessage[24 + stateLength - 1];
|
1420
1410
|
#endif
|
1421
1411
|
|
1422
1412
|
#ifdef _WIN32
|
1423
|
-
sprintf_s(stateMessage, sizeof(char)*(
|
1413
|
+
sprintf_s(stateMessage, sizeof(char)*(24 + stateLength - 1), "{\"$s\":1, %s", stateMessagePostfix);
|
1424
1414
|
#else
|
1425
|
-
snprintf(stateMessage, sizeof(char)*(
|
1415
|
+
snprintf(stateMessage, sizeof(char)*(24 + stateLength - 1), "{\"$s\":1, %s", stateMessagePostfix);
|
1426
1416
|
#endif
|
1427
1417
|
unsigned int result = handleMessage(tree,
|
1428
1418
|
state,
|
@@ -1679,18 +1669,12 @@ unsigned int assertState(void *handle, char *sid, char *state) {
|
|
1679
1669
|
char *commands[MAX_COMMAND_COUNT];
|
1680
1670
|
unsigned int commandCount = 0;
|
1681
1671
|
void *rulesBinding = NULL;
|
1682
|
-
unsigned long stateVersion;
|
1683
|
-
unsigned int result = getStateVersion(handle, sid, &stateVersion);
|
1684
|
-
if (result != RULES_OK) {
|
1685
|
-
return result;
|
1686
|
-
}
|
1687
1672
|
|
1688
|
-
result = handleState(handle,
|
1689
|
-
|
1690
|
-
|
1691
|
-
|
1692
|
-
|
1693
|
-
&rulesBinding);
|
1673
|
+
unsigned int result = handleState(handle,
|
1674
|
+
state,
|
1675
|
+
commands,
|
1676
|
+
&commandCount,
|
1677
|
+
&rulesBinding);
|
1694
1678
|
if (result != RULES_OK && result != ERR_EVENT_NOT_HANDLED) {
|
1695
1679
|
freeCommands(commands, commandCount);
|
1696
1680
|
return result;
|
@@ -1737,14 +1721,13 @@ unsigned int startAction(void *handle,
|
|
1737
1721
|
return result;
|
1738
1722
|
}
|
1739
1723
|
|
1740
|
-
*state = reply->element[
|
1741
|
-
*messages = reply->element[
|
1724
|
+
*state = reply->element[1]->str;
|
1725
|
+
*messages = reply->element[2]->str;
|
1742
1726
|
actionContext *context = malloc(sizeof(actionContext));
|
1743
1727
|
if (!context) {
|
1744
1728
|
return ERR_OUT_OF_MEMORY;
|
1745
1729
|
}
|
1746
1730
|
|
1747
|
-
context->stateVersion = reply->element[1]->integer;
|
1748
1731
|
context->reply = reply;
|
1749
1732
|
context->rulesBinding = rulesBinding;
|
1750
1733
|
*actionHandle = context;
|
@@ -1760,10 +1743,8 @@ unsigned int startUpdateState(void *handle,
|
|
1760
1743
|
char *commands[MAX_COMMAND_COUNT];
|
1761
1744
|
unsigned int result = RULES_OK;
|
1762
1745
|
unsigned int commandCount = 0;
|
1763
|
-
unsigned long stateVersion = ((actionContext*)actionHandle)->stateVersion;
|
1764
1746
|
result = handleState(handle,
|
1765
|
-
state,
|
1766
|
-
stateVersion,
|
1747
|
+
state,
|
1767
1748
|
commands,
|
1768
1749
|
&commandCount,
|
1769
1750
|
rulesBinding);
|
@@ -1798,7 +1779,6 @@ unsigned int completeAction(void *handle,
|
|
1798
1779
|
++commandCount;
|
1799
1780
|
result = handleState(handle,
|
1800
1781
|
state,
|
1801
|
-
context->stateVersion,
|
1802
1782
|
commands,
|
1803
1783
|
&commandCount,
|
1804
1784
|
&rulesBinding);
|
@@ -1871,8 +1851,7 @@ unsigned int completeAndStartAction(void *handle,
|
|
1871
1851
|
return ERR_NO_ACTION_AVAILABLE;
|
1872
1852
|
}
|
1873
1853
|
|
1874
|
-
*messages = newReply->element[
|
1875
|
-
context->stateVersion = newReply->element[1]->integer;
|
1854
|
+
*messages = newReply->element[1]->str;
|
1876
1855
|
context->reply = newReply;
|
1877
1856
|
return RULES_OK;
|
1878
1857
|
}
|
data/src/rules/net.c
CHANGED
@@ -670,6 +670,7 @@ static unsigned int loadAddMessageCommand(ruleset *tree, binding *rulesBinding)
|
|
670
670
|
"local events_hashset = \"%s!e!\" .. sid\n"
|
671
671
|
"local facts_hashset = \"%s!f!\" .. sid\n"
|
672
672
|
"local visited_hashset = \"%s!v!\" .. sid\n"
|
673
|
+
"local mid_count_hashset = \"%s!c\"\n"
|
673
674
|
"local message = {}\n"
|
674
675
|
"local primary_message_keys = {}\n"
|
675
676
|
"local input_keys = {}\n"
|
@@ -696,14 +697,19 @@ static unsigned int loadAddMessageCommand(ruleset *tree, binding *rulesBinding)
|
|
696
697
|
" end\n"
|
697
698
|
"end\n"
|
698
699
|
"local mid = message[\"id\"]\n"
|
699
|
-
"if
|
700
|
-
"
|
701
|
-
"
|
702
|
-
"
|
703
|
-
"
|
704
|
-
"
|
705
|
-
"
|
706
|
-
"
|
700
|
+
"if not mid then\n"
|
701
|
+
" mid = \"$m-\" .. redis.call(\"hincrby\", mid_count_hashset, mid, 1)\n"
|
702
|
+
" message[\"id\"] = mid\n"
|
703
|
+
"else\n"
|
704
|
+
" if redis.call(\"hsetnx\", visited_hashset, mid, 1) == 0 then\n"
|
705
|
+
" if assert_fact == 0 then\n"
|
706
|
+
" if not redis.call(\"hget\", events_hashset, mid) then\n"
|
707
|
+
" return %d\n"
|
708
|
+
" end\n"
|
709
|
+
" else\n"
|
710
|
+
" if not redis.call(\"hget\", facts_hashset, mid) then\n"
|
711
|
+
" return %d\n"
|
712
|
+
" end\n"
|
707
713
|
" end\n"
|
708
714
|
" end\n"
|
709
715
|
"end\n"
|
@@ -725,6 +731,7 @@ static unsigned int loadAddMessageCommand(ruleset *tree, binding *rulesBinding)
|
|
725
731
|
name,
|
726
732
|
name,
|
727
733
|
name,
|
734
|
+
name,
|
728
735
|
ERR_EVENT_OBSERVED,
|
729
736
|
ERR_EVENT_OBSERVED,
|
730
737
|
addMessageLua) == -1) {
|
@@ -1059,7 +1066,7 @@ static unsigned int loadPeekActionCommand(ruleset *tree, binding *rulesBinding)
|
|
1059
1066
|
" end\n"
|
1060
1067
|
" end\n"
|
1061
1068
|
" for i = #packed_frames, 1, -1 do\n"
|
1062
|
-
" redis.call(\"
|
1069
|
+
" redis.call(\"lpush\", rule_action_key, packed_frames[i])\n"
|
1063
1070
|
" end\n"
|
1064
1071
|
" if #packed_frames == 0 then\n"
|
1065
1072
|
" return nil, nil\n"
|
@@ -1189,12 +1196,11 @@ static unsigned int loadPeekActionCommand(ruleset *tree, binding *rulesBinding)
|
|
1189
1196
|
"end\n"
|
1190
1197
|
"if frame then\n"
|
1191
1198
|
" redis.call(\"zadd\", action_key, tonumber(ARGV[1]), new_sid)\n"
|
1192
|
-
" local state_version = redis.call(\"hget\", state_key .. \"!v\", new_sid)\n"
|
1193
1199
|
" if #ARGV == 2 then\n"
|
1194
1200
|
" local state = redis.call(\"hget\", state_key, new_sid)\n"
|
1195
|
-
" return {new_sid,
|
1201
|
+
" return {new_sid, state, cjson.encode({[action_name] = fixup_frame(frame)})}\n"
|
1196
1202
|
" else\n"
|
1197
|
-
" return {new_sid,
|
1203
|
+
" return {new_sid, cjson.encode({[action_name] = fixup_frame(frame)})}\n"
|
1198
1204
|
" end\n"
|
1199
1205
|
"end\n",
|
1200
1206
|
name,
|
@@ -1707,6 +1713,7 @@ static unsigned int loadEvalMessageCommand(ruleset *tree, binding *rulesBinding)
|
|
1707
1713
|
"local visited_hashset = \"%s!v!\" .. sid\n"
|
1708
1714
|
"local actions_key = \"%s!a\"\n"
|
1709
1715
|
"local state_key = \"%s!s\"\n"
|
1716
|
+
"local mid_count_hashset = \"%s!c\"\n"
|
1710
1717
|
"local queue_action = false\n"
|
1711
1718
|
"local facts_message_cache = {}\n"
|
1712
1719
|
"local events_message_cache = {}\n"
|
@@ -2143,14 +2150,21 @@ static unsigned int loadEvalMessageCommand(ruleset *tree, binding *rulesBinding)
|
|
2143
2150
|
" message[\"$f\"] = 1\n"
|
2144
2151
|
" end\n"
|
2145
2152
|
"end\n"
|
2146
|
-
"if
|
2147
|
-
"
|
2148
|
-
"
|
2149
|
-
"
|
2150
|
-
"
|
2151
|
-
"
|
2152
|
-
"
|
2153
|
-
"
|
2153
|
+
"if mid == \"\" then\n"
|
2154
|
+
" mid = \"$m-\" .. redis.call(\"hincrby\", mid_count_hashset, sid, 1)\n"
|
2155
|
+
" if message then\n"
|
2156
|
+
" message[\"id\"] = mid\n"
|
2157
|
+
" end\n"
|
2158
|
+
"else\n"
|
2159
|
+
" if redis.call(\"hsetnx\", visited_hashset, mid, 1) == 0 then\n"
|
2160
|
+
" if assert_fact == 0 then\n"
|
2161
|
+
" if message and redis.call(\"hexists\", events_hashset, mid) == 0 then\n"
|
2162
|
+
" return %d\n"
|
2163
|
+
" end\n"
|
2164
|
+
" else\n"
|
2165
|
+
" if message and redis.call(\"hexists\", facts_hashset, mid) == 0 then\n"
|
2166
|
+
" return %d\n"
|
2167
|
+
" end\n"
|
2154
2168
|
" end\n"
|
2155
2169
|
" end\n"
|
2156
2170
|
"end\n"
|
@@ -2163,12 +2177,12 @@ static unsigned int loadEvalMessageCommand(ruleset *tree, binding *rulesBinding)
|
|
2163
2177
|
name,
|
2164
2178
|
name,
|
2165
2179
|
name,
|
2180
|
+
name,
|
2166
2181
|
ERR_EVENT_OBSERVED,
|
2167
2182
|
ERR_EVENT_OBSERVED,
|
2168
2183
|
lua) == -1) {
|
2169
2184
|
return ERR_OUT_OF_MEMORY;
|
2170
2185
|
}
|
2171
|
-
|
2172
2186
|
free(oldLua);
|
2173
2187
|
unsigned int result = redisAppendCommand(reContext, "SCRIPT LOAD %s", lua);
|
2174
2188
|
GET_REPLY(result, "loadEvalMessageCommand", reply);
|
@@ -2569,8 +2583,7 @@ unsigned int formatStoreSession(void *rulesBinding,
|
|
2569
2583
|
char *sid,
|
2570
2584
|
char *state,
|
2571
2585
|
unsigned char tryExists,
|
2572
|
-
char **storeCommand
|
2573
|
-
char **versionCommand) {
|
2586
|
+
char **storeCommand) {
|
2574
2587
|
binding *currentBinding = (binding*)rulesBinding;
|
2575
2588
|
|
2576
2589
|
int result;
|
@@ -2580,29 +2593,12 @@ unsigned int formatStoreSession(void *rulesBinding,
|
|
2580
2593
|
currentBinding->sessionHashset,
|
2581
2594
|
sid,
|
2582
2595
|
state);
|
2583
|
-
if (result == 0) {
|
2584
|
-
return ERR_OUT_OF_MEMORY;
|
2585
|
-
}
|
2586
|
-
|
2587
|
-
result = redisFormatCommand(versionCommand,
|
2588
|
-
"hsetnx %s!v %s 0",
|
2589
|
-
currentBinding->sessionHashset,
|
2590
|
-
sid);
|
2591
2596
|
} else {
|
2592
2597
|
result = redisFormatCommand(storeCommand,
|
2593
2598
|
"hset %s %s %s",
|
2594
2599
|
currentBinding->sessionHashset,
|
2595
2600
|
sid,
|
2596
2601
|
state);
|
2597
|
-
|
2598
|
-
if (result == 0) {
|
2599
|
-
return ERR_OUT_OF_MEMORY;
|
2600
|
-
}
|
2601
|
-
|
2602
|
-
result = redisFormatCommand(versionCommand,
|
2603
|
-
"hincrby %s!v %s 1",
|
2604
|
-
currentBinding->sessionHashset,
|
2605
|
-
sid);
|
2606
2602
|
}
|
2607
2603
|
|
2608
2604
|
if (result == 0) {
|
@@ -2894,7 +2890,7 @@ unsigned int peekAction(ruleset *tree, void **bindingContext, redisReply **reply
|
|
2894
2890
|
}
|
2895
2891
|
|
2896
2892
|
if ((*reply)->type == REDIS_REPLY_ARRAY) {
|
2897
|
-
if ((*reply)->elements <
|
2893
|
+
if ((*reply)->elements < 3) {
|
2898
2894
|
freeReplyObject(*reply);
|
2899
2895
|
return ERR_REDIS_ERROR;
|
2900
2896
|
}
|
data/src/rules/net.h
CHANGED
@@ -74,8 +74,7 @@ unsigned int formatStoreSession(void *rulesBinding,
|
|
74
74
|
char *sid,
|
75
75
|
char *state,
|
76
76
|
unsigned char tryExists,
|
77
|
-
char **storeCommand
|
78
|
-
char **versionCommand);
|
77
|
+
char **storeCommand);
|
79
78
|
|
80
79
|
unsigned int formatStoreSessionFact(void *rulesBinding,
|
81
80
|
char *sid,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: durable_rules
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.34.
|
4
|
+
version: 0.34.24
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jesus Ruiz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-04-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|