* Rewrote the HTTP engine and application coupling to run in a worker thread
[citadel.git] / webcit / cookie_conversion.c
1
2 #include <ctype.h>
3 #include <stdlib.h>
4 #include <unistd.h>
5 #include <stdio.h>
6 #include <fcntl.h>
7 #include <signal.h>
8 #include <sys/types.h>
9 #include <sys/wait.h>
10 #include <sys/socket.h>
11 #include <sys/time.h>
12 #include <limits.h>
13 #include <netinet/in.h>
14 #include <netdb.h>
15 #include <string.h>
16 #include <pwd.h>
17 #include <errno.h>
18 #include <stdarg.h>
19 #include <pthread.h>
20 #include <signal.h>
21 #include "webcit.h"
22
23 /*
24  * Pack all session info into one easy-to-digest cookie.  Healthy and delicious!
25  */
26 void stuff_to_cookie(char *cookie, int session, char *user, char *pass, char *room)
27 {
28         char buf[256];
29         int i;
30
31         sprintf(buf, "%d|%s|%s|%s", session, user, pass, room);
32         strcpy(cookie, "");
33
34         for (i = 0; i < strlen(buf); ++i)
35                 sprintf(&cookie[strlen(cookie)], "%02X", buf[i]);
36
37 }
38
39
40 /*
41  * Extract all that fun stuff out of the cookie.
42  */
43 void cookie_to_stuff(char *cookie, int *session, char *user, char *pass, char *room)
44 {
45         char buf[256];
46         int i;
47
48         for (i = 0; i < strlen(cookie); i = i + 2) {
49                 sscanf(&cookie[i], "%02x", (unsigned int *) &buf[i / 2]);
50                 buf[(i / 2) + 1] = 0;
51         }
52
53         if (session != NULL)
54                 *session = extract_int(buf, 0);
55         if (user != NULL)
56                 extract(user, buf, 1);
57         if (pass != NULL)
58                 extract(pass, buf, 2);
59         if (room != NULL)
60                 extract(room, buf, 3);
61 }