separate-extcmd.diff
author Myhailo Danylenko <isbear@isbear.org.ua>
Fri, 09 Dec 2016 02:12:34 +0200
changeset 92 66f7e2aa040c
parent 87 78238d26911a
permissions -rw-r--r--
Add fix-compile-warning-xmpp_c, refresh queue
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
92
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
     1
# HG changeset patch
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
     2
# Parent  4eeccf092a681b87a1a9d53f7de321f7653e1489
29
335662766a88 Some updates to add-cmake
Myhailo Danylenko <isbear@ukrpost.net>
parents: 26
diff changeset
     3
Move extcmd code from hooks
335662766a88 Some updates to add-cmake
Myhailo Danylenko <isbear@ukrpost.net>
parents: 26
diff changeset
     4
92
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
     5
diff -r 4eeccf092a68 mcabber/mcabber/Makefile.am
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
     6
--- a/mcabber/mcabber/Makefile.am	Fri Dec 09 01:38:25 2016 +0200
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
     7
+++ b/mcabber/mcabber/Makefile.am	Fri Dec 09 01:48:53 2016 +0200
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
     8
@@ -7,7 +7,8 @@
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     9
 		  xmpp.c xmpp.h xmpp_helper.c xmpp_helper.h xmpp_defines.h \
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    10
 		  xmpp_iq.c xmpp_iq.h xmpp_iqrequest.c xmpp_iqrequest.h \
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    11
 		  xmpp_muc.c xmpp_muc.h xmpp_s10n.c xmpp_s10n.h \
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    12
-		  caps.c caps.h help.c help.h carbons.c carbons.h
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    13
+		  caps.c caps.h help.c help.h carbons.c carbons.h \
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    14
+		  extcmd.c extcmd.h
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    15
 
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    16
 if OTR
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    17
 mcabber_SOURCES += otr.c otr.h nohtml.c nohtml.h
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    18
@@ -43,6 +44,7 @@
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    19
 			 xmpp_iq.h xmpp_iqrequest.h \
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    20
 			 xmpp_muc.h xmpp_s10n.h \
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    21
 			 caps.h fifo.h help.h modules.h api.h \
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    22
+			 extcmd.h \
55
8f5cf5969e25 Add fix-separate-build.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 36
diff changeset
    23
 			 $(top_builddir)/include/config.h
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
 
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
 if OTR
92
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
    26
diff -r 4eeccf092a68 mcabber/mcabber/extcmd.c
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
92
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
    28
+++ b/mcabber/mcabber/extcmd.c	Fri Dec 09 01:48:53 2016 +0200
62
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    29
@@ -0,0 +1,152 @@
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    30
+/*
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    31
+ * extcmd.c      -- External event handler command
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    32
+ *
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    33
+ * Copyright (C) 2005-2010 Mikael Berthe <mikael@lilotux.net>
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    34
+ *
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
+ * This program is free software; you can redistribute it and/or modify
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
+ * it under the terms of the GNU General Public License as published by
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    37
+ * the Free Software Foundation; either version 2 of the License, or (at
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    38
+ * your option) any later version.
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
+ *
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    40
+ * This program is distributed in the hope that it will be useful, but
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
+ * General Public License for more details.
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
+ *
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
+ * You should have received a copy of the GNU General Public License
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
+ * along with this program; if not, write to the Free Software
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
+ * USA
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
+ */
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    50
+
62
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    51
+#include <stdlib.h>    // mkstemp
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    52
+#include <string.h>    // strlen
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    53
+#include <signal.h>    // signal
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    54
+#include <sys/types.h> // waitpid
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    55
+#include <sys/wait.h>  // waitpid
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    56
+#include <unistd.h>    // fork, close, write, execl
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    57
+#include <glib.h>
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
+
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    59
+#include "screen.h"
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    60
+#include "roster.h"
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    61
+#include "settings.h"
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    62
+#include "utils.h"
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    63
+#include "utf8.h"
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    64
+
62
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    65
+#ifndef WAIT_ANY
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    66
+# define WAIT_ANY -1
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    67
+#endif
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    68
+
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    69
+static char *extcmd = NULL;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    70
+
62
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    71
+//  ext_sig_handler()
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    72
+// SIGCHLD handler.
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    73
+// wait()s for any terminated childs (to avoid hanging zombies)
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    74
+// and beeps, if child terminates with exit code 2.
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    75
+static void ext_sig_handler(int signum)
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    76
+{
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    77
+  int status;
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    78
+  pid_t pid;
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    79
+  do {
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    80
+    pid = waitpid (WAIT_ANY, &status, WNOHANG);
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    81
+    // Check the exit status value if 'eventcmd_checkstatus' is set
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    82
+    if (settings_opt_get_int("eventcmd_checkstatus")) {
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    83
+      if (pid > 0) {
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    84
+        // exit status 2 -> beep
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    85
+        if (WIFEXITED(status) && WEXITSTATUS(status) == 2) {
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    86
+          scr_beep();
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    87
+        }
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    88
+      }
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    89
+    }
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    90
+  } while (pid > 0);
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    91
+}
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    92
+
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    93
+//  hk_ext_cmd_init()
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    94
+// Initialize external command variable.
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    95
+// Can be called with parameter NULL to reset and free memory
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    96
+void hk_ext_cmd_init(const char *command)
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    97
+{
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    98
+  if (extcmd) {
62
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    99
+    signal(SIGCHLD, SIG_DFL);
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   100
+    g_free(extcmd);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   101
+    extcmd = NULL;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   102
+  }
62
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
   103
+  if (command) {
63
d268aa028975 Fix extcmd handler function name
Myhailo Danylenko <isbear@ukrpost.net>
parents: 62
diff changeset
   104
+    signal(SIGCHLD, ext_sig_handler);
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   105
+    extcmd = expand_filename(command);
62
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
   106
+  }
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   107
+}
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   108
+
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   109
+//  hk_ext_cmd()
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   110
+// Launch an external command (process) for the given event.
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   111
+// For now, data should be NULL.
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   112
+void hk_ext_cmd(const char *name, const char *arg_type, const char *arg_info, const char *data)
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   113
+{
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   114
+  pid_t pid;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   115
+  char *arg_data = NULL;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   116
+  char *datafname = NULL;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   117
+
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   118
+  if (!arg_type || !arg_info) return;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   119
+
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   120
+  if (*name && settings_opt_get_int("eventcmd_use_nickname"))
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   121
+    name = roster_getname(name);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   122
+
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   123
+  if (data && settings_opt_get_int("event_log_files")) {
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   124
+    int fd;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   125
+    const char *prefix;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   126
+    char *prefix_xp = NULL;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   127
+    char *data_locale;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   128
+
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   129
+    data_locale = from_utf8(data);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   130
+    prefix = settings_opt_get("event_log_dir");
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   131
+    if (prefix)
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   132
+      prefix = prefix_xp = expand_filename(prefix);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   133
+    else
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   134
+      prefix = ut_get_tmpdir();
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   135
+    datafname = g_strdup_printf("%s/mcabber-%d.XXXXXX", prefix, getpid());
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   136
+    g_free(prefix_xp);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   137
+
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   138
+    // XXX Some old systems may require us to set umask first.
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   139
+    fd = mkstemp(datafname);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   140
+    if (fd == -1) {
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   141
+      g_free(datafname);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   142
+      datafname = NULL;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   143
+      scr_LogPrint(LPRINT_LOGNORM,
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   144
+                   "Unable to create temp file for external command.");
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   145
+    } else {
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   146
+      size_t data_locale_len = strlen(data_locale);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   147
+      ssize_t a = write(fd, data_locale, data_locale_len);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   148
+      ssize_t b = write(fd, "\n", 1);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   149
+      if ((size_t)a != data_locale_len || b != 1) {
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   150
+        g_free(datafname);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   151
+        datafname = NULL;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   152
+        scr_LogPrint(LPRINT_LOGNORM,
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   153
+                     "Unable to write to temp file for external command.");
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   154
+      }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   155
+      close(fd);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   156
+      arg_data = datafname;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   157
+    }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   158
+    g_free(data_locale);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   159
+  }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   160
+
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   161
+  if ((pid=fork()) == -1) {
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   162
+    scr_LogPrint(LPRINT_LOGNORM, "Fork error, cannot launch external command.");
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   163
+    g_free(datafname);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   164
+    return;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   165
+  }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   166
+
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   167
+  if (pid == 0) { // child
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   168
+    // Close standard file descriptors
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   169
+    close(STDIN_FILENO);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   170
+    close(STDOUT_FILENO);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   171
+    close(STDERR_FILENO);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   172
+    if (execl(extcmd, extcmd, arg_type, arg_info, name, arg_data,
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   173
+              (char *)NULL) == -1) {
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   174
+      // scr_LogPrint(LPRINT_LOGNORM, "Cannot execute external command.");
62
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
   175
+      exit(EXIT_FAILURE);
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   176
+    }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   177
+  }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   178
+  g_free(datafname);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   179
+}
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   180
+
62
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
   181
+/* vim: set expandtab cindent cinoptions=>2\:2(0 ts=2 sw=2:  For Vim users... */
92
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   182
diff -r 4eeccf092a68 mcabber/mcabber/extcmd.h
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   183
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
92
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   184
+++ b/mcabber/mcabber/extcmd.h	Fri Dec 09 01:48:53 2016 +0200
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   185
@@ -0,0 +1,15 @@
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   186
+#ifndef __MCABBER_EXTCMD_H__
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   187
+#define __MCABBER_EXTCMD_H__ 1
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   188
+
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   189
+#define EXT_CMD_TYPE_MESSAGE   "MSG"
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   190
+#define EXT_CMD_TYPE_STATUS    "STATUS"
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   191
+#define EXT_CMD_TYPE_UNREAD    "UNREAD"
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   192
+
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   193
+#define EXT_CMD_INFO_RECEIVED  "IN"
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   194
+#define EXT_CMD_INFO_SENT      "OUT"
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   195
+#define EXT_CMD_INFO_GROUPCHAT "MUC"
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   196
+
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   197
+void hk_ext_cmd_init(const char *command);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   198
+void hk_ext_cmd(const char *bjid, const char *type, const char *info, const char *data);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   199
+
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   200
+#endif
92
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   201
diff -r 4eeccf092a68 mcabber/mcabber/hooks.c
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   202
--- a/mcabber/mcabber/hooks.c	Fri Dec 09 01:38:25 2016 +0200
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   203
+++ b/mcabber/mcabber/hooks.c	Fri Dec 09 01:48:53 2016 +0200
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   204
@@ -22,6 +22,7 @@
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   205
 #include <string.h>
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   206
 #include <sys/types.h>
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   207
 #include <unistd.h>
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   208
+#include <ctype.h>
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   209
 
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   210
 #include "hooks.h"
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   211
 #include "screen.h"
92
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   212
@@ -33,6 +34,7 @@
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   213
 #include "utf8.h"
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   214
 #include "commands.h"
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   215
 #include "main.h"
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   216
+#include "extcmd.h"
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   217
 
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   218
 #ifdef MODULES_ENABLE
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   219
 #include <glib.h>
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   220
@@ -177,8 +179,6 @@
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   221
 }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   222
 #endif
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   223
 
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   224
-static char *extcmd;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   225
-
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   226
 static const char *COMMAND_ME = "/me ";
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   227
 
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   228
 void hk_message_in(const char *bjid, const char *resname,
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   229
@@ -195,7 +195,6 @@
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   230
   char *wmsg = NULL, *bmsg = NULL, *mmsg = NULL;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   231
   GSList *roster_usr;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   232
   unsigned mucnicklen = 0;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   233
-  const char *ename = NULL;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   234
   gboolean attention = FALSE, mucprivmsg = FALSE;
16
ca5a2f1def20 Rebase to new development version
Mikael Berthe <mikael@lilotux.net>
parents: 14
diff changeset
   235
   gboolean error_msg_subtype = (type == LM_MESSAGE_SUB_TYPE_ERROR);
14
020fbfb5441c Rebase to dev:15
Myhailo Danylenko <isbear@ukrpost.net>
parents: 0
diff changeset
   236
 #ifdef MODULES_ENABLE
92
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   237
@@ -377,19 +376,6 @@
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   238
       (!is_room || (is_groupchat && log_muc_conf && !timestamp)))
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   239
     hlog_write_message(bjid, timestamp, 0, wmsg);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   240
 
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   241
-  if (settings_opt_get_int("events_ignore_active_window") &&
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   242
-      current_buddy && scr_get_chatmode()) {
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   243
-    gpointer bud = BUDDATA(current_buddy);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   244
-    if (bud) {
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   245
-      const char *cjid = buddy_getjid(bud);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   246
-      if (cjid && !strcasecmp(cjid, bjid))
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   247
-        active_window = TRUE;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   248
-    }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   249
-  }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   250
-
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   251
-  if (settings_opt_get_int("eventcmd_use_nickname"))
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   252
-    ename = roster_getname(bjid);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   253
-
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   254
   // Display the sender in the log window
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   255
   if ((!is_groupchat) && !(message_flags & HBB_PREFIX_ERR) &&
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   256
       settings_opt_get_int("log_display_sender")) {
92
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   257
@@ -416,12 +402,24 @@
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   258
   }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   259
 #endif
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   260
 
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   261
+  if (settings_opt_get_int("events_ignore_active_window") &&
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   262
+      current_buddy && scr_get_chatmode()) {
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   263
+    gpointer bud = BUDDATA(current_buddy);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   264
+    if (bud) {
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   265
+      const char *cjid = buddy_getjid(bud);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   266
+      if (cjid && !strcasecmp(cjid, bjid))
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   267
+        active_window = TRUE;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   268
+    }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   269
+  }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   270
+
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   271
   // External command
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   272
   // - We do not call hk_ext_cmd() for history lines in MUC
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   273
   // - We do call hk_ext_cmd() for private messages in a room
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   274
   // - We do call hk_ext_cmd() for messages to the current window
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   275
   if (!active_window && ((is_groupchat && !timestamp) || !is_groupchat))
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   276
-    hk_ext_cmd(ename ? ename : bjid, (is_groupchat ? 'G' : 'M'), 'R', wmsg);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   277
+    hk_ext_cmd(bjid, EXT_CMD_TYPE_MESSAGE,
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   278
+               is_groupchat ? EXT_CMD_INFO_GROUPCHAT : EXT_CMD_INFO_RECEIVED,
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   279
+               wmsg);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   280
 
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   281
   // Beep, if enabled:
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   282
   // - if it's a private message
92
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   283
@@ -503,7 +501,7 @@
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   284
 #endif
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   285
 
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   286
   // External command
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   287
-  hk_ext_cmd(bjid, 'M', 'S', NULL);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   288
+  hk_ext_cmd(bjid, EXT_CMD_TYPE_MESSAGE, EXT_CMD_INFO_SENT, NULL);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   289
 
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   290
   g_free(bmsg);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   291
   g_free(mmsg);
92
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   292
@@ -518,10 +516,7 @@
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   293
   char *bn;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   294
   char *logsmsg;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   295
   const char *rn = (resname ? resname : "");
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   296
-  const char *ename = NULL;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   297
-
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   298
-  if (settings_opt_get_int("eventcmd_use_nickname"))
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   299
-    ename = roster_getname(bjid);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   300
+  char newstatus[2] = { '?', '\0' };
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   301
 
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   302
   oldstat = roster_getstatus(bjid, resname);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   303
 
92
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   304
@@ -572,27 +567,28 @@
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   305
   build_buddylist = TRUE;
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   306
   hlog_write_status(bjid, timestamp, status, status_msg);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   307
 
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   308
+  newstatus[0] = imstatus2char[status];
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   309
+
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   310
 #ifdef MODULES_ENABLE
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   311
   {
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   312
     char os[2] = " \0";
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   313
-    char ns[2] = " \0";
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   314
     hk_arg_t args[] = {
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   315
       { "jid", bjid },
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   316
       { "resource", rn },
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   317
       { "old_status", os },
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   318
-      { "new_status", ns },
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   319
+      { "new_status", newstatus },
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   320
       { "message", status_msg ? status_msg : "" },
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   321
       { NULL, NULL },
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   322
     };
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   323
     os[0] = imstatus2char[oldstat];
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   324
-    ns[0] = imstatus2char[status];
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   325
 
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   326
     hk_run_handlers(HOOK_STATUS_CHANGE, args);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   327
   }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   328
 #endif
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   329
 
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   330
   // External command
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   331
-  hk_ext_cmd(ename ? ename : bjid, 'S', imstatus2char[status], NULL);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   332
+  newstatus[0] = toupper(newstatus[0]);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   333
+  hk_ext_cmd(bjid, EXT_CMD_TYPE_STATUS, newstatus, status_msg);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   334
 }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   335
 
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   336
 void hk_mystatuschange(time_t timestamp, enum imstatus old_status,
92
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   337
@@ -717,7 +713,7 @@
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   338
   /* Call external command */
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   339
   str_unread = g_strdup_printf("%u %u %u %u", unread_count, attention_count,
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   340
                                muc_unread, muc_attention);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   341
-  hk_ext_cmd("", 'U', (guchar)MIN(255, unread_count), str_unread);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   342
+  hk_ext_cmd("", EXT_CMD_TYPE_UNREAD, str_unread, NULL);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   343
   g_free(str_unread);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   344
 }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   345
 
92
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   346
@@ -757,123 +753,4 @@
14
020fbfb5441c Rebase to dev:15
Myhailo Danylenko <isbear@ukrpost.net>
parents: 0
diff changeset
   347
   return 0;
020fbfb5441c Rebase to dev:15
Myhailo Danylenko <isbear@ukrpost.net>
parents: 0
diff changeset
   348
 }
020fbfb5441c Rebase to dev:15
Myhailo Danylenko <isbear@ukrpost.net>
parents: 0
diff changeset
   349
 
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   350
-
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   351
-/* External commands */
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   352
-
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   353
-//  hk_ext_cmd_init()
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   354
-// Initialize external command variable.
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   355
-// Can be called with parameter NULL to reset and free memory.
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   356
-void hk_ext_cmd_init(const char *command)
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   357
-{
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   358
-  if (extcmd) {
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   359
-    g_free(extcmd);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   360
-    extcmd = NULL;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   361
-  }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   362
-  if (command)
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   363
-    extcmd = expand_filename(command);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   364
-}
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   365
-
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   366
-//  hk_ext_cmd()
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   367
-// Launch an external command (process) for the given event.
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   368
-// For now, data should be NULL.
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   369
-void hk_ext_cmd(const char *bjid, guchar type, guchar info, const char *data)
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   370
-{
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   371
-  pid_t pid;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   372
-  const char *arg_type = NULL;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   373
-  const char *arg_info = NULL;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   374
-  const char *arg_data = NULL;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   375
-  char status_str[2];
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   376
-  char *datafname = NULL;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   377
-
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   378
-  if (!extcmd) return;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   379
-
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   380
-  // Prepare arg_* (external command parameters)
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   381
-  switch (type) {
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   382
-    case 'M': /* Normal message */
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   383
-        arg_type = "MSG";
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   384
-        if (info == 'R')
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   385
-          arg_info = "IN";
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   386
-        else if (info == 'S')
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   387
-          arg_info = "OUT";
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   388
-        break;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   389
-    case 'G': /* Groupchat message */
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   390
-        arg_type = "MSG";
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   391
-        arg_info = "MUC";
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   392
-        break;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   393
-    case 'S': /* Status change */
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   394
-        arg_type = "STATUS";
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   395
-        if (strchr(imstatus2char, tolower(info))) {
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   396
-          status_str[0] = toupper(info);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   397
-          status_str[1] = 0;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   398
-          arg_info = status_str;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   399
-        }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   400
-        break;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   401
-    case 'U': /* Unread buffer count */
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   402
-        arg_type = "UNREAD";
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   403
-        arg_info = data;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   404
-        break;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   405
-    default:
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   406
-        return;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   407
-  }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   408
-
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   409
-  if (!arg_type || !arg_info) return;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   410
-
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   411
-  if (strchr("MG", type) && data && settings_opt_get_int("event_log_files")) {
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   412
-    int fd;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   413
-    const char *prefix;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   414
-    char *prefix_xp = NULL;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   415
-    char *data_locale;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   416
-
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   417
-    data_locale = from_utf8(data);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   418
-    prefix = settings_opt_get("event_log_dir");
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   419
-    if (prefix)
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   420
-      prefix = prefix_xp = expand_filename(prefix);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   421
-    else
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   422
-      prefix = ut_get_tmpdir();
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   423
-    datafname = g_strdup_printf("%s/mcabber-%d.XXXXXX", prefix, getpid());
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   424
-    g_free(prefix_xp);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   425
-
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   426
-    // XXX Some old systems may require us to set umask first.
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   427
-    fd = mkstemp(datafname);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   428
-    if (fd == -1) {
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   429
-      g_free(datafname);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   430
-      datafname = NULL;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   431
-      scr_LogPrint(LPRINT_LOGNORM,
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   432
-                   "Unable to create temp file for external command.");
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   433
-    } else {
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   434
-      size_t data_locale_len = strlen(data_locale);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   435
-      ssize_t a = write(fd, data_locale, data_locale_len);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   436
-      ssize_t b = write(fd, "\n", 1);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   437
-      if ((size_t)a != data_locale_len || b != 1) {
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   438
-        g_free(datafname);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   439
-        datafname = NULL;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   440
-        scr_LogPrint(LPRINT_LOGNORM,
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   441
-                     "Unable to write to temp file for external command.");
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   442
-      }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   443
-      close(fd);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   444
-      arg_data = datafname;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   445
-    }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   446
-    g_free(data_locale);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   447
-  }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   448
-
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   449
-  if ((pid=fork()) == -1) {
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   450
-    scr_LogPrint(LPRINT_LOGNORM, "Fork error, cannot launch external command.");
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   451
-    g_free(datafname);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   452
-    return;
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   453
-  }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   454
-
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   455
-  if (pid == 0) { // child
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   456
-    // Close standard file descriptors
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   457
-    close(STDIN_FILENO);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   458
-    close(STDOUT_FILENO);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   459
-    close(STDERR_FILENO);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   460
-    if (execl(extcmd, extcmd, arg_type, arg_info, bjid, arg_data,
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   461
-              (char *)NULL) == -1) {
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   462
-      // scr_LogPrint(LPRINT_LOGNORM, "Cannot execute external command.");
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   463
-      exit(1);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   464
-    }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   465
-  }
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   466
-  g_free(datafname);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   467
-}
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   468
-
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   469
 /* vim: set expandtab cindent cinoptions=>2\:2(0 sw=2 ts=2:  For Vim users... */
92
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   470
diff -r 4eeccf092a68 mcabber/mcabber/hooks.h
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   471
--- a/mcabber/mcabber/hooks.h	Fri Dec 09 01:38:25 2016 +0200
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   472
+++ b/mcabber/mcabber/hooks.h	Fri Dec 09 01:48:53 2016 +0200
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
   473
@@ -67,9 +67,6 @@
14
020fbfb5441c Rebase to dev:15
Myhailo Danylenko <isbear@ukrpost.net>
parents: 0
diff changeset
   474
 guint hk_subscription(LmMessageSubType mstype, const gchar *bjid,
020fbfb5441c Rebase to dev:15
Myhailo Danylenko <isbear@ukrpost.net>
parents: 0
diff changeset
   475
                       const gchar *msg);
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   476
 
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   477
-void hk_ext_cmd_init(const char *command);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   478
-void hk_ext_cmd(const char *bjid, guchar type, guchar info, const char *data);
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   479
-
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   480
 #endif /* __MCABBER_HOOKS_H__ */
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   481
 
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   482
 /* vim: set expandtab cindent cinoptions=>2\:2(0 sw=2 ts=2:  For Vim users... */
92
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   483
diff -r 4eeccf092a68 mcabber/mcabber/main.c
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   484
--- a/mcabber/mcabber/main.c	Fri Dec 09 01:38:25 2016 +0200
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   485
+++ b/mcabber/mcabber/main.c	Fri Dec 09 01:48:53 2016 +0200
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   486
@@ -17,14 +17,18 @@
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   487
  * along with this program; if not, see <http://www.gnu.org/licenses/>.
62
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
   488
  */
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
   489
 
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
   490
-#include <stdio.h>
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
   491
-#include <stdlib.h>
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
   492
-#include <unistd.h>
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
   493
-#include <string.h>
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
   494
-#include <signal.h>
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
   495
-#include <termios.h>
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
   496
-#include <sys/types.h>
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
   497
-#include <sys/wait.h>
64
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   498
+#include <stdio.h>     // fprintf, fileno, fgets, puts
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   499
+#include <stdlib.h>    // exit, getenv
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   500
+#include <unistd.h>    // tcsetattr, tcgetattr, getopt
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   501
+#include <string.h>    // strchr, strlen, memset
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   502
+#include <signal.h>    // signal
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   503
+#include <termios.h>   // tcsetattr, tcgetattr
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   504
+#include <sys/types.h> // waitpid
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   505
+#include <sys/wait.h>  // waitpid
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   506
+#include <glib.h>
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   507
+#include <config.h>
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   508
+#include <poll.h>      // POLLIN, POLLERR, POLLPRI
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   509
+
62
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
   510
 #include <glib.h>
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
   511
 #include <config.h>
64
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   512
 #include <poll.h>
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
   513
@@ -45,6 +49,7 @@
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   514
 #include "help.h"
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   515
 #include "events.h"
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
   516
 #include "compl.h"
0
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   517
+#include "extcmd.h"
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   518
 
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   519
 #ifndef MODULES_ENABLE
633272cbb544 Initial experimental branch commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   520
 # include "fifo.h"
92
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   521
@@ -425,10 +430,10 @@
64
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   522
       case 'h':
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   523
       case '?':
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   524
         printf("Usage: %s [-h|-V|-f mcabberrc_file]\n\n", argv[0]);
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   525
-        return (c == 'h' ? 0 : -1);
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   526
+        return (c == 'h' ? EXIT_SUCCESS : EXIT_FAILURE);
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   527
       case 'V':
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   528
         compile_options();
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   529
-        return 0;
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   530
+        return EXIT_SUCCESS;
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   531
       case 'f':
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   532
         configFile = g_strdup(optarg);
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   533
         break;
92
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   534
@@ -437,7 +442,7 @@
62
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
   535
 
64
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   536
   if (optind < argc) {
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   537
     fprintf(stderr, "Usage: %s [-h|-V|-f mcabberrc_file]\n\n", argv[0]);
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   538
-    return -1;
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   539
+    return EXIT_FAILURE;
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   540
   }
62
f5249c9544e5 Fixes (eventcmd, otr4)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
   541
 
64
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   542
   /* Initialize command system, roster and default key bindings */
92
66f7e2aa040c Add fix-compile-warning-xmpp_c, refresh queue
Myhailo Danylenko <isbear@isbear.org.ua>
parents: 87
diff changeset
   543
@@ -644,7 +649,7 @@
64
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   544
 
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   545
   printf("\n\nThanks for using mcabber!\n");
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   546
 
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   547
-  return 0;
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   548
+  return EXIT_SUCCESS;
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   549
 }
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   550
 
d328b18462bd Add cmdopts.diff
Myhailo Danylenko <isbear@ukrpost.net>
parents: 63
diff changeset
   551
 /* vim: set expandtab cindent cinoptions=>2\:2(0 sw=2 ts=2:  For Vim users... */