durable_rules 0.34.23 → 0.34.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|