aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAutumn <git@autumnfo.rest>2026-05-17 11:03:10 +0100
committerAutumn <git@autumnfo.rest>2026-05-17 11:03:10 +0100
commit416f346eb994b932040201f0af0b3a880833dc8e (patch)
tree639ecc4e6215f4425343381a9fb76bb42bfe3fe5
parent0d677e3ce0ac71ef3f50f4b1bad241f558d6acb4 (diff)
[fetch] split out logic into functions
-rw-r--r--fetch.lua99
1 files changed, 22 insertions, 77 deletions
diff --git a/fetch.lua b/fetch.lua
index 43e268f..2ec2500 100644
--- a/fetch.lua
+++ b/fetch.lua
@@ -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()