]> mj.ucw.cz Git - eval.git/blob - submit/submitd.h
Maximum submission size is now configurable per task.
[eval.git] / submit / submitd.h
1 /*
2  *  The Submit Daemon
3  *
4  *  (c) 2007 Martin Mares <mj@ucw.cz>
5  */
6
7 #ifndef _SUBMITD_H
8 #define _SUBMITD_H
9
10 #include "lib/clists.h"
11 #include "lib/ipaccess.h"
12 #include "lib/fastbuf.h"
13
14 #include <gnutls/gnutls.h>
15 #include <gnutls/x509.h>
16
17 struct access_rule {
18   cnode n;
19   struct ip_addrmask addrmask;
20   uns allow_admin;
21   uns plain_text;
22   uns max_conn;
23 };
24
25 struct conn {
26   // Set up by the master process
27   cnode n;
28   u32 ip;
29   byte *ip_string;                      // (xmalloced)
30   pid_t pid;
31   uns id;
32   struct access_rule *rule;             // Rule matched by this connection
33   int sk;                               // Client socket
34   byte *cert_name;                      // Client name from the certificate (NULL if no TLS) (xmalloced)
35
36   // Used by the child process
37   gnutls_session_t tls;                 // TLS session
38   struct fastbuf rx_fb, tx_fb;          // Fastbufs for communication with the client (either plain-text or TLS)
39   struct mempool *pool;
40   struct odes *request;
41   struct odes *reply;
42   struct odes *task_status;
43   int task_lock_fd;
44   byte *user;
45 };
46
47 extern uns max_request_size, max_attachment_size, trace_commands;
48
49 /* submitd.c */
50
51 void NONRET client_error(char *msg, ...);
52
53 /* commands.c */
54
55 int process_init(struct conn *c);
56 int process_command(struct conn *c);
57
58 /* tasks.c */
59
60 struct task {
61   cnode n;
62   byte *name;
63   uns open_data;        // Number of parts for open-data tasks
64   uns max_size;         // Maximum size (0=use global default)
65   clist parts;          // List of parts of this task (simp_nodes)
66   clist *extensions;    // List of allowed extensions for this task (simp_nodes)
67 };
68
69 extern clist task_list;
70 extern struct cf_section tasks_conf;
71
72 struct task *task_find(byte *name);
73 int part_exists_p(struct task *t, byte *name);
74 int user_exists_p(byte *user);
75 int ext_exists_p(struct task *t, byte *ext);
76
77 void task_lock_status(struct conn *c);
78 void task_unlock_status(struct conn *c, uns write_back);
79 void task_load_status(struct conn *c);
80
81 struct odes *task_status_find_task(struct conn *c, struct task *t, uns create);
82 struct odes *task_status_find_part(struct odes *t, byte *part, uns create);
83
84 void task_submit_part(byte *user, byte *task, byte *part, byte *ext, uns version, struct fastbuf *fb);
85 void task_delete_part(byte *user, byte *task, byte *part, byte *ext, uns version);
86
87 #endif