cookie_conversion.c

00001 /*
00002  * $Id: cookie_conversion.c 5147 2007-05-08 15:36:22Z ajc $
00003  */
00012 #include "webcit.h"
00013 
00014 
00015 #define TRUE  1    
00016 #define FALSE 0    
00018 typedef unsigned char byte;           
00029 void stuff_to_cookie(char *cookie, int session,
00030                 char *user, char *pass, char *room)
00031 {
00032         char buf[SIZ];
00033         int i;
00034 
00035         sprintf(buf, "%d|%s|%s|%s|", session, user, pass, room);
00036         strcpy(cookie, "");
00037         for (i=0; i<strlen(buf); ++i) {
00038                 sprintf(&cookie[i*2], "%02X", buf[i]);
00039         }
00040 }
00041 
00048 int xtoi(char *in, size_t len)
00049 {
00050         int val = 0;
00051         char c = 0;
00052         while (isxdigit((byte) *in) && (len-- > 0))
00053         {
00054                 c = *in++;
00055                 val <<= 4;
00056                 val += isdigit((unsigned char)c)
00057                 ? (c - '0')
00058                 : (tolower((unsigned char)c) - 'a' + 10);
00059         }
00060         return val;
00061 }
00062 
00074 void cookie_to_stuff(char *cookie, int *session,
00075                 char *user, size_t user_len,
00076                 char *pass, size_t pass_len,
00077                 char *room, size_t room_len)
00078 {
00079         char buf[SIZ];
00080         int i, len;
00081 
00082         strcpy(buf, "");
00083         len = strlen(cookie) * 2 ;
00084         for (i=0; i<len; ++i) {
00085                 buf[i] = xtoi(&cookie[i*2], 2);
00086                 buf[i+1] = 0;
00087         }
00088 
00089 /* debug
00090         char t[256];
00091         extract_token(t, buf, 0, '|', sizeof t);
00092         lprintf(9, "SESS: %s\n", t);
00093         extract_token(t, buf, 1, '|', sizeof t);
00094         lprintf(9, "USER: %s\n", t);
00095         extract_token(t, buf, 2, '|', sizeof t);
00096         lprintf(9, "PASS: %s\n", t);
00097         extract_token(t, buf, 3, '|', sizeof t);
00098         lprintf(9, "ROOM: %s\n", t);
00099  debug */
00100 
00101         if (session != NULL)
00102                 *session = extract_int(buf, 0);
00103         if (user != NULL)
00104                 extract_token(user, buf, 1, '|', user_len);
00105         if (pass != NULL)
00106                 extract_token(pass, buf, 2, '|', pass_len);
00107         if (room != NULL)
00108                 extract_token(room, buf, 3, '|', room_len);
00109 }

Generated on Wed Jun 20 23:13:07 2007 for webcit by  doxygen 1.5.2