client.c
author viric@llimona
Tue, 27 Mar 2007 23:29:56 +0200
changeset 58 3c492266923e
parent 55 678ca291d545
child 62 2b29d4666f6c
permissions -rw-r--r--
Preparing v0.2.3
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
09bb8a5583e9 Added the license.
lbatlle@npdl268.bpo.hp.com
parents: 44
diff changeset
     3
    Copyright (C) 2007  LluĂ­s Batlle i Rossell
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
*/
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
     7
#include <assert.h>
9
9acd8ae3190c First usable version!
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
     8
#include <stdio.h>
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
     9
#include <string.h>
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>
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
    13
#include "msg.h"
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    14
#include "main.h"
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
    15
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
    16
static void c_end_of_job(int errorlevel);
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
    17
30
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 27
diff changeset
    18
void c_new_job(const char *command)
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    19
{
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    20
    struct msg m;
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    21
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    22
    m.type = NEWJOB;
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    23
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
    24
    /* global */
18
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 11
diff changeset
    25
    m.u.newjob.command_size = strlen(command) + 1; /* add null */
30
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 27
diff changeset
    26
    m.u.newjob.store_output = command_line.store_output;
55
678ca291d545 Now the '-nf' doesn't leave a job in 'finished' state.
viric@llimona
parents: 53
diff changeset
    27
    m.u.newjob.should_keep_finished = command_line.should_keep_finished;
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    28
18
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 11
diff changeset
    29
    /* Send the message */
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 11
diff changeset
    30
    send_msg(server_socket, &m);
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 11
diff changeset
    31
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 11
diff changeset
    32
    /* Send the command */
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 11
diff changeset
    33
    send_bytes(server_socket, command, m.u.newjob.command_size);
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    34
}
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    35
38
768d009604b3 The program returns the errorlevel of the job, if it doesn't go to background.
viric@llimona
parents: 35
diff changeset
    36
int c_wait_server_commands(const char *my_command)
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    37
{
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    38
    struct msg m;
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    39
    int res;
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    40
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    41
    while (1)
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    42
    {
9
9acd8ae3190c First usable version!
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
    43
        res = recv(server_socket, &m, sizeof(m), 0);
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    44
        if(res == -1)
9
9acd8ae3190c First usable version!
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
    45
        {
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    46
            perror("read");
9
9acd8ae3190c First usable version!
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
    47
            exit(-1);
9acd8ae3190c First usable version!
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
    48
        }
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    49
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    50
        if (res == 0)
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    51
            break;
9
9acd8ae3190c First usable version!
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
    52
        if (res != sizeof(m))
9acd8ae3190c First usable version!
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
    53
        {
9acd8ae3190c First usable version!
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
    54
            fprintf(stderr, "c: recv() message size wrong: %i instead of %i\n",
9acd8ae3190c First usable version!
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
    55
                res, (int) sizeof(m));
9acd8ae3190c First usable version!
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
    56
        }
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    57
        assert(res == sizeof(m));
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    58
        if (m.type == NEWJOB_OK)
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    59
            ;
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
    60
        if (m.type == RUNJOB)
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
    61
        {
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
    62
            int errorlevel;
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    63
            /* This will send RUNJOB_OK */
30
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 27
diff changeset
    64
            errorlevel = run_job(my_command);
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
    65
            c_end_of_job(errorlevel);
38
768d009604b3 The program returns the errorlevel of the job, if it doesn't go to background.
viric@llimona
parents: 35
diff changeset
    66
            return errorlevel;
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
    67
        }
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
    68
    }
38
768d009604b3 The program returns the errorlevel of the job, if it doesn't go to background.
viric@llimona
parents: 35
diff changeset
    69
    return -1;
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
    70
}
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
    71
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
    72
void c_wait_server_lines()
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
    73
{
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
    74
    struct msg m;
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
    75
    int res;
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
    76
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
    77
    while (1)
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
    78
    {
21
a797f96a022f Lines for list doesn't have limit.
viric@llimona
parents: 20
diff changeset
    79
        res = recv_msg(server_socket, &m);
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
    80
        if(res == -1)
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    81
        {
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
    82
            perror("read");
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    83
            exit(-1);
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    84
        }
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
    85
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
    86
        if (res == 0)
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
    87
            break;
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
    88
        assert(res == sizeof(m));
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
    89
        if (m.type == LIST_LINE)
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
    90
        {
21
a797f96a022f Lines for list doesn't have limit.
viric@llimona
parents: 20
diff changeset
    91
            char * buffer;
a797f96a022f Lines for list doesn't have limit.
viric@llimona
parents: 20
diff changeset
    92
            buffer = (char *) malloc(m.u.line_size);
a797f96a022f Lines for list doesn't have limit.
viric@llimona
parents: 20
diff changeset
    93
            recv_bytes(server_socket, buffer, m.u.line_size);
a797f96a022f Lines for list doesn't have limit.
viric@llimona
parents: 20
diff changeset
    94
            printf("%s", buffer);
a797f96a022f Lines for list doesn't have limit.
viric@llimona
parents: 20
diff changeset
    95
            free(buffer);
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 4
diff changeset
    96
        }
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    97
    }
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    98
}
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    99
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   100
void c_list_jobs()
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   101
{
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   102
    struct msg m;
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   103
    int res;
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   104
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   105
    m.type = LIST;
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   106
9
9acd8ae3190c First usable version!
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   107
    res = send(server_socket, &m, sizeof(m), 0);
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   108
    if(res == -1)
9
9acd8ae3190c First usable version!
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   109
        perror("send");
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   110
}
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   111
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   112
void c_send_runjob_ok(const char *ofname, int pid)
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   113
{
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   114
    struct msg m;
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   115
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   116
    /* Prepare the message */
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   117
    m.type = RUNJOB_OK;
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   118
    m.u.output.store_output = command_line.store_output;
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   119
    m.u.output.pid = pid;
30
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 27
diff changeset
   120
    if (command_line.store_output)
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   121
        m.u.output.ofilename_size = strlen(ofname) + 1;
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   122
    else
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   123
        m.u.output.ofilename_size = 0;
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   124
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   125
    send_msg(server_socket, &m);
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   126
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   127
    /* Send the filename */
30
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 27
diff changeset
   128
    if (command_line.store_output)
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   129
        send_bytes(server_socket, ofname, m.u.output.ofilename_size);
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   130
}
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   131
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   132
static void c_end_of_job(int errorlevel)
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   133
{
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   134
    struct msg m;
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   135
    int res;
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   136
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   137
    m.type = ENDJOB;
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   138
    m.u.errorlevel = errorlevel;
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   139
9
9acd8ae3190c First usable version!
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   140
    res = send(server_socket, &m, sizeof(m),0);
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   141
    if(res == -1)
9
9acd8ae3190c First usable version!
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   142
        perror("send");
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   143
}
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   144
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   145
void c_shutdown_server()
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
   146
{
2
602bd67df3aa Changed tabs to 4 spaces. Rule.
viric@llimona
parents: 1
diff changeset
   147
    struct msg m;
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
   148
31
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   149
    m.type = KILL_SERVER;
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   150
    send_msg(server_socket, &m);
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
   151
}
20
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   152
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   153
void c_clear_finished()
20
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   154
{
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   155
    struct msg m;
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   156
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   157
    m.type = CLEAR_FINISHED;
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   158
    send_msg(server_socket, &m);
20
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   159
}
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   160
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   161
static char * get_output_file(int *pid)
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   162
{
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   163
    struct msg m;
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   164
    int res;
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   165
    char *string = 0;
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   166
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   167
    /* Send the request */
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   168
    m.type = ASK_OUTPUT;
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   169
    m.u.jobid = command_line.jobid;
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   170
    send_msg(server_socket, &m);
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   171
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   172
    /* Receive the answer */
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   173
    res = recv_msg(server_socket, &m);
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   174
    assert(res == sizeof(m));
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   175
    switch(m.type)
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   176
    {
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   177
    case ANSWER_OUTPUT:
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   178
        if (m.u.output.store_output)
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   179
        {
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   180
            /* Receive the output file name */
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   181
            string = (char *) malloc(m.u.output.ofilename_size);
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   182
            recv_bytes(server_socket, string, m.u.output.ofilename_size);
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   183
            *pid = m.u.output.pid;
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   184
            return string;
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   185
        }
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   186
        *pid = m.u.output.pid;
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   187
        return 0;
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   188
        /* WILL NOT GO FURTHER */
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   189
    case LIST_LINE: /* Only ONE line accepted */
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   190
        string = (char *) malloc(m.u.line_size);
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   191
        res = recv_bytes(server_socket, string, m.u.line_size);
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   192
        assert(res == m.u.line_size);
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   193
        fprintf(stderr, "Error in the request: %s", 
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   194
                string);
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   195
        exit(-1);
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   196
        /* WILL NOT GO FURTHER */
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   197
    default:
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   198
        fprintf(stderr, "Wrong internal message\n");
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   199
        exit(-1);
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   200
    }
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   201
    /* This will never be reached */
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   202
    return 0;
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   203
}
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   204
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   205
void c_tail()
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   206
{
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   207
    char *str;
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   208
    int pid;
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   209
    str = get_output_file(&pid);
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   210
    if (str == 0)
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   211
    {
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   212
        fprintf(stderr, "The output is not stored. Cannot tail.\n");
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   213
        exit(-1);
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   214
    }
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   215
    c_run_tail(str);
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   216
}
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   217
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   218
void c_cat()
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   219
{
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   220
    char *str;
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   221
    int pid;
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   222
    str = get_output_file(&pid);
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   223
    if (str == 0)
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   224
    {
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   225
        fprintf(stderr, "The output is not stored. Cannot tail.\n");
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   226
        exit(-1);
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   227
    }
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   228
    c_run_cat(str);
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   229
}
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   230
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   231
void c_show_output_file()
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   232
{
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   233
    char *str;
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   234
    int pid;
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   235
    /* This will exit if there is any error */
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   236
    str = get_output_file(&pid);
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   237
    if (str == 0)
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   238
    {
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   239
        fprintf(stderr, "The output is not stored. Cannot tail.\n");
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   240
        exit(-1);
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   241
    }
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   242
    printf("%s\n", str);
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   243
    free(str);
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   244
}
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   245
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   246
void c_show_pid()
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   247
{
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   248
    char *str;
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   249
    int pid;
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   250
    /* This will exit if there is any error */
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   251
    str = get_output_file(&pid);
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   252
    printf("%i\n", pid);
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   253
}
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   254
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   255
void c_remove_job()
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   256
{
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   257
    struct msg m;
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   258
    int res;
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   259
    char *string = 0;
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   260
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   261
    /* Send the request */
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   262
    m.type = REMOVEJOB;
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   263
    m.u.jobid = command_line.jobid;
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   264
    send_msg(server_socket, &m);
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   265
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   266
    /* Receive the answer */
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   267
    res = recv_msg(server_socket, &m);
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   268
    assert(res == sizeof(m));
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   269
    switch(m.type)
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   270
    {
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   271
    case REMOVEJOB_OK:
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   272
        return;
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   273
        /* WILL NOT GO FURTHER */
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   274
    case LIST_LINE: /* Only ONE line accepted */
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   275
        string = (char *) malloc(m.u.line_size);
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   276
        res = recv_bytes(server_socket, string, m.u.line_size);
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   277
        assert(res == m.u.line_size);
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   278
        fprintf(stderr, "Error in the request: %s", 
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   279
                string);
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   280
        exit(-1);
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   281
        /* WILL NOT GO FURTHER */
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   282
    default:
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   283
        fprintf(stderr, "Wrong internal message\n");
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   284
        exit(-1);
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   285
    }
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   286
    /* This will never be reached */
cad41574feda Added 'remove job'.
viric@llimona
parents: 38
diff changeset
   287
}
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   288
51
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   289
/* Returns the errorlevel */
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   290
int c_wait_job()
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   291
{
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   292
    struct msg m;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   293
    int res;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   294
    char *string = 0;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   295
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   296
    /* Send the request */
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   297
    m.type = WAITJOB;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   298
    m.u.jobid = command_line.jobid;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   299
    send_msg(server_socket, &m);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   300
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   301
    /* Receive the answer */
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   302
    res = recv_msg(server_socket, &m);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   303
    assert(res == sizeof(m));
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   304
    switch(m.type)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   305
    {
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   306
    case WAITJOB_OK:
51
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   307
        return m.u.errorlevel;
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   308
        /* WILL NOT GO FURTHER */
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   309
    case LIST_LINE: /* Only ONE line accepted */
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   310
        string = (char *) malloc(m.u.line_size);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   311
        res = recv_bytes(server_socket, string, m.u.line_size);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   312
        assert(res == m.u.line_size);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   313
        fprintf(stderr, "Error in the request: %s", 
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   314
                string);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   315
        exit(-1);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   316
        /* WILL NOT GO FURTHER */
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   317
    default:
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   318
        fprintf(stderr, "Wrong internal message\n");
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   319
        exit(-1);
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   320
    }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   321
    /* This will never be reached */
51
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   322
    return -1;
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   323
}
53
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   324
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   325
void c_move_urgent()
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   326
{
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   327
    struct msg m;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   328
    int res;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   329
    char *string = 0;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   330
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   331
    /* Send the request */
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   332
    m.type = URGENT;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   333
    m.u.jobid = command_line.jobid;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   334
    send_msg(server_socket, &m);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   335
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   336
    /* Receive the answer */
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   337
    res = recv_msg(server_socket, &m);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   338
    assert(res == sizeof(m));
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   339
    switch(m.type)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   340
    {
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   341
    case URGENT_OK:
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   342
        return;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   343
        /* WILL NOT GO FURTHER */
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   344
    case LIST_LINE: /* Only ONE line accepted */
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   345
        string = (char *) malloc(m.u.line_size);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   346
        res = recv_bytes(server_socket, string, m.u.line_size);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   347
        assert(res == m.u.line_size);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   348
        fprintf(stderr, "Error in the request: %s", 
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   349
                string);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   350
        exit(-1);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   351
        /* WILL NOT GO FURTHER */
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   352
    default:
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   353
        fprintf(stderr, "Wrong internal message\n");
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   354
        exit(-1);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   355
    }
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   356
    /* This will never be reached */
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   357
    return;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   358
}