Fixed serious bug regarding timeouts. Improved logging for proxy.
[yazpp-moved-to-github.git] / src / yaz-proxy-main.cpp
1 /*
2  * Copyright (c) 1998-1999, Index Data.
3  * See the file LICENSE for details.
4  * Sebastian Hammer, Adam Dickmeiss
5  * 
6  * $Log: yaz-proxy-main.cpp,v $
7  * Revision 1.9  2000-08-07 14:19:59  adam
8  * Fixed serious bug regarding timeouts. Improved logging for proxy.
9  *
10  * Revision 1.8  2000/07/04 13:48:49  adam
11  * Implemented upper-limit on proxy-to-target sessions.
12  *
13  * Revision 1.7  1999/12/06 13:52:45  adam
14  * Modified for new location of YAZ header files. Experimental threaded
15  * operation.
16  *
17  * Revision 1.6  1999/11/10 10:02:34  adam
18  * Work on proxy.
19  *
20  * Revision 1.5  1999/04/21 12:09:01  adam
21  * Many improvements. Modified to proxy server to work with "sessions"
22  * based on cookies.
23  *
24  * Revision 1.4  1999/04/09 11:46:57  adam
25  * Added object Yaz_Z_Assoc. Much more functional client.
26  *
27  * Revision 1.3  1999/02/02 14:01:21  adam
28  * First WIN32 port of YAZ++.
29  *
30  * Revision 1.2  1999/01/28 13:08:45  adam
31  * Yaz_PDU_Assoc better encapsulated. Memory leak fix in
32  * yaz-socket-manager.cc.
33  *
34  * Revision 1.1.1.1  1999/01/28 09:41:07  adam
35  * First implementation of YAZ++.
36  *
37  */
38
39 #include <yaz/log.h>
40 #include <yaz/options.h>
41
42 #include <yaz-socket-manager.h>
43 #include <yaz-pdu-assoc.h>
44 #include <yaz-proxy.h>
45
46 void usage(char *prog)
47 {
48     fprintf (stderr, "%s: [-a log] [-c num] [-v level] [-t target] @:port\n", prog);
49     exit (1);
50 }
51
52
53 int args(Yaz_Proxy *proxy, int argc, char **argv)
54 {
55     char *addr = 0;
56     char *arg;
57     char *prog = argv[0];
58     int ret;
59
60     while ((ret = options("a:t:v:c:", argv, argc, &arg)) != -2)
61     {
62         switch (ret)
63         {
64         case 0:
65             if (addr)
66             {
67                 usage(prog);
68                 return 1;
69             }
70             addr = arg;
71             break;
72         case 'a':
73             proxy->set_APDU_log(arg);
74             break;
75         case 't':
76             proxy->set_proxyTarget(arg);
77             break;
78         case 'v':
79             log_init_level (log_mask_str(arg));
80             break;
81         case 'c':
82             proxy->set_max_clients(atoi(arg));
83             break;
84         default:
85             usage(prog);
86             return 1;
87         }
88     }
89     if (addr)
90     {
91         proxy->server(addr);
92     }
93     else
94     {
95         usage(prog);
96         return 1;
97     }
98     return 0;
99 }
100
101 int main(int argc, char **argv)
102 {
103     Yaz_SocketManager mySocketManager;
104     Yaz_Proxy proxy(new Yaz_PDU_Assoc(&mySocketManager));
105
106     args(&proxy, argc, argv);
107     while (mySocketManager.processEvent() > 0)
108         ;
109     return 0;
110 }