6 #include <boost/program_options.hpp>
7 namespace po = boost::program_options;
11 #include "filter_frontend_net.hpp"
14 #include "session.hpp"
15 #include "package.hpp"
17 class FilterInit: public yp2::Filter {
19 void process(yp2::Package & package) const {
21 if (package.session().is_closed())
23 // std::cout << "Got Close.\n";
26 Z_GDU *gdu = package.request().get();
29 ODR odr = odr_createmem(ODR_ENCODE);
33 // std::cout << "Got PDU. Sending init response\n";
34 Z_APDU *apdu = zget_APDU(odr, Z_APDU_initResponse);
36 apdu->u.initResponse->implementationName = "YP2/YAZ";
38 package.response() = apdu;
40 case Z_GDU_HTTP_Request:
41 Z_GDU *gdu = z_get_HTTP_Response(odr, 200);
42 Z_HTTP_Response *http_res = gdu->u.HTTP_Response;
44 z_HTTP_header_add(odr, &http_res->headers,
45 "Content-Type", "text/plain");
47 http_res->content_buf =
48 odr_strdup(odr, "Welcome to YP2");
49 http_res->content_len = strlen(http_res->content_buf);
51 package.response() = gdu;
58 return package.move();
62 int main(int argc, char **argv)
66 po::options_description desc("Allowed options");
68 ("help", "produce help message")
69 ("duration", po::value<int>(),
70 "number of seconds for server to exist")
74 po::store(po::parse_command_line(argc, argv, desc), vm);
77 if (vm.count("help")) {
78 std::cout << desc << "\n";
83 yp2::RouterChain router;
85 // put in frontend first
86 yp2::FilterFrontendNet filter_front;
87 filter_front.listen_address() = "tcp:@:9999";
89 // 0=no time, >0 timeout in seconds
90 if (vm.count("duration")) {
91 filter_front.listen_duration() =
92 vm["duration"].as<int>();
94 router.rule(filter_front);
97 FilterInit filter_init;
98 router.rule(filter_init);
100 yp2::Session session;
102 yp2::Package pack(session, origin);
104 pack.router(router).move();
108 std::cerr << "unknown exception\n";
117 * indent-tabs-mode: nil
119 * vim: shiftwidth=4 tabstop=8 expandtab