ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/gvpe/src/util.C
(Generate patch)

Comparing gvpe/src/util.C (file contents):
Revision 1.3 by pcg, Fri Mar 28 04:05:10 2003 UTC vs.
Revision 1.10 by pcg, Thu Oct 16 02:28:36 2003 UTC

24#include <cstring> 24#include <cstring>
25 25
26#include <errno.h> 26#include <errno.h>
27#include <signal.h> 27#include <signal.h>
28#include <sys/types.h> 28#include <sys/types.h>
29#include <sys/wait.h>
29#include <unistd.h> 30#include <unistd.h>
30#include <time.h> 31#include <time.h>
31#include <sys/socket.h>
32#include <netinet/in.h>
33#include <arpa/inet.h>
34 32
35#include <sys/mman.h> 33#include "netcompat.h"
36
37#include <openssl/rand.h>
38#include <openssl/rsa.h>
39#include <openssl/pem.h>
40#include <openssl/evp.h>
41 34
42#include "gettext.h" 35#include "gettext.h"
43#include "pidfile.h" 36#include "pidfile.h"
44#include "dropin.h" 37#include "dropin.h"
45 38
46#include "global.h" 39#include "global.h"
47#include "conf.h" 40#include "conf.h"
41#include "util.h"
48#include "slog.h" 42#include "slog.h"
49#include "protocol.h"
50 43
51int 44int
52write_pidfile (void) 45write_pidfile (void)
53{ 46{
54 int pid; 47 int pid;
140 133
141 if (!confbase) 134 if (!confbase)
142 asprintf (&confbase, "%s/vpe", CONFDIR); 135 asprintf (&confbase, "%s/vpe", CONFDIR);
143} 136}
144 137
138void run_script (const run_script_cb &cb, bool wait)
139{
140 int pid;
141
142 if ((pid = fork ()) == 0)
143 {
144 char *filename;
145 asprintf (&filename, "%s/%s", confbase, cb());
146 execl (filename, filename, (char *) 0);
147 exit (255);
148 }
149 else if (pid > 0)
150 {
151 if (wait)
152 {
153 waitpid (pid, 0, 0);
154 /* TODO: check status */
155 }
156 }
157}
158
159#if ENABLE_HTTP_PROXY
160// works like strdup
161u8 *
162base64_encode (const u8 *data, unsigned int len)
163{
164 const static char base64[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
165
166 unsigned int t, i;
167 const u8 *end = data + len;
168 u8 *res = new u8 [4 * ((len + 2) / 3) + 1];
169 u8 *out = res;
170
171 while (data <= end - 3)
172 {
173 t = (((data[0] << 8) | data[1]) << 8) | data[2];
174 data += 3;
175
176 *out++ = base64[(t >> 18) & 0x3f];
177 *out++ = base64[(t >> 12) & 0x3f];
178 *out++ = base64[(t >> 6) & 0x3f];
179 *out++ = base64[(t ) & 0x3f];
180 }
181
182 for (t = 0, i = 0; data < end; i++)
183 t = (t << 8) | *data++;
184
185 switch (i)
186 {
187 case 2:
188 *out++ = base64[(t >> 10) & 0x3f];
189 *out++ = base64[(t >> 4) & 0x3f];
190 *out++ = base64[(t << 2) & 0x3f];
191 *out++ = '=';
192 break;
193 case 1:
194 *out++ = base64[(t >> 2) & 0x3f];
195 *out++ = base64[(t << 4) & 0x3f];
196 *out++ = '=';
197 *out++ = '=';
198 break;
199 }
200
201 *out++ = 0;
202
203 return res;
204}
205#endif
206
207void
208id2mac (unsigned int id, void *m)
209{
210 mac &p = *(mac *)m;
211
212 if (id)
213 {
214 p[0] = 0xfe;
215 p[1] = 0xfd;
216 p[2] = 0x80;
217 p[3] = 0x00;
218 p[4] = id >> 8;
219 p[5] = id;
220 }
221 else
222 {
223 p[0] = 0xff;
224 p[1] = 0xff;
225 p[2] = 0xff;
226 p[3] = 0xff;
227 p[4] = 0xff;
228 p[5] = 0xff;
229 }
230}
231

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines