client.c
author viric <viriketo@gmail.com>
Sun, 20 Mar 2016 11:25:28 +0100
changeset 344 9be22a4aa695
parent 340 11c5a9e7b9a8
permissions -rw-r--r--
Description: Respect external CFLAGS and CPPFLAGS Author: Alexander Inyukhin <shurick@sectorb.msk.ru> Forwarded: yes Last-Update: 2012-06-09
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
49
09bb8a5583e9 Added the license.
lbatlle@npdl268.bpo.hp.com
parents: 44
diff changeset
     1
/*
09bb8a5583e9 Added the license.
lbatlle@npdl268.bpo.hp.com
parents: 44
diff changeset
     2
    Task Spooler - a task queue system for the unix user
267
11631dd11ff8 Updating copyright years in the source.
viric@mandarina
parents: 265
diff changeset
     3
    Copyright (C) 2007-2009  LluĂ­s Batlle i Rossell
49
09bb8a5583e9 Added the license.
lbatlle@npdl268.bpo.hp.com
parents: 44
diff changeset
     4
09bb8a5583e9 Added the license.
lbatlle@npdl268.bpo.hp.com
parents: 44
diff changeset
     5
    Please find the license in the provided COPYING file.
09bb8a5583e9 Added the license.
lbatlle@npdl268.bpo.hp.com
parents: 44
diff changeset
     6
*/
9
9acd8ae3190c First usable version!
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
     7
#include <stdio.h>
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
     8
#include <string.h>
147
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
     9
#include <unistd.h>
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
    10
#include <stdlib.h>
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
    11
#include <sys/types.h>
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
    12
#include <sys/socket.h>
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
    13
#include <sys/time.h>
340
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 329
diff changeset
    14
#include <signal.h>
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    15
#include "main.h"
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
    16
110
2726c92a5cb3 Half-code for 'times'
viric@mandarina
parents: 92
diff changeset
    17
static void c_end_of_job(const struct Result *res);
226
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
    18
static void c_wait_job_send();
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
    19
static void c_wait_running_job_send();
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
    20
71
531666e297d7 Send e-letter implemented.
viric@llimona
parents: 69
diff changeset
    21
char *build_command_string()
68
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    22
{
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    23
    int size;
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    24
    int i;
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    25
    int num;
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    26
    char **array;
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    27
    char *commandstring;
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    28
    
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    29
    size = 0;
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    30
    num = command_line.command.num;
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    31
    array = command_line.command.array;
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    32
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    33
    /* Count bytes needed */
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    34
    for (i = 0; i < num; ++i)
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    35
    {
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    36
        /* The '1' is for spaces, and at the last i,
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    37
         * for the null character */
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    38
        size = size + strlen(array[i]) + 1;
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    39
    }
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    40
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    41
    /* Alloc */
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    42
    commandstring = (char *) malloc(size);
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
    43
    if(commandstring == NULL)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
    44
        error("Error in malloc for commandstring");
68
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    45
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    46
    /* Build the command */
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    47
    strcpy(commandstring, array[0]);
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    48
    for (i = 1; i < num; ++i)
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    49
    {
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    50
        strcat(commandstring, " ");
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    51
        strcat(commandstring, array[i]);
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    52
    }
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    53
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    54
    return commandstring;
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    55
}
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    56
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    57
void c_new_job()
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    58
{
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    59
    struct msg m;
68
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    60
    char *new_command;
147
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    61
    char *myenv;
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    62
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    63
    m.type = NEWJOB;
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    64
68
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    65
    new_command = build_command_string();
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    66
147
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    67
    myenv = get_environment();
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    68
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
    69
    /* global */
68
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    70
    m.u.newjob.command_size = strlen(new_command) + 1; /* add null */
147
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    71
    if (myenv)
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    72
        m.u.newjob.env_size = strlen(myenv) + 1; /* add null */
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    73
    else
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    74
        m.u.newjob.env_size = 0;
150
a615d7971bf6 Added -L (label)
viric@llimona
parents: 147
diff changeset
    75
    if (command_line.label)
a615d7971bf6 Added -L (label)
viric@llimona
parents: 147
diff changeset
    76
        m.u.newjob.label_size = strlen(command_line.label) + 1; /* add null */
a615d7971bf6 Added -L (label)
viric@llimona
parents: 147
diff changeset
    77
    else
a615d7971bf6 Added -L (label)
viric@llimona
parents: 147
diff changeset
    78
        m.u.newjob.label_size = 0;
30
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 27
diff changeset
    79
    m.u.newjob.store_output = command_line.store_output;
259
ba3827aa8f25 Adding -D. Forward to 0.6.3.
viric@mandarina
parents: 253
diff changeset
    80
    m.u.newjob.do_depend = command_line.do_depend;
ba3827aa8f25 Adding -D. Forward to 0.6.3.
viric@mandarina
parents: 253
diff changeset
    81
    m.u.newjob.depend_on = command_line.depend_on;
55
678ca291d545 Now the '-nf' doesn't leave a job in 'finished' state.
viric@llimona
parents: 53
diff changeset
    82
    m.u.newjob.should_keep_finished = command_line.should_keep_finished;
147
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    83
    m.u.newjob.command_size = strlen(new_command) + 1; /* add null */
295
a63f43a17fd7 Adding the option '-B' for Mark, that will make ts quit if it cannot enqueue a
viric <viriketo@gmail.com>
parents: 282
diff changeset
    84
    m.u.newjob.wait_enqueuing = command_line.wait_enqueuing;
315
2b3ed8fdfb12 Implementing the num_slots for newjob in the messages, but the server still does
viric <viriketo@gmail.com>
parents: 295
diff changeset
    85
    m.u.newjob.num_slots = command_line.num_slots;
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    86
18
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 11
diff changeset
    87
    /* Send the message */
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 11
diff changeset
    88
    send_msg(server_socket, &m);
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 11
diff changeset
    89
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 11
diff changeset
    90
    /* Send the command */
68
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    91
    send_bytes(server_socket, new_command, m.u.newjob.command_size);
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    92
150
a615d7971bf6 Added -L (label)
viric@llimona
parents: 147
diff changeset
    93
    /* Send the label */
a615d7971bf6 Added -L (label)
viric@llimona
parents: 147
diff changeset
    94
    send_bytes(server_socket, command_line.label, m.u.newjob.label_size);
a615d7971bf6 Added -L (label)
viric@llimona
parents: 147
diff changeset
    95
147
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    96
    /* Send the environment */
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    97
    send_bytes(server_socket, myenv, m.u.newjob.env_size);
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
    98
68
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
    99
    free(new_command);
147
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   100
    free(myenv);
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   101
}
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   102
62
2b29d4666f6c Return the jobid in stdout.
viric@llimona
parents: 55
diff changeset
   103
int c_wait_newjob_ok()
2b29d4666f6c Return the jobid in stdout.
viric@llimona
parents: 55
diff changeset
   104
{
2b29d4666f6c Return the jobid in stdout.
viric@llimona
parents: 55
diff changeset
   105
    struct msg m;
2b29d4666f6c Return the jobid in stdout.
viric@llimona
parents: 55
diff changeset
   106
    int res;
2b29d4666f6c Return the jobid in stdout.
viric@llimona
parents: 55
diff changeset
   107
2b29d4666f6c Return the jobid in stdout.
viric@llimona
parents: 55
diff changeset
   108
    res = recv_msg(server_socket, &m);
2b29d4666f6c Return the jobid in stdout.
viric@llimona
parents: 55
diff changeset
   109
    if(res == -1)
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   110
        error("Error in wait_newjob_ok");
295
a63f43a17fd7 Adding the option '-B' for Mark, that will make ts quit if it cannot enqueue a
viric <viriketo@gmail.com>
parents: 282
diff changeset
   111
    if(m.type == NEWJOB_NOK)
a63f43a17fd7 Adding the option '-B' for Mark, that will make ts quit if it cannot enqueue a
viric <viriketo@gmail.com>
parents: 282
diff changeset
   112
    {
a63f43a17fd7 Adding the option '-B' for Mark, that will make ts quit if it cannot enqueue a
viric <viriketo@gmail.com>
parents: 282
diff changeset
   113
        fprintf(stderr, "Error, queue full\n");
a63f43a17fd7 Adding the option '-B' for Mark, that will make ts quit if it cannot enqueue a
viric <viriketo@gmail.com>
parents: 282
diff changeset
   114
        exit(EXITCODE_QUEUE_FULL);
a63f43a17fd7 Adding the option '-B' for Mark, that will make ts quit if it cannot enqueue a
viric <viriketo@gmail.com>
parents: 282
diff changeset
   115
    }
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   116
    if(m.type != NEWJOB_OK)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   117
        error("Error getting the newjob_ok");
62
2b29d4666f6c Return the jobid in stdout.
viric@llimona
parents: 55
diff changeset
   118
2b29d4666f6c Return the jobid in stdout.
viric@llimona
parents: 55
diff changeset
   119
    return m.u.jobid;
2b29d4666f6c Return the jobid in stdout.
viric@llimona
parents: 55
diff changeset
   120
}
2b29d4666f6c Return the jobid in stdout.
viric@llimona
parents: 55
diff changeset
   121
68
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 63
diff changeset
   122
int c_wait_server_commands()
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   123
{
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   124
    struct msg m;
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   125
    int res;
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   126
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   127
    while (1)
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   128
    {
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   129
        res = recv_msg(server_socket, &m);
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   130
        if(res == -1)
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   131
            error("Error in wait_server_commands");
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   132
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   133
        if (res == 0)
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   134
            break;
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   135
        if(res != sizeof(m))
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   136
            error("Error in wait_server_commands");
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   137
        if (m.type == RUNJOB)
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
   138
        {
110
2726c92a5cb3 Half-code for 'times'
viric@mandarina
parents: 92
diff changeset
   139
            struct Result res;
156
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   140
            res.skipped = 0;
155
55515f9eac77 Added 'depend' -d
viric@vicerveza
parents: 153
diff changeset
   141
            /* These will send RUNJOB_OK */
259
ba3827aa8f25 Adding -D. Forward to 0.6.3.
viric@mandarina
parents: 253
diff changeset
   142
            if (command_line.do_depend && m.u.last_errorlevel != 0)
156
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   143
            {
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   144
                res.errorlevel = -1;
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   145
                res.user_ms = 0.;
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   146
                res.system_ms = 0.;
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   147
                res.real_ms = 0.;
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   148
                res.skipped = 1;
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   149
                c_send_runjob_ok(0, -1);
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   150
            }
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   151
            else
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   152
                run_job(&res);
110
2726c92a5cb3 Half-code for 'times'
viric@mandarina
parents: 92
diff changeset
   153
            c_end_of_job(&res);
2726c92a5cb3 Half-code for 'times'
viric@mandarina
parents: 92
diff changeset
   154
            return res.errorlevel;
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
   155
        }
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
   156
    }
38
768d009604b3 The program returns the errorlevel of the job, if it doesn't go to background.
viric@llimona
parents: 35
diff changeset
   157
    return -1;
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
   158
}
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
   159
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
   160
void c_wait_server_lines()
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
   161
{
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
   162
    struct msg m;
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
   163
    int res;
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
   164
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
   165
    while (1)
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
   166
    {
21
a797f96a022f Lines for list doesn't have limit.
viric@llimona
parents: 20
diff changeset
   167
        res = recv_msg(server_socket, &m);
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
   168
        if(res == -1)
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   169
            error("Error in wait_server_lines");
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
   170
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
   171
        if (res == 0)
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
   172
            break;
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   173
        if(res != sizeof(m))
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   174
            error("Error in wait_server_lines 2");
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
   175
        if (m.type == LIST_LINE)
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
   176
        {
21
a797f96a022f Lines for list doesn't have limit.
viric@llimona
parents: 20
diff changeset
   177
            char * buffer;
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   178
            buffer = (char *) malloc(m.u.size);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   179
            recv_bytes(server_socket, buffer, m.u.size);
21
a797f96a022f Lines for list doesn't have limit.
viric@llimona
parents: 20
diff changeset
   180
            printf("%s", buffer);
a797f96a022f Lines for list doesn't have limit.
viric@llimona
parents: 20
diff changeset
   181
            free(buffer);
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
   182
        }
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   183
    }
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   184
}
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   185
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   186
void c_list_jobs()
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   187
{
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   188
    struct msg m;
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   189
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   190
    m.type = LIST;
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   191
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   192
    send_msg(server_socket, &m);
260
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   193
}
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   194
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   195
/* Exits if wrong */
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   196
void c_check_version()
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   197
{
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   198
    struct msg m;
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   199
    int res;
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   200
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   201
    m.type = GET_VERSION;
282
835551fcecb7 Improving the detection of ts version, without timeout. This way TS_MAXCONN helps.
viric@mandarina
parents: 276
diff changeset
   202
    /* Double send, so an old ts will answer for sure at least once */
835551fcecb7 Improving the detection of ts version, without timeout. This way TS_MAXCONN helps.
viric@mandarina
parents: 276
diff changeset
   203
    send_msg(server_socket, &m);
260
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   204
    send_msg(server_socket, &m);
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   205
265
8c16cd53f772 Making the check_version coep well with old ts servers.
viric@mandarina
parents: 260
diff changeset
   206
    /* Set up a 2 second timeout to receive the
8c16cd53f772 Making the check_version coep well with old ts servers.
viric@mandarina
parents: 260
diff changeset
   207
    version msg. */
8c16cd53f772 Making the check_version coep well with old ts servers.
viric@mandarina
parents: 260
diff changeset
   208
260
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   209
    res = recv_msg(server_socket, &m);
329
b01bb36b4290 Fixing some code based on gcc warnings.
viric <viriketo@gmail.com>
parents: 315
diff changeset
   210
    if(res == -1)
b01bb36b4290 Fixing some code based on gcc warnings.
viric <viriketo@gmail.com>
parents: 315
diff changeset
   211
        error("Error calling recv_msg in c_check_version");
260
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   212
    if (m.type != VERSION || m.u.version != PROTOCOL_VERSION)
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   213
    {
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   214
        printf("Wrong server version. Received %i, expecting %i\n",
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   215
            m.u.version, PROTOCOL_VERSION);
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   216
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   217
        error("Wrong server version. Received %i, expecting %i",
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   218
            m.u.version, PROTOCOL_VERSION);
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   219
    }
282
835551fcecb7 Improving the detection of ts version, without timeout. This way TS_MAXCONN helps.
viric@mandarina
parents: 276
diff changeset
   220
835551fcecb7 Improving the detection of ts version, without timeout. This way TS_MAXCONN helps.
viric@mandarina
parents: 276
diff changeset
   221
    /* Receive also the 2nd send_msg if we got the right version */
835551fcecb7 Improving the detection of ts version, without timeout. This way TS_MAXCONN helps.
viric@mandarina
parents: 276
diff changeset
   222
    res = recv_msg(server_socket, &m);
329
b01bb36b4290 Fixing some code based on gcc warnings.
viric <viriketo@gmail.com>
parents: 315
diff changeset
   223
    if(res == -1)
b01bb36b4290 Fixing some code based on gcc warnings.
viric <viriketo@gmail.com>
parents: 315
diff changeset
   224
        error("Error calling the 2nd recv_msg in c_check_version");
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   225
}
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   226
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   227
void c_show_info()
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   228
{
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   229
    struct msg m;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   230
    int res;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   231
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   232
    m.type = INFO;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   233
    m.u.jobid = command_line.jobid;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   234
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   235
    send_msg(server_socket, &m);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   236
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   237
    while (1)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   238
    {
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   239
        res = recv_msg(server_socket, &m);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   240
        if(res == -1)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   241
            error("Error in wait_server_lines");
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   242
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   243
        if (res == 0)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   244
            break;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   245
        if(res != sizeof(m))
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   246
            error("Error in wait_server_lines 2");
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   247
        if (m.type == INFO_DATA)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   248
        {
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   249
            char * buffer;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   250
            enum { DSIZE = 1000 };
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   251
147
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   252
            /* We're going to output data using the stdout fd */
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   253
            fflush(stdout);
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   254
            buffer = (char *) malloc(DSIZE);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   255
            do
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   256
            {
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   257
                res = recv(server_socket, buffer, DSIZE, 0);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   258
                if (res > 0)
147
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   259
                    write(1, buffer, res);
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   260
            } while(res > 0);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   261
            free(buffer);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   262
        }
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   263
    }
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   264
}
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   265
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   266
void c_send_runjob_ok(const char *ofname, int pid)
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   267
{
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   268
    struct msg m;
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   269
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   270
    /* Prepare the message */
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   271
    m.type = RUNJOB_OK;
155
55515f9eac77 Added 'depend' -d
viric@vicerveza
parents: 153
diff changeset
   272
    if (ofname) /* ofname == 0, skipped execution */
55515f9eac77 Added 'depend' -d
viric@vicerveza
parents: 153
diff changeset
   273
	m.u.output.store_output = command_line.store_output;
55515f9eac77 Added 'depend' -d
viric@vicerveza
parents: 153
diff changeset
   274
    else
55515f9eac77 Added 'depend' -d
viric@vicerveza
parents: 153
diff changeset
   275
	m.u.output.store_output = 0;
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   276
    m.u.output.pid = pid;
155
55515f9eac77 Added 'depend' -d
viric@vicerveza
parents: 153
diff changeset
   277
    if (m.u.output.store_output)
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   278
        m.u.output.ofilename_size = strlen(ofname) + 1;
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   279
    else
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   280
        m.u.output.ofilename_size = 0;
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   281
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   282
    send_msg(server_socket, &m);
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   283
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   284
    /* Send the filename */
30
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 27
diff changeset
   285
    if (command_line.store_output)
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   286
        send_bytes(server_socket, ofname, m.u.output.ofilename_size);
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   287
}
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   288
110
2726c92a5cb3 Half-code for 'times'
viric@mandarina
parents: 92
diff changeset
   289
static void c_end_of_job(const struct Result *res)
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   290
{
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   291
    struct msg m;
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   292
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   293
    m.type = ENDJOB;
110
2726c92a5cb3 Half-code for 'times'
viric@mandarina
parents: 92
diff changeset
   294
    m.u.result = *res; /* struct copy */
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   295
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   296
    send_msg(server_socket, &m);
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   297
}
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   298
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   299
void c_shutdown_server()
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
   300
{
2
602bd67df3aa Changed tabs to 4 spaces. Rule.
viric@llimona
parents: 1
diff changeset
   301
    struct msg m;
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
   302
31
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   303
    m.type = KILL_SERVER;
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   304
    send_msg(server_socket, &m);
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
   305
}
20
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   306
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   307
void c_clear_finished()
20
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   308
{
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   309
    struct msg m;
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   310
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   311
    m.type = CLEAR_FINISHED;
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   312
    send_msg(server_socket, &m);
20
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   313
}
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   314
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   315
static char * get_output_file(int *pid)
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   316
{
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   317
    struct msg m;
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   318
    int res;
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   319
    char *string = 0;
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   320
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   321
    /* Send the request */
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   322
    m.type = ASK_OUTPUT;
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   323
    m.u.jobid = command_line.jobid;
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   324
    send_msg(server_socket, &m);
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   325
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   326
    /* Receive the answer */
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   327
    res = recv_msg(server_socket, &m);
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   328
    if(res != sizeof(m))
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   329
        error("Error in get_output_file");
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   330
    switch(m.type)
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   331
    {
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   332
    case ANSWER_OUTPUT:
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   333
        if (m.u.output.store_output)
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   334
        {
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   335
            /* Receive the output file name */
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   336
            string = 0;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   337
            if (m.u.output.ofilename_size > 0)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   338
            {
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   339
                string = (char *) malloc(m.u.output.ofilename_size);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   340
                recv_bytes(server_socket, string, m.u.output.ofilename_size);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   341
            }
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   342
            *pid = m.u.output.pid;
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   343
            return string;
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   344
        }
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   345
        *pid = m.u.output.pid;
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   346
        return 0;
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   347
        /* WILL NOT GO FURTHER */
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   348
    case LIST_LINE: /* Only ONE line accepted */
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   349
        string = (char *) malloc(m.u.size);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   350
        res = recv_bytes(server_socket, string, m.u.size);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   351
        if(res != m.u.size)
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   352
            error("Error in get_output_file line size");
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   353
        fprintf(stderr, "Error in the request: %s", 
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   354
                string);
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   355
        exit(-1);
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   356
        /* WILL NOT GO FURTHER */
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   357
    default:
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   358
        warning("Wrong internal message in get_output_file line size");
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   359
    }
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   360
    /* This will never be reached */
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   361
    return 0;
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   362
}
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   363
174
c112f67965fb Our implementation of -t (equivalent tail -f), which now
viric@llimona
parents: 156
diff changeset
   364
int c_tail()
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   365
{
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   366
    char *str;
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   367
    int pid;
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   368
    str = get_output_file(&pid);
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   369
    if (str == 0)
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   370
    {
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   371
        fprintf(stderr, "The output is not stored. Cannot tail.\n");
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   372
        exit(-1);
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   373
    }
174
c112f67965fb Our implementation of -t (equivalent tail -f), which now
viric@llimona
parents: 156
diff changeset
   374
226
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
   375
    c_wait_running_job_send();
174
c112f67965fb Our implementation of -t (equivalent tail -f), which now
viric@llimona
parents: 156
diff changeset
   376
203
664044b1de73 Making '-c' to behave as 'tail -f', but showing *all* the file.
lbatlle@npdl268.bpo.hp.com
parents: 180
diff changeset
   377
    return tail_file(str, 10 /* Last lines to show */);
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   378
}
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   379
203
664044b1de73 Making '-c' to behave as 'tail -f', but showing *all* the file.
lbatlle@npdl268.bpo.hp.com
parents: 180
diff changeset
   380
int c_cat()
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   381
{
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   382
    char *str;
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   383
    int pid;
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   384
    str = get_output_file(&pid);
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   385
    if (str == 0)
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   386
    {
153
3cc22be1ab95 Fixed a bug with -n and -p.
viric@llimona
parents: 150
diff changeset
   387
        fprintf(stderr, "The output is not stored. Cannot cat.\n");
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   388
        exit(-1);
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   389
    }
226
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
   390
    c_wait_running_job_send();
203
664044b1de73 Making '-c' to behave as 'tail -f', but showing *all* the file.
lbatlle@npdl268.bpo.hp.com
parents: 180
diff changeset
   391
664044b1de73 Making '-c' to behave as 'tail -f', but showing *all* the file.
lbatlle@npdl268.bpo.hp.com
parents: 180
diff changeset
   392
    return tail_file(str, -1 /* All the lines */);
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   393
}
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   394
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   395
void c_show_output_file()
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   396
{
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   397
    char *str;
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   398
    int pid;
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   399
    /* This will exit if there is any error */
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   400
    str = get_output_file(&pid);
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   401
    if (str == 0)
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   402
    {
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   403
        fprintf(stderr, "The output is not stored.\n");
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   404
        exit(-1);
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   405
    }
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   406
    printf("%s\n", str);
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   407
    free(str);
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   408
}
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   409
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   410
void c_show_pid()
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   411
{
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   412
    int pid;
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   413
    /* This will exit if there is any error */
329
b01bb36b4290 Fixing some code based on gcc warnings.
viric <viriketo@gmail.com>
parents: 315
diff changeset
   414
    get_output_file(&pid);
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   415
    printf("%i\n", pid);
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   416
}
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   417
340
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 329
diff changeset
   418
void c_kill_job()
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 329
diff changeset
   419
{
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 329
diff changeset
   420
    int pid = 0;
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 329
diff changeset
   421
    /* This will exit if there is any error */
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 329
diff changeset
   422
    get_output_file(&pid);
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 329
diff changeset
   423
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 329
diff changeset
   424
    if (pid == -1 || pid == 0)
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 329
diff changeset
   425
    {
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 329
diff changeset
   426
        fprintf(stderr, "Error: strange PID received: %i\n", pid);
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 329
diff changeset
   427
        exit(-1);
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 329
diff changeset
   428
    }
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 329
diff changeset
   429
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 329
diff changeset
   430
    /* Send SIGTERM to the process group, as pid is for process group */
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 329
diff changeset
   431
    kill(-pid, SIGTERM);
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 329
diff changeset
   432
}
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 329
diff changeset
   433
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   434
void c_remove_job()
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   435
{
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   436
    struct msg m;
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   437
    int res;
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   438
    char *string = 0;
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   439
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   440
    /* Send the request */
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   441
    m.type = REMOVEJOB;
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   442
    m.u.jobid = command_line.jobid;
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   443
    send_msg(server_socket, &m);
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   444
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   445
    /* Receive the answer */
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   446
    res = recv_msg(server_socket, &m);
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   447
    if(res != sizeof(m))
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   448
        error("Error in remove_job");
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   449
    switch(m.type)
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   450
    {
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   451
    case REMOVEJOB_OK:
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   452
        return;
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   453
        /* WILL NOT GO FURTHER */
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   454
    case LIST_LINE: /* Only ONE line accepted */
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   455
        string = (char *) malloc(m.u.size);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   456
        res = recv_bytes(server_socket, string, m.u.size);
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   457
        fprintf(stderr, "Error in the request: %s", 
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   458
                string);
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   459
        exit(-1);
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   460
        /* WILL NOT GO FURTHER */
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   461
    default:
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   462
        warning("Wrong internal message in remove_job");
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   463
    }
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   464
    /* This will never be reached */
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   465
}
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   466
174
c112f67965fb Our implementation of -t (equivalent tail -f), which now
viric@llimona
parents: 156
diff changeset
   467
int c_wait_job_recv()
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   468
{
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   469
    struct msg m;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   470
    int res;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   471
    char *string = 0;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   472
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   473
    /* Receive the answer */
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   474
    res = recv_msg(server_socket, &m);
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   475
    if(res != sizeof(m))
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   476
        error("Error in wait_job");
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   477
    switch(m.type)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   478
    {
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   479
    case WAITJOB_OK:
110
2726c92a5cb3 Half-code for 'times'
viric@mandarina
parents: 92
diff changeset
   480
        return m.u.result.errorlevel;
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   481
        /* WILL NOT GO FURTHER */
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   482
    case LIST_LINE: /* Only ONE line accepted */
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   483
        string = (char *) malloc(m.u.size);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   484
        res = recv_bytes(server_socket, string, m.u.size);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   485
        if(res != m.u.size)
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   486
            error("Error in wait_job - line size");
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   487
        fprintf(stderr, "Error in the request: %s", 
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   488
                string);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   489
        exit(-1);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   490
        /* WILL NOT GO FURTHER */
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   491
    default:
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   492
        warning("Wrong internal message in c_wait_job");
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   493
    }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   494
    /* This will never be reached */
51
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   495
    return -1;
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   496
}
53
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   497
226
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
   498
static void c_wait_job_send()
174
c112f67965fb Our implementation of -t (equivalent tail -f), which now
viric@llimona
parents: 156
diff changeset
   499
{
c112f67965fb Our implementation of -t (equivalent tail -f), which now
viric@llimona
parents: 156
diff changeset
   500
    struct msg m;
c112f67965fb Our implementation of -t (equivalent tail -f), which now
viric@llimona
parents: 156
diff changeset
   501
c112f67965fb Our implementation of -t (equivalent tail -f), which now
viric@llimona
parents: 156
diff changeset
   502
    /* Send the request */
c112f67965fb Our implementation of -t (equivalent tail -f), which now
viric@llimona
parents: 156
diff changeset
   503
    m.type = WAITJOB;
c112f67965fb Our implementation of -t (equivalent tail -f), which now
viric@llimona
parents: 156
diff changeset
   504
    m.u.jobid = command_line.jobid;
c112f67965fb Our implementation of -t (equivalent tail -f), which now
viric@llimona
parents: 156
diff changeset
   505
    send_msg(server_socket, &m);
c112f67965fb Our implementation of -t (equivalent tail -f), which now
viric@llimona
parents: 156
diff changeset
   506
}
c112f67965fb Our implementation of -t (equivalent tail -f), which now
viric@llimona
parents: 156
diff changeset
   507
226
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
   508
static void c_wait_running_job_send()
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
   509
{
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
   510
    struct msg m;
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
   511
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
   512
    /* Send the request */
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
   513
    m.type = WAIT_RUNNING_JOB;
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
   514
    m.u.jobid = command_line.jobid;
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
   515
    send_msg(server_socket, &m);
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
   516
}
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
   517
174
c112f67965fb Our implementation of -t (equivalent tail -f), which now
viric@llimona
parents: 156
diff changeset
   518
/* Returns the errorlevel */
c112f67965fb Our implementation of -t (equivalent tail -f), which now
viric@llimona
parents: 156
diff changeset
   519
int c_wait_job()
c112f67965fb Our implementation of -t (equivalent tail -f), which now
viric@llimona
parents: 156
diff changeset
   520
{
c112f67965fb Our implementation of -t (equivalent tail -f), which now
viric@llimona
parents: 156
diff changeset
   521
    c_wait_job_send();
c112f67965fb Our implementation of -t (equivalent tail -f), which now
viric@llimona
parents: 156
diff changeset
   522
    return c_wait_job_recv();
c112f67965fb Our implementation of -t (equivalent tail -f), which now
viric@llimona
parents: 156
diff changeset
   523
}
c112f67965fb Our implementation of -t (equivalent tail -f), which now
viric@llimona
parents: 156
diff changeset
   524
226
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
   525
/* Returns the errorlevel */
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
   526
int c_wait_running_job()
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
   527
{
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
   528
    c_wait_running_job_send();
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
   529
    return c_wait_job_recv();
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
   530
}
472ab90fd6a1 Bugfix: some "-t" and "-c" were not notified at end of job.
viric@mandarina
parents: 219
diff changeset
   531
219
c24a1f5c1715 Adding hot-switchable amount of max_slots.
viric@mandarina
parents: 203
diff changeset
   532
void c_send_max_slots(int max_slots)
c24a1f5c1715 Adding hot-switchable amount of max_slots.
viric@mandarina
parents: 203
diff changeset
   533
{
c24a1f5c1715 Adding hot-switchable amount of max_slots.
viric@mandarina
parents: 203
diff changeset
   534
    struct msg m;
c24a1f5c1715 Adding hot-switchable amount of max_slots.
viric@mandarina
parents: 203
diff changeset
   535
c24a1f5c1715 Adding hot-switchable amount of max_slots.
viric@mandarina
parents: 203
diff changeset
   536
    /* Send the request */
c24a1f5c1715 Adding hot-switchable amount of max_slots.
viric@mandarina
parents: 203
diff changeset
   537
    m.type = SET_MAX_SLOTS;
c24a1f5c1715 Adding hot-switchable amount of max_slots.
viric@mandarina
parents: 203
diff changeset
   538
    m.u.max_slots = command_line.max_slots;
c24a1f5c1715 Adding hot-switchable amount of max_slots.
viric@mandarina
parents: 203
diff changeset
   539
    send_msg(server_socket, &m);
c24a1f5c1715 Adding hot-switchable amount of max_slots.
viric@mandarina
parents: 203
diff changeset
   540
}
c24a1f5c1715 Adding hot-switchable amount of max_slots.
viric@mandarina
parents: 203
diff changeset
   541
253
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   542
void c_get_max_slots()
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   543
{
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   544
    struct msg m;
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   545
    int res;
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   546
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   547
    /* Send the request */
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   548
    m.type = GET_MAX_SLOTS;
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   549
    m.u.max_slots = command_line.max_slots;
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   550
    send_msg(server_socket, &m);
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   551
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   552
    /* Receive the answer */
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   553
    res = recv_msg(server_socket, &m);
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   554
    if(res != sizeof(m))
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   555
        error("Error in move_urgent");
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   556
    switch(m.type)
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   557
    {
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   558
        case GET_MAX_SLOTS_OK:
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   559
            printf("%i\n", m.u.max_slots);
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   560
            return;
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   561
        default:
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   562
            warning("Wrong internal message in get_max_slots");
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   563
    }
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   564
}
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 231
diff changeset
   565
53
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   566
void c_move_urgent()
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   567
{
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   568
    struct msg m;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   569
    int res;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   570
    char *string = 0;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   571
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   572
    /* Send the request */
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   573
    m.type = URGENT;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   574
    m.u.jobid = command_line.jobid;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   575
    send_msg(server_socket, &m);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   576
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   577
    /* Receive the answer */
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   578
    res = recv_msg(server_socket, &m);
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   579
    if(res != sizeof(m))
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   580
        error("Error in move_urgent");
53
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   581
    switch(m.type)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   582
    {
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   583
    case URGENT_OK:
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   584
        return;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   585
        /* WILL NOT GO FURTHER */
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   586
    case LIST_LINE: /* Only ONE line accepted */
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   587
        string = (char *) malloc(m.u.size);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   588
        res = recv_bytes(server_socket, string, m.u.size);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   589
        if(res != m.u.size)
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   590
            error("Error in move_urgent - line size");
53
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   591
        fprintf(stderr, "Error in the request: %s", 
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   592
                string);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   593
        exit(-1);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   594
        /* WILL NOT GO FURTHER */
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   595
    default:
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   596
        warning("Wrong internal message in move_urgent");
53
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   597
    }
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   598
    /* This will never be reached */
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   599
    return;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   600
}
63
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   601
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   602
void c_get_state()
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   603
{
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   604
    struct msg m;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   605
    int res;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   606
    char *string = 0;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   607
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   608
    /* Send the request */
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   609
    m.type = GET_STATE;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   610
    m.u.jobid = command_line.jobid;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   611
    send_msg(server_socket, &m);
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   612
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   613
    /* Receive the answer */
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   614
    res = recv_msg(server_socket, &m);
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   615
    if(res != sizeof(m))
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   616
        error("Error in get_state - line size");
63
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   617
    switch(m.type)
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   618
    {
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   619
    case ANSWER_STATE:
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   620
        printf("%s\n", jstate2string(m.u.state));
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   621
        return;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   622
        /* WILL NOT GO FURTHER */
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   623
    case LIST_LINE: /* Only ONE line accepted */
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   624
        string = (char *) malloc(m.u.size);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   625
        res = recv_bytes(server_socket, string, m.u.size);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   626
        if(res != m.u.size)
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   627
            error("Error in get_state - line size");
63
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   628
        fprintf(stderr, "Error in the request: %s", 
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   629
                string);
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   630
        exit(-1);
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   631
        /* WILL NOT GO FURTHER */
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   632
    default:
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   633
        warning("Wrong internal message in get_state");
63
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   634
    }
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   635
    /* This will never be reached */
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   636
    return;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   637
}
66
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   638
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   639
void c_swap_jobs()
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   640
{
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   641
    struct msg m;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   642
    int res;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   643
    char *string = 0;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   644
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   645
    /* Send the request */
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   646
    m.type = SWAP_JOBS;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   647
    m.u.swap.jobid1 = command_line.jobid;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   648
    m.u.swap.jobid2 = command_line.jobid2;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   649
    send_msg(server_socket, &m);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   650
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   651
    /* Receive the answer */
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   652
    res = recv_msg(server_socket, &m);
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   653
    if(res != sizeof(m))
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   654
        error("Error in swap_jobs");
66
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   655
    switch(m.type)
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   656
    {
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   657
    case SWAP_JOBS_OK:
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   658
        return;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   659
        /* WILL NOT GO FURTHER */
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   660
    case LIST_LINE: /* Only ONE line accepted */
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   661
        string = (char *) malloc(m.u.size);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   662
        res = recv_bytes(server_socket, string, m.u.size);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 117
diff changeset
   663
        if(res != m.u.size)
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   664
            error("Error in swap_jobs - line size");
66
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   665
        fprintf(stderr, "Error in the request: %s", 
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   666
                string);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   667
        exit(-1);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   668
        /* WILL NOT GO FURTHER */
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   669
    default:
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 71
diff changeset
   670
        warning("Wrong internal message in swap_jobs");
66
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   671
    }
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   672
    /* This will never be reached */
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   673
    return;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 63
diff changeset
   674
}