/* * Extract value, store in byteExtract->memoryLocation * * Return 1 if success * Return 0 if can't extract. */ ENGINE_LINKAGE int extractValue(void *p, ByteExtract *byteExtract, const uint8_t *cursor) { ByteData byteData; int ret; uint32_t extracted = 0; uint32_t *location = (uint32_t *)byteExtract->memoryLocation; byteData.bytes = byteExtract->bytes; byteData.flags = byteExtract->flags; byteData.multiplier = byteExtract->multiplier; byteData.offset = byteExtract->offset; /* The following fields are not used, but must be zeroed out. */ byteData.op = 0; byteData.value = 0; byteData.offset_refId = 0; byteData.value_refId = 0; byteData.offset_location = 0; byteData.value_location = 0; ret = extractValueInternal(p, &byteData, &extracted, cursor); if (byteExtract->flags & NOT_FLAG) ret = invertMatchResult(ret); if (ret > 0) { if ((byteExtract->align == 2) || (byteExtract->align == 4)) { extracted = extracted + byteExtract->align - (extracted % byteExtract->align); } *location = extracted; } return ret; }
ENGINE_LINKAGE int contentMatch(void *p, ContentInfo* content, const uint8_t **cursor) { int ret = contentMatchInternal(p, content, cursor); if (ret < 0) return CONTENT_NOMATCH; if (content->flags & NOT_FLAG) return invertMatchResult(ret); return ret; }
ENGINE_LINKAGE int checkHdrOpt(void *p, HdrOptCheck *optData) { if (optData->flags & NOT_FLAG) return invertMatchResult(checkHdrOptInternal(p, optData)); return checkHdrOptInternal(p, optData); }
ENGINE_LINKAGE int byteJump(void *p, ByteData *byteData, const uint8_t **cursor) { if (byteData->flags & NOT_FLAG) return invertMatchResult(byteJumpInternal(p, byteData, cursor)); return byteJumpInternal(p, byteData, cursor); }
ENGINE_LINKAGE int contentMatch(void *p, ContentInfo* content, const uint8_t **cursor) { if (content->flags & NOT_FLAG) return invertMatchResult(contentMatchInternal(p, content, cursor)); return contentMatchInternal(p, content, cursor); }