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