From 4594feefaea12a80fbc3071e87675e9c79391662 Mon Sep 17 00:00:00 2001 From: Joonas Onatsu Date: Sat, 21 Sep 2024 23:44:29 +0300 Subject: [PATCH 1/2] Add files from mrhaav's uqmi package --- uqmi/files/etc/init.d/uqmi_d | 17 +++ uqmi/files/usr/bin/uqmi_d.sh | 227 +++++++++++++++++++++++++++++++++++ 2 files changed, 244 insertions(+) create mode 100644 uqmi/files/etc/init.d/uqmi_d create mode 100644 uqmi/files/usr/bin/uqmi_d.sh diff --git a/uqmi/files/etc/init.d/uqmi_d b/uqmi/files/etc/init.d/uqmi_d new file mode 100644 index 0000000..9098b71 --- /dev/null +++ b/uqmi/files/etc/init.d/uqmi_d @@ -0,0 +1,17 @@ +#!/bin/sh /etc/rc.common +# uqmi connection daemon + +START=99 +STOP=01 + +USE_PROCD=1 + +start_service() { + procd_open_instance + procd_set_param command sh "/usr/bin/uqmi_d.sh" + procd_close_instance +} + +stop_service() { + /usr/bin/uqmi_led.sh -200 2> /dev/null +} diff --git a/uqmi/files/usr/bin/uqmi_d.sh b/uqmi/files/usr/bin/uqmi_d.sh new file mode 100644 index 0000000..aa249ec --- /dev/null +++ b/uqmi/files/usr/bin/uqmi_d.sh @@ -0,0 +1,227 @@ +#!/bin/sh +# +# uqmi daemon, runs every 30sec +# 1. Check IP-address in get-current-settings +# 2. Send SMS from /var/sms/send +# 3. Check received SMS +# 4. rssi LED trigger +# +# by mrhaav 2022-09-12 + +. /lib/functions.sh +. /lib/netifd/netifd-proto.sh + +# SMS folders +receiveFolder=/var/sms/received +sendFolder=/var/sms/send +mkdir -p $receiveFolder +mkdir -p $sendFolder + +interface=$(uci show network | grep qmi | awk -F . '{print $2}') +device=$(uci get network.${interface}.device) +default_profile=$(uci get network.${interface}.default_profile) +ipv6profile=$(uci get network.${interface}.ipv6profile) +smsc=$(uci get network.${interface}.smsc) + +json_load "$(ubus call network.interface.${interface} status)" +json_get_var ifname l3_device +json_select data +json_get_vars cid_4 pdh_4 cid_6 pdh_6 zone + +if [ ! -n "$pdh_4" ] && [ ! -n "$pdh_6" ] +then + /etc/init.d/uqmi_d stop 2> /dev/null +fi + +logger -t uqmi_d Daemon started + +while true +do +# Check wwan connectivity + if [ -n "$pdh_4" ] + then + ipv4connected="$(uqmi -s -d $device --set-client-id wds,$cid_4 --get-current-settings)" + fi + if [ -n "$pdh_6" ] + then + ipv6connected="$(uqmi -s -d $device --set-client-id wds,$cid_6 --get-current-settings)" + fi + + if [ "$ipv4connected" = '"Out of call"' ] || [ "$ipv6connected" = '"Out of call"' ] + then + logger -t uqmi_d Modem disconnected + proto_init_update "$ifname" 0 + proto_send_update "$interface" + +# IPv4 + if [ -n "$pdh_4" ] + then + uqmi -s -d $device --set-client-id wds,"$cid_4" \ + --release-client-id wds + + cid_4=$(uqmi -s -d $device --get-client-id wds) + uqmi -s -d "$device" --set-client-id wds,"$cid_4" --set-ip-family ipv4 + pdh_4=$(uqmi -s -d $device --set-client-id wds,"$cid_4" \ + --start-network \ + --profile $default_profile) + if [ "$pdh_4" = '"Call failed"' ] + then + logger -t uqmi_d 'Unable to re-connect IPv4 - Interface restarted' + ifup $interface + /etc/init.d/uqmi_d stop + else + logger -t uqmi_d IPv4 re-connected + fi + proto_init_update "$ifname" 1 + proto_set_keep 1 + proto_add_data + json_add_string "cid_4" "$cid_4" + json_add_string "pdh_4" "$pdh_4" + json_add_string zone "$zone" + proto_close_data + proto_send_update "$interface" + + json_load "$(uqmi -s -d $device --set-client-id wds,$cid_4 --get-current-settings)" + json_select ipv4 + json_get_var ip_4 ip + json_get_var gateway_4 gateway + json_get_var dns1_4 dns1 + json_get_var dns2_4 dns2 + json_get_var subnet_4 subnet + + proto_init_update "$ifname" 1 + proto_set_keep 1 + proto_add_ipv4_address "$ip_4" "$subnet_4" + proto_add_ipv4_route "$gateway_4" "128" + [ "$defaultroute" = 0 ] || proto_add_ipv4_route "0.0.0.0" 0 "$gateway_4" + [ "$peerdns" = 0 ] || { + proto_add_dns_server "$dns1_4" + proto_add_dns_server "$dns2_4" + } + proto_send_update "$interface" + fi + +# IPv6 + if [ -n "$pdh_6" ] + then + uqmi -s -d $device --set-client-id wds,"$cid_6" \ + --release-client-id wds + + cid_6=$(uqmi -s -d $device --get-client-id wds) + uqmi -s -d "$device" --set-client-id wds,"$cid_6" --set-ip-family ipv6 + if [ -n "$pdh_4" ] && [ -n "$pdh_6" ] + then + pdh_6=$(uqmi -s -d $device --set-client-id wds,"$cid_6" \ + --start-network) + elif [ -n "$ipv6profile" ] + then + pdh_6=$(uqmi -s -d $device --set-client-id wds,"$cid_6" \ + --start-network \ + --profile $ipv6profile) + else + pdh_6=$(uqmi -s -d $device --set-client-id wds,"$cid_6" \ + --start-network \ + --profile $default_profile) + fi + if [ "$pdh_6" = '"Call failed"' ] + then + logger -t uqmi_d 'Unable to re-connect IPv6 - Interface restarted' + ifup $interface + /etc/init.d/uqmi_d stop + else + logger -t uqmi_d IPv6 re-connected + fi + proto_init_update "$ifname" 1 + proto_set_keep 1 + proto_add_data + json_add_string "cid_6" "$cid_6" + json_add_string "pdh_6" "$pdh_6" + json_add_string zone "$zone" + proto_close_data + proto_send_update "$interface" + + json_load "$(uqmi -s -d $device --set-client-id wds,$cid_6 --get-current-settings)" + json_select ipv6 + json_get_var ip_6 ip + json_get_var gateway_6 gateway + json_get_var dns1_6 dns1 + json_get_var dns2_6 dns2 + json_get_var ip_prefix_length ip-prefix-length + + proto_init_update "$ifname" 1 + proto_set_keep 1 + proto_add_ipv6_address "$ip_6" "128" + proto_add_ipv6_prefix "${ip_6}/${ip_prefix_length}" + proto_add_ipv6_route "$gateway_6" "128" + [ "$defaultroute" = 0 ] || proto_add_ipv6_route "::0" 0 "$gateway_6" "" "" "${ip_6}/${ip_prefix_length}" + [ "$peerdns" = 0 ] || { + proto_add_dns_server "$dns1_6" + proto_add_dns_server "$dns2_6" + } + proto_send_update "$interface" + fi + + json_load "$(ubus call network.interface.${interface} status)" + json_select data + json_get_vars cid_4 pdh_4 cid_6 pdh_6 + fi + +# Send SMS + smsTOsend=$(ls $sendFolder -w 1 | sed -n '1p') + while [ -n "$smsTOsend" ] + do + Bnumber=$(sed -n '1p' $sendFolder/$smsTOsend) + SMStext=$(sed -n '2,$p' $sendFolder/$smsTOsend) + logger -t uqmi_d SMS sent to $Bnumber + if [ -z "$smsc" ] + then + uqmi -d $device --send-message "$SMStext" \ + --send-message-target $Bnumber + else + uqmi -d $device --send-message "$SMStext" \ + --send-message-target $Bnumber \ + --send-message-smsc $smsc + fi + rm $sendFolder/$smsTOsend + smsTOsend=$(ls $sendFolder -w 1 | sed -n '1p') + [ -n "$smsTOsend" ] && sleep 1 + done + +# Check received SMS + for storage in sim me + do + messageID=$(uqmi -d $device --list-messages --storage $storage | jsonfilter -e '@[0]') + while [ -n "$messageID" ] + do + json_load "$(uqmi -s -d $device --get-message $messageID --storage $storage 2>/dev/null)" + json_get_var smsc smsc + json_get_var sender sender + json_get_var timestamp timestamp + json_get_var concat_ref concat_ref + json_get_var concat_part concat_part + json_get_var concat_parts concat_parts + json_get_var text text + timestamp=$(echo $timestamp | sed -e 's/-//g' | sed -e 's/://g' | sed -e 's/ /T/g') + if [ -n "$concat_ref" ] + then + sms_file=sms_${timestamp}_${concat_ref}_${concat_part}_${concat_parts} + else + sms_file=sms_${timestamp} + fi + echo "$sender" > $receiveFolder/$sms_file + echo "$text" >> $receiveFolder/$sms_file + logger -t uqmi_d SMS received from $sender + /usr/bin/uqmi_sms.sh $receiveFolder/${sms_file} 2> /dev/null + uqmi -d $device --delete-message $messageID --storage $storage + sleep 1 + messageID=$(uqmi -d $device --list-messages --storage $storage | jsonfilter -e '@[0]') + done + done + +# LED trigger + rssi=$(uqmi -s -d $device --get-signal-info | jsonfilter -e '@["rssi"]') + /usr/bin/uqmi_led.sh "$rssi" 2> /dev/null + + + sleep 30 +done From 77a1d4600f36a03648d4aa9d1e98cc579bc96bb5 Mon Sep 17 00:00:00 2001 From: Joonas Onatsu Date: Sat, 21 Sep 2024 23:48:56 +0300 Subject: [PATCH 2/2] uqmi: support ucs-2 in received SMS --- uqmi/files/usr/bin/uqmi_d.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/uqmi/files/usr/bin/uqmi_d.sh b/uqmi/files/usr/bin/uqmi_d.sh index aa249ec..5ab5d58 100644 --- a/uqmi/files/usr/bin/uqmi_d.sh +++ b/uqmi/files/usr/bin/uqmi_d.sh @@ -201,6 +201,7 @@ do json_get_var concat_part concat_part json_get_var concat_parts concat_parts json_get_var text text + json_get_var ucs2 ucs-2 timestamp=$(echo $timestamp | sed -e 's/-//g' | sed -e 's/://g' | sed -e 's/ /T/g') if [ -n "$concat_ref" ] then @@ -209,7 +210,14 @@ do sms_file=sms_${timestamp} fi echo "$sender" > $receiveFolder/$sms_file - echo "$text" >> $receiveFolder/$sms_file + if [ -n "$text" ] + then + echo "$text" >> $receiveFolder/$sms_file + fi + if [ -n "$ucs2" ] + then + echo '"'$ucs2'"' | sed 's/\([0-9A-F]\{4\}\)/\\\u\1/gI' | jsonfilter -e '@' >> $receiveFolder/$sms_file + fi logger -t uqmi_d SMS received from $sender /usr/bin/uqmi_sms.sh $receiveFolder/${sms_file} 2> /dev/null uqmi -d $device --delete-message $messageID --storage $storage