From d8454a483f56d10b65a7c4e9257fe01179b1862d Mon Sep 17 00:00:00 2001
From: "Rob Swindell (on ChromeOS)" <rob@synchro.net>
Date: Wed, 31 May 2023 19:43:38 -0700
Subject: [PATCH] Add subscibe_qos property (exposes/overrides default
 subscribe QoS)

---
 src/sbbs3/js_mqtt.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/sbbs3/js_mqtt.c b/src/sbbs3/js_mqtt.c
index d4a54d0a2c..461bf896df 100644
--- a/src/sbbs3/js_mqtt.c
+++ b/src/sbbs3/js_mqtt.c
@@ -333,6 +333,7 @@ enum {
 	,MQTT_PROP_KEEPALIVE
 	,MQTT_PROP_PROT_VER
 	,MQTT_PROP_PUB_QOS
+	,MQTT_PROP_SUB_QOS
 	,MQTT_PROP_TLS_MODE
 	,MQTT_PROP_TLS_CAFILE
 	,MQTT_PROP_TLS_CERTFILE
@@ -356,6 +357,7 @@ static char* com_prop_desc[] = {
 	,"Seconds of time to keep inactive connection alive"
 	,"Protocol version number (3 = 3.1.0, 4 = 3.1.1, 5 = 5.0)"
 	,"Quality Of Service (QOS) value to use when publishing, by default"
+	,"Quality Of Service (QOS) value to use when subscribing, by default"
 	,"TLS (encryption) mode"
 	,"TLS Certificate Authority (CA) certificate (file path)"
 	,"TLS Client certificate (file path)"
@@ -414,6 +416,11 @@ static JSBool js_mqtt_set(JSContext* cx, JSObject* obj, jsid id, JSBool strict,
 				return JS_FALSE;
 			p->cfg.publish_qos = i;
 			break;
+		case MQTT_PROP_SUB_QOS:
+			if(!JS_ValueToInt32(cx, *vp, &i))
+				return JS_FALSE;
+			p->cfg.subscribe_qos = i;
+			break;
 		case MQTT_PROP_TLS_MODE:
 			if(!JS_ValueToInt32(cx, *vp, &i))
 				return JS_FALSE;
@@ -513,6 +520,9 @@ static JSBool js_mqtt_get(JSContext* cx, JSObject* obj, jsid id, jsval *vp)
 		case MQTT_PROP_PUB_QOS:
 			*vp = INT_TO_JSVAL(p->cfg.publish_qos);
 			break;
+		case MQTT_PROP_SUB_QOS:
+			*vp = INT_TO_JSVAL(p->cfg.subscribe_qos);
+			break;
 		case MQTT_PROP_TLS_MODE:
 			*vp = INT_TO_JSVAL(p->cfg.tls.mode);
 			break;
@@ -585,6 +595,7 @@ static jsSyncPropertySpec js_mqtt_properties[] = {
 	{	"keepalive"			,MQTT_PROP_KEEPALIVE	,MQTT_PROP_FLAGS,	320 },
 	{	"protocol_version"	,MQTT_PROP_PROT_VER		,MQTT_PROP_FLAGS,	320 },
 	{	"publish_qos"		,MQTT_PROP_PUB_QOS		,MQTT_PROP_FLAGS,	320 },
+	{	"subscribe_qos"		,MQTT_PROP_SUB_QOS		,MQTT_PROP_FLAGS,	320 },
 	{	"tls_mode"			,MQTT_PROP_TLS_MODE		,MQTT_PROP_FLAGS,	320 },
 	{	"tls_ca_cert"		,MQTT_PROP_TLS_CAFILE	,MQTT_PROP_FLAGS,	320 },
 	{	"tls_client_cert"	,MQTT_PROP_TLS_CERTFILE	,MQTT_PROP_FLAGS,	320 },
@@ -621,7 +632,8 @@ static jsSyncMethodSpec js_mqtt_functions[] = {
 	{"read",		js_read,		0, 	JSTYPE_STRING
 		,JSDOCSTR("[timeout=0] [,bool verbpose=false]")
 		,JSDOCSTR("Read next message, optionally waiting for <i>timeout</i> milliseconds, "
-			"returns an object when <i>verbose</i> is <tt>true</tt>")
+			"returns an object instead of a string when <i>verbose</i> is <tt>true</tt>. "
+			"Returns <i>false</i> when no message is available.")
 		,320
 	},
 	{0}
-- 
GitLab