0
|
1 /*
|
|
2 ckdb.c
|
|
3
|
|
4 HTTP cookie database manager.
|
|
5
|
|
6 The contents of this file are subject to the gSOAP Public License
|
|
7 Version 1.0 (the "License"); you may not use this file except in
|
|
8 compliance with the License. You may obtain a copy of the License at
|
|
9 http://www.cs.fsu.edu/~engelen/soaplicense.html Software distributed
|
|
10 under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY
|
|
11 OF ANY KIND, either express or implied. See the License for the
|
|
12 specific language governing rights and limitations under the License.
|
|
13
|
|
14 The Initial Developer of the Original Code is Robert A. van Engelen.
|
|
15 Copyright (C) 2000-2002 Robert A. van Engelen. All Rights Reserved.
|
|
16
|
|
17 1. Compile ckdb.h:
|
|
18 soapcpp2 -cpckdb ckdb.h
|
|
19 2. Compile ckdb.c:
|
|
20 gcc -DWITH_COOKIES -DWITH_NOGLOBAL -c ckdb.c
|
|
21 3. Compile and link with main program, e.g. ckdbtest.c:
|
|
22 soapcpp2 -c ckdbtest.h
|
|
23 gcc -DWITH_COOKIES ckdbtest.c ckdb.o stdsoap2.c soapC.c soapClient.c
|
|
24
|
|
25 */
|
|
26
|
|
27 #include <sys/stat.h>
|
|
28 #include "stdsoap2.h"
|
|
29 #define WITH_NOGLOBAL
|
|
30 #undef SOAP_FMAC3
|
|
31 #define SOAP_FMAC3 static
|
|
32 #include "ckdbC.c"
|
|
33
|
|
34 int soap_save_cookies(struct soap *soap, const char *pathname)
|
|
35 { int socket = soap->socket;
|
|
36 int sendfd = soap->sendfd;
|
|
37 soap_begin(soap);
|
|
38 soap->socket = -1; /* make sure plain I/O is used */
|
|
39 soap->sendfd = open(pathname, O_CREAT|O_TRUNC|O_WRONLY, S_IREAD|S_IWRITE);
|
|
40 if (soap->sendfd >= 0)
|
|
41 { soap_serialize_cookie(soap, (struct cookie*)soap->cookies);
|
|
42 soap_begin_send(soap);
|
|
43 soap_put_cookie(soap, (struct cookie*)soap->cookies, "jar", NULL);
|
|
44 soap_end_send(soap);
|
|
45 close(soap->sendfd);
|
|
46 soap->socket = socket;
|
|
47 soap->sendfd = sendfd;
|
|
48 return SOAP_OK;
|
|
49 }
|
|
50 soap->socket = socket;
|
|
51 soap->sendfd = sendfd;
|
|
52 return SOAP_EOF;
|
|
53 }
|
|
54
|
|
55 int soap_load_cookies(struct soap *soap, const char *pathname)
|
|
56 { int socket = soap->socket;
|
|
57 int recvfd = soap->recvfd;
|
|
58 soap_begin(soap);
|
|
59 soap->socket = -1; /* make sure plain I/O is used */
|
|
60 soap->recvfd = open(pathname, O_RDONLY);
|
|
61 if (soap->recvfd >= 0)
|
|
62 { if (soap_begin_recv(soap))
|
|
63 { close(soap->recvfd);
|
|
64 soap->socket = socket;
|
|
65 soap->recvfd = recvfd;
|
|
66 return soap->error;
|
|
67 }
|
|
68 soap->cookies = (struct soap_cookie*)soap_get_cookie(soap, NULL, "jar", NULL);
|
|
69 if (!soap->cookies && soap->error)
|
|
70 { close(soap->recvfd);
|
|
71 soap->socket = socket;
|
|
72 soap->recvfd = recvfd;
|
|
73 return soap->error;
|
|
74 }
|
|
75 if (soap_end_recv(soap))
|
|
76 { close(soap->recvfd);
|
|
77 soap->socket = socket;
|
|
78 soap->recvfd = recvfd;
|
|
79 return soap->error;
|
|
80 }
|
|
81 close(soap->recvfd);
|
|
82 soap->socket = socket;
|
|
83 soap->recvfd = recvfd;
|
|
84 return SOAP_OK;
|
|
85 }
|
|
86 soap->socket = socket;
|
|
87 soap->recvfd = recvfd;
|
|
88 return SOAP_EOF;
|
|
89 }
|