aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/actions.lua25
-rw-r--r--src/pawsd/metadata.lua21
-rw-r--r--src/pawsd/record.lua6
-rw-r--r--src/pawsd/send.lua2
-rw-r--r--src/pawsd/service.lua7
-rw-r--r--src/pawsd/tag.lua14
-rw-r--r--src/utils.lua24
7 files changed, 73 insertions, 26 deletions
diff --git a/src/actions.lua b/src/actions.lua
index 8f9bf29..007d978 100644
--- a/src/actions.lua
+++ b/src/actions.lua
@@ -11,6 +11,8 @@ local help = require("src/help")
local Servers = require("src/pawsd/servers")
local pawsd = {}
+pawsd.response = require("src/pawsd/metadata")
+pawsd.service = require("src/pawsd/service")
local PawSD = require("src/pawsd/variables")
local send = require("src/pawsd/send")
@@ -73,8 +75,27 @@ function fetchservice ()
local request = PawSD.Verbs.FETCH_SERVICE .. server.keyalg .. "0020" .. server.key .. arg[3]
local response = send(server, request)
- -- log response
- print(response)
+ -- check response
+ local valid = pawsd.response.validate(response)
+
+ if not valid then
+
+ print("\nE> Error: invalid request.\n")
+ return
+
+ end
+
+ -- todo: validate signature
+
+ -- get records
+ local records = pawsd.service.records.all(response)
+
+ -- log records
+ for recordindex = 1, #records, 1 do
+ for recordtagindex = 1, #records[recordindex], 1 do
+ print(table.dump(records[recordindex][recordtagindex]))
+ end
+ end
end
diff --git a/src/pawsd/metadata.lua b/src/pawsd/metadata.lua
index a8dd98d..4a8532e 100644
--- a/src/pawsd/metadata.lua
+++ b/src/pawsd/metadata.lua
@@ -4,6 +4,9 @@
require("src/utils")
+-- load pawsd
+local PawSD = require("src/pawsd/variables")
+
-- get response type
function getType (response)
@@ -18,8 +21,24 @@ function getStatus (response)
end
+-- validate response status
+function validateStatus (response)
+
+ -- check type
+ local type = getType(response)
+ if not (type == PawSD.Magic.RESPONSE) then return false end
+
+ -- check status
+ local status = getStatus(response)
+ if not (status == PawSD.Responses.OK) then return false end
+
+ return true
+
+end
+
-- return
return {
type = getType,
- status = getStatus
+ status = getStatus,
+ validate = validateStatus
}
diff --git a/src/pawsd/record.lua b/src/pawsd/record.lua
index ae6d145..869796f 100644
--- a/src/pawsd/record.lua
+++ b/src/pawsd/record.lua
@@ -20,18 +20,14 @@ function getrecord(response, offset)
local tagcount = getrecordtagnumber(response, offset)
- print("R>------ Number Of Tags: " .. tagcount)
-
local tagoffset = offset + 2
local tags = {}
for tagindex = 1, tagcount, 1 do
- print("\nT>------ Getting Tag " .. tagindex .. "...")
-
local tag = pawsd.tag.get(response, tagoffset)
- tags[tagindex] = tag.value
+ tags[tagindex] = tag.tag
tagoffset = tag.endoffset
end
diff --git a/src/pawsd/send.lua b/src/pawsd/send.lua
index 46ff2b5..156664d 100644
--- a/src/pawsd/send.lua
+++ b/src/pawsd/send.lua
@@ -36,7 +36,7 @@ function send (server, data)
end
-- return response
- return table.concat(response)
+ return response
end
diff --git a/src/pawsd/service.lua b/src/pawsd/service.lua
index 8cbce77..c176faf 100644
--- a/src/pawsd/service.lua
+++ b/src/pawsd/service.lua
@@ -37,19 +37,12 @@ end
-- get all records
function getallrecords (response)
- print("\nR>--- Getting Records...")
-
local records = {}
local recordoffset = 23 + pawsd.signature.length(response)
local recordnumber = getrecordnumber(response)
- print("\nR>--- Record Offset: " .. recordoffset)
- print("R>--- Number Of Records: " .. recordnumber)
-
for recordindex = 1, recordnumber , 1 do
- print("\nR>--- Getting Record " .. recordindex .. "...")
-
local record = pawsd.record.get(response, recordoffset)
records[recordindex] = record.tags
diff --git a/src/pawsd/tag.lua b/src/pawsd/tag.lua
index f4031f4..b5997b0 100644
--- a/src/pawsd/tag.lua
+++ b/src/pawsd/tag.lua
@@ -22,28 +22,22 @@ function gettagvalue (response, offset)
local valuetypes = gettagtypes(response, offset)
- print("T>--------- Tag (High): " .. valuetypes.high)
- print("T>--------- Tag (Low): " .. valuetypes.low)
-
local valuelength = tonumber(table.extracthex(response, offset + 16, offset + 19), 16)
local valueoffset = offset + 20
local value = ""
- print("\nT>--------- Length: " .. valuelength)
- print("T>--------- Value Offset: " .. valueoffset)
-
if valuelength > 0 then
value = table.extracthex(response, valueoffset, valueoffset + valuelength)
valueoffset = valueoffset + valuelength
- print("\nT>--------- Value (Hex): " .. value)
- print("T>--------- Value (Binary): " .. string.fromhex(value))
-
end
return {
- value = value,
+ tag = {
+ types = valuetypes,
+ value = value
+ },
endoffset = valueoffset
}
diff --git a/src/utils.lua b/src/utils.lua
index 83e1d46..5851e1c 100644
--- a/src/utils.lua
+++ b/src/utils.lua
@@ -27,3 +27,27 @@ function table.extracthex(response, start, last)
return result
end
+
+-- table -> pretty print
+function table.dump(response)
+
+ if type(response) == "table" then
+
+ local start = "{ "
+
+ for key, value in pairs(response) do
+
+ if type(key) ~= "number" then key = '"' .. key .. '"' end
+
+ start = start .. "[" .. key .. "] = " .. table.dump(value) .. ","
+
+ end
+
+ return start .. "} "
+
+ else
+
+ return tostring(response)
+
+ end
+end