A problem with openconnect On Windows

xiao mybluebluesky2 at 163.com
Wed Nov 12 02:00:30 PST 2014


Hi,

>Interesting. When you press the disconnect button openconnect-gui
>sends the detach command to libopenconnect which should have ran the
>script. Isn't that the case?

 
  Sorry about that I hadn't explained it well. In fact,I am testing the openconnect of command line version in git(not gui)(I need the  console  client).
  
  I mean that  , at  the   line 1309 of the main.c , didn't  set the signal handler on Windows.


  so,  I try to  modify it like below , but It does not work ( I hope that the console client can receive the kill signal sended by  another process).


 diff --git a/main.c b/main.cindex df57698..753b24a 100644
--- a/main.c
+++ b/main.c
@@ -47,6 +47,8 @@
 #include "openconnect-internal.h"
 
 #ifdef _WIN32
+#include <signal.h>
+#include <winsock2.h>
 #include <shlwapi.h>
 #include <wtypes.h>
 #include <wincon.h>
@@ -668,6 +670,30 @@ static void set_default_vpncscript(void)
                default_vpncscript = "cscript " DEFAULT_VPNCSCRIPT;
        }
 }
+
+static void handle_signal_windows(int sig)
+{
+       char cmd=-1;
+
+       switch (sig) {
+       case SIGINT://interrupt(Ctrl+C)
+       case SIGTERM://Software termination signal from kill
+       case SIGABRT://abnormal termination triggered by abort call(Abort)
+               cmd = OC_CMD_CANCEL;
+               break;
+       case SIGFPE:
+       case SIGILL:
+       case SIGSEGV:
+       default:
+               return;
+               //cmd = OC_CMD_PAUSE;
+               //break;
+       }
+
+       if (send(sig_cmd_fd, &cmd, 1,0) < 0) {
+       /* suppress warn_unused_result */
+       }
+}
 #endif
 
 static void usage(void)
@@ -1292,6 +1318,10 @@ int main(int argc, char **argv)
        sigaction(SIGINT, &sa, NULL);
        sigaction(SIGHUP, &sa, NULL);
        sigaction(SIGUSR2, &sa, NULL);
+#else
+       signal(SIGINT,  handle_signal_windows);
+       signal(SIGTERM, handle_signal_windows);
+       signal(SIGABRT, handle_signal_windows);
 #endif /* !_WIN32 */
 
        sig_cmd_fd = openconnect_setup_cmd_pipe(vpninfo);



thanks,
xiao guang



More information about the openconnect-devel mailing list