whenjobs initial version.
[whenjobs.git] / lib / whenproto.x
diff --git a/lib/whenproto.x b/lib/whenproto.x
new file mode 100644 (file)
index 0000000..faa120d
--- /dev/null
@@ -0,0 +1,72 @@
+/* whenjobs -*- c -*-
+ * (C) Copyright 2012 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/* This is the protocol used to talk between the client (whenjobs) and
+ * the daemon (whenjobsd).  Communication happens over a Unix domain
+ * socket '$HOME/.whenjobs/socket'.  The wire protocol is SunRPC.
+ */
+
+/* Maximum length of a variable name and string value. */
+const MAX_VARIABLE_NAME_LENGTH = 256;
+const MAX_VARIABLE_VALUE_LENGTH = 65536;
+
+typedef string variable_name<MAX_VARIABLE_NAME_LENGTH>;
+typedef string string_value<MAX_VARIABLE_VALUE_LENGTH>;
+
+typedef variable_name variable_name_list<>;
+
+/* Status code (OK or error) returned by most calls. */
+enum status_code {
+  OK = 1,
+  ERROR = 2
+};
+
+union status switch (status_code s) {
+ case OK:
+   void;
+ case ERROR:
+   string error<>;
+};
+
+enum variable_type {
+  BOOL_T = 0,
+  STRING_T = 1,
+  INT_T = 2,
+  FLOAT_T = 3
+};
+
+union variable switch (variable_type t) {
+ case BOOL_T:
+   bool b;
+ case STRING_T:
+   string_value s;
+ case INT_T:
+   string i<64>;             /* OCaml [big_int], as a string. */
+ case FLOAT_T:
+   double f;                 /* C 'double' maps to an OCaml 'float' */
+};
+
+/* The API of the daemon. */
+program When {
+  version V1 {
+    status reload_file (void) = 1;
+    void set_variable (variable_name, variable) = 2;
+    variable get_variable (variable_name) = 3;
+    variable_name_list get_variable_names (void) = 4;
+  } = 1;
+} = 0x20008081;