Files
Mosquitto/src/cwrapper.jl
2023-11-02 08:44:15 +00:00

137 lines
4.6 KiB
Julia
Executable File

struct Cmosquitto end
struct CMosquittoMessage
mid::Cint
topic::Cstring
payload::Ptr{UInt8} # we treat payload as raw bytes
payloadlen::Cint
qos::Cint
retain::Bool
end
function mosquitto_new(id::String, clean_start::Bool, obj)
return ccall((:mosquitto_new, libmosquitto), Ptr{Cmosquitto}, (Cstring, Bool, Ptr{Cvoid}), id, clean_start, obj)
end
function destroy(client::Ref{Cmosquitto})
return ccall((:mosquitto_destroy, libmosquitto), Cvoid, (Ptr{Cmosquitto},), client)
end
finalizer(client::Ref{Cmosquitto}) = destroy(client)
function connect(client::Ref{Cmosquitto}, host::String; port::Int = 1883, keepalive::Int = 60)
return ccall((:mosquitto_connect, libmosquitto), Cint, (Ptr{Cmosquitto}, Cstring, Cint, Cint), client, host, port, keepalive)
end
function reconnect(client::Ref{Cmosquitto})
ccall((:mosquitto_reconnect, libmosquitto), Cint, (Ptr{Cmosquitto},), client)
end
function disconnect(client::Ref{Cmosquitto})
return ccall((:mosquitto_disconnect, libmosquitto), Cint, (Ptr{Cmosquitto},), client)
end
function publish(client::Ref{Cmosquitto}, topic::String, payload; qos::Int = 1, retain::Bool = true)
payloadnew = getbytes(payload)
payloadlen = length(payloadnew) # dont use sizeof, as payloadnew might be of type "reinterpreted"
mid = Int[0]
msg_nr = ccall((:mosquitto_publish, libmosquitto), Cint,
(Ptr{Cmosquitto}, Ptr{Cint}, Cstring, Cint, Ptr{UInt8}, Cint, Bool),
client, mid, topic, payloadlen, payloadnew, qos, retain)
return msg_nr
end
function subscribe(client::Ref{Cmosquitto}, sub::String; qos::Int = 1)
mid = zeros(Cint, 1)
msg_nr = ccall((:mosquitto_subscribe, libmosquitto), Cint,
(Ptr{Cmosquitto}, Ptr{Cint}, Cstring, Cint),
client, mid, sub, qos)
return msg_nr
end
function unsubscribe(client::Ref{Cmosquitto}, sub::String)
mid = zeros(Cint, 1)
msg_nr = ccall((:mosquitto_unsubscribe, libmosquitto), Cint,
(Ptr{Cmosquitto}, Ptr{Cint}, Cstring),
client, mid, sub)
return msg_nr
end
#= Broken?
function loop_start(client::Ref{Cmosquitto})
msg_nr = ccall((:mosquitto_loop_start, libmosquitto), Cint, (Ptr{Cmosquitto},), client)
return msg_nr
end
function loop_stop(client::Ref{Cmosquitto}; force::Bool = false)
msg_nr = ccall((:mosquitto_loop_stop, libmosquitto), Cint, (Ptr{Cmosquitto}, Bool), client, force)
return msg_nr
end
=#
function loop_forever(client; timeout::Int = 1000, max_packets::Int = 1)
return ccall((:mosquitto_loop_forever, libmosquitto), Cint, (Ptr{Cmosquitto}, Cint, Cint), client, timeout, max_packets)
end
function loop(client; timeout::Int = 1000, max_packets::Int = 1)
return ccall((:mosquitto_loop, libmosquitto), Cint, (Ptr{Cmosquitto}, Cint, Cint), client, timeout, max_packets)
end
function connect_callback_set(client::Ref{Cmosquitto}, cfunc)
return ccall((:mosquitto_connect_callback_set, libmosquitto), Cvoid, (Ptr{Cmosquitto}, Ptr{Cvoid}), client, cfunc)
end
function disconnect_callback_set(client::Ref{Cmosquitto}, cfunc)
return ccall((:mosquitto_disconnect_callback_set, libmosquitto), Cvoid, (Ptr{Cmosquitto}, Ptr{Cvoid}), client, cfunc)
end
function message_callback_set(client::Ref{Cmosquitto}, cfunc)
ccall((:mosquitto_message_callback_set, libmosquitto), Cvoid, (Ptr{Cmosquitto}, Ptr{Cvoid}), client, cfunc)
return nothing
end
function username_pw_set(client::Ref{Cmosquitto}, username::String, password::String)
#password != "" && (password = Cstring(C_NULL))
return ccall((:mosquitto_username_pw_set, libmosquitto), Cint, (Ptr{Cmosquitto}, Cstring, Cstring), client, username, password)
end
function tls_set(client::Ref{Cmosquitto}, cafile, capath, certfile, keyfile, callback::Ptr{Cvoid})
return ccall((:mosquitto_tls_set, libmosquitto), Cint, (Ptr{Cmosquitto}, Cstring, Cstring, Cstring, Cstring, Ptr{Cvoid}), client, cafile, capath, certfile, keyfile, callback)
end
function tls_psk_set(client::Ref{Cmosquitto}, psk::String, identity::String, ciphers::Nothing)
return ccall((:mosquitto_tls_psk_set, libmosquitto), Cint, (Ptr{Cmosquitto}, Cstring, Cstring, Cstring), client, psk, identity, C_NULL)
end
function tls_psk_set(client::Ref{Cmosquitto}, psk::String, identity::String, ciphers::String)
return ccall((:mosquitto_tls_psk_set, libmosquitto), Cint, (Ptr{Cmosquitto}, Cstring, Cstring, Cstring), client, psk, identity, ciphers)
end
function lib_version()
maj = zeros(Int, 1)
min = zeros(Int, 1)
rev = zeros(Int, 1)
ccall((:mosquitto_lib_version, libmosquitto), Cint, (Ptr{Cint}, Ptr{Cint}, Ptr{Cint}), maj, min, rev)
return maj[1], min[1], rev[1]
end
function lib_cleanup()
ccall((:mosquitto_lib_cleanup, libmosquitto), Cvoid, ())
end