added verbosity level to stroke
authorMartin Willi <martin@strongswan.org>
Tue, 24 Oct 2006 08:44:47 +0000 (08:44 -0000)
committerMartin Willi <martin@strongswan.org>
Tue, 24 Oct 2006 08:44:47 +0000 (08:44 -0000)
src/charon/threads/stroke_interface.c
src/starter/starterstroke.c
src/stroke/stroke.c
src/stroke/stroke.h

index 988390e..111ef84 100755 (executable)
@@ -496,7 +496,10 @@ static void stroke_initiate(private_stroke_t *this, stroke_msg_t *msg)
                                                                                                                         msg->initiate.name);
        if (connection == NULL)
        {
-               fprintf(this->out, "no connection named '%s'\n", msg->initiate.name);
+               if (msg->output_verbosity >= 0)
+               {
+                       fprintf(this->out, "no connection named '%s'\n", msg->initiate.name);
+               }
                return;
        }
        if (!connection->is_ikev2(connection))
@@ -509,11 +512,17 @@ static void stroke_initiate(private_stroke_t *this, stroke_msg_t *msg)
                                                                                                  msg->initiate.name);
        if (policy == NULL)
        {
-               fprintf(this->out, "no policy named '%s'\n", msg->initiate.name);
+               if (msg->output_verbosity >= 0)
+               {
+                       fprintf(this->out, "no policy named '%s'\n", msg->initiate.name);
+               }
                connection->destroy(connection);
                return;
        }
-       fprintf(this->out, "initiating connection '%s'\n", msg->initiate.name);
+       if (msg->output_verbosity >= 0)
+       {
+               fprintf(this->out, "initiating connection '%s'\n", msg->initiate.name);
+       }
        
        job = initiate_job_create(connection, policy);
        
@@ -529,7 +538,8 @@ static void stroke_initiate(private_stroke_t *this, stroke_msg_t *msg)
                
                signal = charon->bus->listen(charon->bus, &level, &thread, &ike_sa, &format, &args);
                
-               if (ike_sa == init_ike_sa && level <= LEVEL_CTRL)
+               if ((init_ike_sa == NULL || ike_sa == init_ike_sa) &&
+                       level <= msg->output_verbosity)
                {
                        if (vfprintf(this->out, format, args) < 0 ||
                                fprintf(this->out, "\n") < 0 ||
@@ -544,15 +554,20 @@ static void stroke_initiate(private_stroke_t *this, stroke_msg_t *msg)
                {
                        case SIG_IKE_UP:
                        case SIG_IKE_FAILED:
-                       case SIG_IKE_DOWN:
+                       case SIG_CHILD_UP:
+                       case SIG_CHILD_FAILED:
                                if (ike_sa == init_ike_sa)
                                {
                                        charon->bus->set_listen_state(charon->bus, FALSE);
+                                       return;
                                }
-                               return;
+                               continue;
                        case SIG_INITIATE:
-                               init_ike_sa = ike_sa;
-                               /* fall through */
+                               if (init_ike_sa == NULL)
+                               {
+                                       init_ike_sa = ike_sa;
+                               }
+                               continue;
                        default:
                                continue;
                }
index 752ebc1..aae8d5b 100644 (file)
@@ -83,6 +83,9 @@ static int send_stroke_msg (stroke_msg_t *msg)
        struct sockaddr_un ctl_addr = { AF_UNIX, CHARON_CTL_FILE };
        int byte_count;
        char buffer[64];
+       
+       /* starter is not called from commandline, and therefore absolutely silent */
+       msg->output_verbosity = -1;
 
        int sock = socket(AF_UNIX, SOCK_STREAM, 0);
 
index 1d4d118..3cc297a 100644 (file)
@@ -57,6 +57,8 @@ static int send_stroke_msg (stroke_msg_t *msg)
        char buffer[64];
        int byte_count;
        
+       msg->output_verbosity = 1; /* CONTROL */
+       
        sock = socket(AF_UNIX, SOCK_STREAM, 0);
        if (sock < 0)
        {
index 048ee08..42a8a96 100644 (file)
@@ -122,6 +122,9 @@ struct stroke_msg_t {
                STR_REREAD
                /* more to come */
        } type;
+       
+       /* verbosity of output returned from charon (-from -1=silent to 4=private)*/
+       int output_verbosity;
 
        union {
                /* data for STR_INITIATE, STR_ROUTE, STR_UP, STR_DOWN, ... */