6ea03a7b19dd8c809cdab0e04e52624ea0f0934e
[citadel.git] / libcitadel / tests / stringbuf_stream.c
1 /*
2  *  CUnit - A Unit testing framework library for C.
3  *  Copyright (C) 2001  Anil Kumar
4  *  
5  *  This library is open source software; you can redistribute it and/or
6  *  modify it under the terms of the GNU Library General Public
7  *  License as published by the Free Software Foundation; either
8  *  version 2 of the License, or (at your option) any later version.
9  *
10  *  This library is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  *  Library General Public License for more details.
14  */
15
16 #include <stdio.h>
17 #include <stdlib.h>
18
19 #include <sys/select.h>
20
21 #include <ctype.h>
22 #include <unistd.h>
23 #include <fcntl.h>
24 #include <signal.h>
25 #include <sys/types.h>
26 #include <sys/wait.h>
27 #include <sys/socket.h>
28 #include <sys/time.h>
29 #include <sys/stat.h>
30 #include <limits.h>
31 #include <netinet/in.h>
32 #include <arpa/inet.h>
33 #include <sys/un.h>
34 #include <netdb.h>
35 #include <sys/poll.h>
36 #include <string.h>
37 #include <pwd.h>
38 #include <errno.h>
39 #include <stdarg.h>
40 #include <stdio.h>
41 #include <pthread.h>
42 #include <signal.h>
43 #include <sys/utsname.h>
44 #include <string.h>
45
46
47 typedef void testfunc(int Sock);
48
49 #include <string.h>
50
51 #include "../lib/libcitadel.h"
52
53
54 int DeZip = -1;
55 int DeBase64 = -1;
56
57 int msock;                      /* master listening socket */
58 int BindPort;
59 int time_to_die=0;
60 int n_Lines_to_read = 0;
61 int blobsize = 0;
62 int timeout = 5;
63 int selres = 1;
64 char ip_addr[256]="0.0.0.0";
65
66
67
68 static void StreamEncode(void)
69 {
70         IOBuffer ReadBuffer;
71         IOBuffer WriteBuffer;
72         int err;
73         int done = 0;
74         void *vStream;
75         
76         memset(&ReadBuffer, 0, sizeof(IOBuffer));
77         memset(&WriteBuffer, 0, sizeof(IOBuffer));
78         ReadBuffer.fd = fileno(stdin);
79         WriteBuffer.fd = fileno(stdout);
80         ReadBuffer.Buf = NewStrBufPlain(NULL, SIZ*2);
81         WriteBuffer.Buf = NewStrBufPlain(NULL, SIZ*2);
82
83         int fdin = fileno(stdin);
84         int fdout = fileno(stdout);
85         eStreamType ST;
86
87                                 
88         if (DeZip == 0)
89                 ST = eZLibEncode;
90         else if (DeZip == 1)
91                 ST = eZLibDecode;
92         else if (DeBase64 == 0)
93                 ST = eBase64Encode;
94         else if (DeBase64 == 1)
95                 ST = eBase64Decode;
96         else
97                 ST = eEmtyCodec;
98         vStream = StrBufNewStreamContext(ST);
99
100         while (!done && (fdin >= 0) && (fdout >= 0) && (!feof(stdin)))
101         {
102
103                 done = StrBuf_read_one_chunk_callback(fdin,
104                                                       0,
105                                                       &ReadBuffer) < SIZ * 4;
106                 if (IOBufferStrLength(&ReadBuffer) == 0)
107                 {
108                         done = 1;
109                 }
110                 do
111                 {
112                         StrBufStreamTranscode(ST, &WriteBuffer, &ReadBuffer, NULL, -1, vStream, done);
113
114                         while (IOBufferStrLength(&WriteBuffer) > 0)
115                         {
116                                 err = StrBuf_write_one_chunk_callback(fdout,
117                                                                       0,
118                                                                       &WriteBuffer);
119                         }
120                 } while (IOBufferStrLength(&ReadBuffer) > 0);
121         }
122
123         
124         StrBufDestroyStreamContext(ST, &vStream);
125         
126         FreeStrBuf(&ReadBuffer.Buf);
127         FreeStrBuf(&WriteBuffer.Buf);
128         time_to_die = 1;
129 }
130
131
132
133
134 int main(int argc, char* argv[])
135 {
136         char a;
137         setvbuf(stdout, NULL, _IONBF, 0);
138
139
140         while ((a = getopt(argc, argv, "z:b")) != EOF)
141         {
142                 switch (a) {
143
144                 case 'z':
145                         // zip...
146                         DeZip = *optarg == 'x';
147                         break;
148                 case 'b':
149                         // base64
150                         DeBase64 = *optarg == 'x';
151
152                 }
153         }
154
155
156         StartLibCitadel(8);
157
158         StreamEncode();
159         return 0;
160 }
161
162
163 /// run -z 1 < ~/testfile1.txt > /tmp/blarg.z