about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorMichael Vetter <jubalh@iodoru.org>2020-01-30 11:13:19 +0100
committerMichael Vetter <jubalh@iodoru.org>2020-01-30 11:13:19 +0100
commitbf2e09feee1697c570fcfb9e1e44a8ec991bd196 (patch)
tree7f14b14d2531a03758dd1335a52de2a436ffdf19 /src
parentcd80b6cbf23bdf792dbbf6bedcba0bff2889a193 (diff)
downloadprofani-tty-bf2e09feee1697c570fcfb9e1e44a8ec991bd196.tar.gz
stanza: Refactor stanza_get_delay_from()
Have two helper functions one for XEP-0203 and one for XEP-0091.
Diffstat (limited to 'src')
-rw-r--r--src/xmpp/stanza.c75
1 files changed, 49 insertions, 26 deletions
diff --git a/src/xmpp/stanza.c b/src/xmpp/stanza.c
index 389e74c7..f793d035 100644
--- a/src/xmpp/stanza.c
+++ b/src/xmpp/stanza.c
@@ -1198,13 +1198,55 @@ stanza_get_delay(xmpp_stanza_t *const stanza)
     return stanza_get_delay_from(stanza, NULL);
 }
 
+static GDateTime*
+_stanza_get_delay_timestamp_xep0203(xmpp_stanza_t *const delay_stanza)
+{
+    GTimeVal utc_stamp;
+    const char *xmlns = xmpp_stanza_get_attribute(delay_stanza, STANZA_ATTR_XMLNS);
+
+    if (xmlns && (strcmp(xmlns, "urn:xmpp:delay") == 0)) {
+        const char *stamp = xmpp_stanza_get_attribute(delay_stanza, STANZA_ATTR_STAMP);
+
+        if (stamp && (g_time_val_from_iso8601(stamp, &utc_stamp))) {
+
+            GDateTime *utc_datetime = g_date_time_new_from_timeval_utc(&utc_stamp);
+            GDateTime *local_datetime = g_date_time_to_local(utc_datetime);
+            g_date_time_unref(utc_datetime);
+
+            return local_datetime;
+        }
+    }
+
+    return NULL;
+}
+
+static GDateTime*
+_stanza_get_delay_timestamp_xep0091(xmpp_stanza_t *const x_stanza)
+{
+    GTimeVal utc_stamp;
+    const char *xmlns = xmpp_stanza_get_attribute(x_stanza, STANZA_ATTR_XMLNS);
+
+    if (xmlns && (strcmp(xmlns, "jabber:x:delay") == 0)) {
+        const char *stamp = xmpp_stanza_get_attribute(x_stanza, STANZA_ATTR_STAMP);
+        if (stamp && (g_time_val_from_iso8601(stamp, &utc_stamp))) {
+
+            GDateTime *utc_datetime = g_date_time_new_from_timeval_utc(&utc_stamp);
+            GDateTime *local_datetime = g_date_time_to_local(utc_datetime);
+            g_date_time_unref(utc_datetime);
+
+            return local_datetime;
+        }
+    }
+
+    return NULL;
+}
+
 GDateTime*
 stanza_get_delay_from(xmpp_stanza_t *const stanza, gchar *from)
 {
-    GTimeVal utc_stamp;
-    // first check for XEP-0203 delayed delivery
     xmpp_stanza_t *delay;
 
+    // first check for XEP-0203 delayed delivery
     if (from) {
         delay = stanza_get_child_by_name_and_from(stanza, STANZA_NAME_DELAY, from);
     } else {
@@ -1212,38 +1254,19 @@ stanza_get_delay_from(xmpp_stanza_t *const stanza, gchar *from)
     }
 
     if (delay) {
-        const char *xmlns = xmpp_stanza_get_attribute(delay, STANZA_ATTR_XMLNS);
-        if (xmlns && (strcmp(xmlns, "urn:xmpp:delay") == 0)) {
-            const char *stamp = xmpp_stanza_get_attribute(delay, STANZA_ATTR_STAMP);
-            if (stamp && (g_time_val_from_iso8601(stamp, &utc_stamp))) {
-                GDateTime *utc_datetime = g_date_time_new_from_timeval_utc(&utc_stamp);
-                GDateTime *local_datetime = g_date_time_to_local(utc_datetime);
-                g_date_time_unref(utc_datetime);
-                return local_datetime;
-            }
-        }
+        return _stanza_get_delay_timestamp_xep0203(stanza);
     }
 
     // otherwise check for XEP-0091 legacy delayed delivery
     // stamp format : CCYYMMDDThh:mm:ss
-    xmpp_stanza_t *x;
     if (from) {
-        x = stanza_get_child_by_name_and_from(stanza, STANZA_NAME_X, from);
+        delay = stanza_get_child_by_name_and_from(stanza, STANZA_NAME_X, from);
     } else {
-        x = xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_X);
+        delay = xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_X);
     }
 
-    if (x) {
-        const char *xmlns = xmpp_stanza_get_attribute(x, STANZA_ATTR_XMLNS);
-        if (xmlns && (strcmp(xmlns, "jabber:x:delay") == 0)) {
-            const char *stamp = xmpp_stanza_get_attribute(x, STANZA_ATTR_STAMP);
-            if (stamp && (g_time_val_from_iso8601(stamp, &utc_stamp))) {
-                GDateTime *utc_datetime = g_date_time_new_from_timeval_utc(&utc_stamp);
-                GDateTime *local_datetime = g_date_time_to_local(utc_datetime);
-                g_date_time_unref(utc_datetime);
-                return local_datetime;
-            }
-        }
+    if (delay) {
+        return _stanza_get_delay_timestamp_xep0091(delay);
     }
 
     return NULL;