summaryrefslogtreecommitdiff
path: root/README_IPC.md
diff options
context:
space:
mode:
Diffstat (limited to 'README_IPC.md')
-rw-r--r--README_IPC.md59
1 files changed, 59 insertions, 0 deletions
diff --git a/README_IPC.md b/README_IPC.md
new file mode 100644
index 0000000..b9d754a
--- /dev/null
+++ b/README_IPC.md
@@ -0,0 +1,59 @@
+About the Inter Process Communication Protocol
+==============================================
+
+JWebmail needs to read a users mail box in maildir format.
+JWebmail runs under its own user also called jwebmail.
+The mailbox has rights of its own user or there is
+a special user for all mailboxes. To gain access there is a setuid program
+called qmail-authuser that checks acces rights and starts another program.
+This program is called `extractor`.
+
+Version 1
+---------
+
+Previously all arguments where passed by command line arguments and json
+was returned.
+Binary data was sent after a json header and a newline.
+
+Version 2
+---------
+
+Now protobuf is used for message interchange.
+
+Currently a process in spawned for every command.
+The method is given as a process argument and the arguments are a single
+message on stdin which is close afterwards. The response is a single protobuf
+message on stdout after which the process exits.
+
+Version 3
+---------
+
+In the future one process is spawned for every jwebmail request.
+For this the method name must be dynamic.
+
+I propose the following protocol:
+
+ request
+ 32 bit big endian unsigned integer
+ ascii string (method name)
+ 32 bit big endian unsigned integer
+ protobuf message
+
+ response
+ 32 bit big endian unsigned integer
+ protobuf message
+
+On end the request file descriptor is closed.
+An error may close stdout early.
+
+Exit codes
+----------
+
+- 1 qma
+- 2 qma
+- 3 err response
+- 4 user error
+- 5 issue switching to user
+- 6 operation not supported
+- 110 qma
+- 111 qma