Fixed problem processEvent which in rare cases return 0.
[yazpp-moved-to-github.git] / src / yaz-proxy-main.cpp
1 /*
2  * Copyright (c) 1998-2001, Index Data.
3  * See the file LICENSE for details.
4  * 
5  * $Id: yaz-proxy-main.cpp,v 1.14 2001-11-04 22:36:21 adam Exp $
6  */
7
8 #include <yaz/log.h>
9 #include <yaz/options.h>
10
11 #include <yaz++/yaz-socket-manager.h>
12 #include <yaz++/yaz-pdu-assoc.h>
13 #include <yaz++/yaz-proxy.h>
14
15 void usage(char *prog)
16 {
17     fprintf (stderr, "%s: [-a log] [-c num] [-v level] [-t target] @:port\n", prog);
18     exit (1);
19 }
20
21
22 int args(Yaz_Proxy *proxy, int argc, char **argv)
23 {
24     char *addr = 0;
25     char *arg;
26     char *prog = argv[0];
27     int ret;
28
29     while ((ret = options("a:t:v:c:", argv, argc, &arg)) != -2)
30     {
31         switch (ret)
32         {
33         case 0:
34             if (addr)
35             {
36                 usage(prog);
37                 return 1;
38             }
39             addr = arg;
40             break;
41         case 'a':
42             proxy->set_APDU_log(arg);
43             break;
44         case 't':
45             proxy->set_proxyTarget(arg);
46             break;
47         case 'v':
48             yaz_log_init_level (yaz_log_mask_str(arg));
49             break;
50         case 'c':
51             proxy->set_max_clients(atoi(arg));
52             break;
53         default:
54             usage(prog);
55             return 1;
56         }
57     }
58     if (addr)
59     {
60         proxy->server(addr);
61     }
62     else
63     {
64         usage(prog);
65         return 1;
66     }
67     return 0;
68 }
69
70 int main(int argc, char **argv)
71 {
72     Yaz_SocketManager mySocketManager;
73     Yaz_Proxy proxy(new Yaz_PDU_Assoc(&mySocketManager));
74
75     args(&proxy, argc, argv);
76     while (mySocketManager.processEvent() > 0)
77         ;
78     exit (0);
79     return 0;
80 }