2023-04-01 10:00:13 +08:00

83 lines
1.8 KiB
Lua

#!/usr/bin/lua
local oaddr = arg[1]
local txt = arg[2]
local pid = arg[3]
if package.path:find(";/usr/lib/sms/?.lua") == nil then
package.path = package.path .. ";/usr/lib/sms/?.lua"
end
local utf8togsm = require "utf8togsm"
local pack7bit = require "pack7bit"
local isok = true
if #oaddr > 11 then
txt = oaddr .. " " .. txt
oaddr = "ROOter"
end
if #txt == 0 then
txt = "Usage: /usr/lib/sms/sys2sms.sh 'from' 'text to write here'"
end
utf8togsm.chktxt(txt)
local msg = utf8togsm["msg"]
local dcs = utf8togsm["dcs"]
local ud = utf8togsm["txt"]
local udl = string.format("%02X", math.floor(#ud / 2))
if msg ~= nil then
isok = false
end
if isok and dcs == "00" then
pack7bit.pack(udl, ud)
ud = pack7bit["pdu"]
end
if #oaddr == 0 or oaddr == ' ' then
oaddr = "ROOter"
end
if oaddr:sub(-1) == ' ' then
oaddr = oaddr:sub(1, -2)
end
local oaddrl = #oaddr * 2
if oaddrl > 14 then
oaddrl = oaddrl - 2
elseif oaddrl > 6 then
oaddrl = oaddrl - 1
end
oaddrl = string.format("%02X", oaddrl)
utf8togsm.chktxt(oaddr)
oaddr = utf8togsm["txt"]
if utf8togsm["dcs"] == "08" then
isok = false
end
pack7bit.pack(string.format("%02X", math.floor(#oaddr / 2)), oaddr)
oaddr = pack7bit["pdu"]
dtg = os.date("%y%m%d%H%M%S%z", os.time())
sign = dtg:sub(13, 13)
tz = dtg:sub(-4)
dtgif = ''
for j = 1, 11, 2 do
dtgif = dtgif .. dtg:sub(j + 1, j + 1) .. dtg:sub(j, j)
end
tz = string.format("%02d", math.floor((tonumber(tz:sub(1, 2) * 4)) + tonumber(tz:sub(3, 4) / 15)))
tz = tz:sub(2, 2) .. tz:sub(1, 1)
if sign == "-" then
tz = tz:sub(1, 1) .. string.format("%X", (tonumber(tz:sub(2, 2)) + 8))
end
pdu = "0004" .. oaddrl .. "D0" .. oaddr .. "00" .. dcs .. dtgif .. tz .. udl .. ud
if isok then
pdul = string.format("%03d", (math.floor(#pdu / 2) - 1))
os.execute("echo " .. pdul .. " " .. pdu .. " > /tmp/pdu" .. pid)
end