diff options
| author | Autumn <git@autumnfo.rest> | 2026-05-17 11:03:10 +0100 |
|---|---|---|
| committer | Autumn <git@autumnfo.rest> | 2026-05-17 11:03:10 +0100 |
| commit | 416f346eb994b932040201f0af0b3a880833dc8e (patch) | |
| tree | 639ecc4e6215f4425343381a9fb76bb42bfe3fe5 | |
| parent | 0d677e3ce0ac71ef3f50f4b1bad241f558d6acb4 (diff) | |
[fetch] split out logic into functions
| -rw-r--r-- | fetch.lua | 99 |
1 files changed, 22 insertions, 77 deletions
@@ -8,10 +8,15 @@ if not arg[1] or not arg[2] then end -- imports -local PawSD = require("src/pawsd") -local Servers = require("src/servers") +local PawSD = require("src/pawsd/variables") +local Servers = require("src/pawsd/servers") require("src/utils") +local pawsd = {} +pawsd.response = require("src/pawsd/metadata") +pawsd.signature = require("src/pawsd/signature") +pawsd.service = require("src/pawsd/service") + local socket = require("socket") local client = assert(socket.tcp()) @@ -42,96 +47,36 @@ while true do end -- check that the response is correct -local responseMagic = extractfromresponse(response, 1, 8) +local responseMagic = pawsd.response.type(response) if not responseMagic == PawSD.Magic.RESPONSE then error("invalid response") end +print("R> Response Magic: " .. responseMagic) + -- check that the status is okay -local responseStatus = extractfromresponse(response, 11, 12) +local responseStatus = pawsd.response.status(response) if not responseStatus == PawSD.Responses.OK then error("unsuccessful request") end +print("R> Response Status: " .. responseStatus) + -- get signature information -local responseSignatureLength = tonumber(extractfromresponse(response, 13, 14), 16) -local responseSignatureEnd = 14 + responseSignatureLength -local responseSignature = extractfromresponse(response, 15, responseSignatureEnd) +local responseSignature = pawsd.signature.get(response) +local responseSignatureValid = pawsd.signature.validate(response) -print("Signature: " .. responseSignature) --- todo: check this? +print("R> Signature: " .. responseSignature) --- get service index -local responseIndexStart = responseSignatureEnd + 1 -local responseIndex = extractfromresponse(response, responseIndexStart, responseIndexStart + 1) +-- get service info +local responseIndex = pawsd.service.index(response) +local responseFlags = pawsd.service.flags(response) --- get service flags -local responseFlagsStart = responseIndexStart + 2 -local responseFlags = extractfromresponse(response, responseFlagsStart, responseFlagsStart + 3) +print("R> Index: " .. responseIndex) +print("R> Flags: " .. responseFlags) -- get number of records -local responseRecordCountStart = responseFlagsStart + 4 -local responseRecordCount = tonumber(extractfromresponse(response, responseRecordCountStart, responseRecordCountStart + 1), 16) - --- store offset -local recordOffset = responseRecordCountStart + 2 - --- loop through each record -for recordNumber = 1, responseRecordCount, 1 do - - print("\n--- Record Number " .. recordNumber .. " ---") - - -- get number of tags - local responseTagCountStart = recordOffset - local responseTagCount = tonumber(extractfromresponse(response, responseTagCountStart, responseTagCountStart + 1), 16) - - -- store offset - local tagOffset = recordOffset + 2 - - -- loop through each tag - for tagNumber = 1, responseTagCount, 1 do - - print("\n - Tag Number " .. tagNumber .. " -\n") - - -- high tag - local responseTagHighStart = tagOffset - local responseTagHigh = extractfromresponse(response, responseTagHighStart, responseTagHighStart + 7) - print(" High Tag: " .. responseTagHigh) - - -- low tag - local responseTagLowStart = responseTagHighStart + 8 - local responseTagLow = extractfromresponse(response, responseTagLowStart, responseTagLowStart + 7) - print(" Low Tag: " .. responseTagLow) - - -- get value length - local responseTagValueLength = {} - local responseTagValueLengthStart = responseTagLowStart + 8 - local responseTagValueLength = tonumber(extractfromresponse(response, responseTagValueLengthStart, responseTagValueLengthStart + 3), 16) - - -- only check if value actually exists - if responseTagValueLength > 0 then - - -- get value - local responseTagValueStart = responseTagValueLengthStart + 4 - local responseTagValueEnd = responseTagValueStart + responseTagValueLength - local responseTagValue = string.fromhex(extractfromresponse(response, responseTagValueStart, responseTagValueEnd)) - - print(" Value: " .. responseTagValue) - - -- adjust offset - tagOffset = responseTagValueEnd - - else - - -- adjust offset - tagOffset = responseTagValueLengthStart + 4 - - end - end - - -- adjust offset - recordOffset = tagOffset -end +local responseRecords = pawsd.service.records.all(response) -- close connection client:close() |
