VitaIqUdpPort::VitaIqUdpPort(const std::string& host, int port, int packet_size, bool debug) : Debuggable(debug, ""), host(host), port(port), packet_size(packet_size), connected(false), socket(NULL), recv_buffer(NULL), bytes_recvd(0) { // Set the object debug name std::ostringstream oss; oss << "VitaIqUdpPort " << port; d_debug_name = oss.str(); // Allocate the receive buffer recv_buffer = new unsigned char[packet_size]; memset(recv_buffer, 0, packet_size); // Connect to the UDP port boost::system::error_code error = boost::asio::error::host_not_found; std::string s_port = (boost::format("%d") % port).str(); if (host.size() > 0) { boost::asio::ip::udp::resolver resolver(io_service); boost::asio::ip::udp::resolver::query query(boost::asio::ip::udp::v4(), host, s_port, boost::asio::ip::resolver_query_base::passive); io_service.run(); endpoint = *resolver.resolve(query); if (errno > 0) { printf("cannot resolve host IP %s error: %s\n", host.c_str(), strerror(errno)); } else { socket = new boost::asio::ip::udp::socket(io_service); socket->open(endpoint.protocol()); boost::asio::socket_base::linger loption(true, 0); socket->set_option(loption); boost::asio::socket_base::reuse_address roption(true); socket->set_option(roption); socket->bind(endpoint); connected = true; } } }
void get_config(char *config_filename) { char *cnf="mark"; printf("Configured keywords: "); parse(config_filename) { option("keyword",kwd); if(kwd) { printf("%s ",kwd); create(keyword,Keyword); keyword->key=kwd; keyword->asymetry_ratio=1; /* ratio for ADSL-like upload */ keyword->asymetry_fixed=0; /* fixed treshold for ADSL-like upload */ keyword->data_limit=8; /* hard shaping: apply magic_treshold if max*data_limit MB exceeded */ keyword->data_prio=4; /* soft shaping (qos): reduce HTB prio if max*data_prio MB exceeded */ keyword->fixed_limit=0; /* fixed data limit for setting lower HTB ceil */ keyword->fixed_prio=0; /* fixed data limit for setting lower HTB prio */ keyword->reserve_min=8; /* bonus for nominal HTB rate bandwidth (in kbps) */ keyword->reserve_max=0; /* malus for nominal HTB ceil (in kbps) */ /* obsolete: keyword->divide_max=0; relative malus: new_ceil=rate+(old_ceil-rate)/divide_max keyword->htb_ceil_bonus_divide=0; relative bonus: new_ceil=old_ceil+old_ceil/htb_ceil_bonus_divide */ keyword->default_prio=1; keyword->html_color="000000"; keyword->ip_count=0; keyword->leaf_discipline=""; push(keyword,keywords); if(!defaultkeyword) defaultkeyword=keyword; keywordcount++; kwd=NULL; } else every(keyword,keywords) { int l=strlen(keyword->key); if(!strncmp(keyword->key,_,l) && strlen(_)>l+2) { char *tmptr=_; /* <---- l+1 ----> */ _+=l+1; /* via-prometheus-asymetry-ratio, etc. */ ioption("asymetry-ratio",keyword->asymetry_ratio); ioption("asymetry-treshold",keyword->asymetry_fixed); ioption("magic-relative-limit",keyword->data_limit); ioption("magic-relative-prio",keyword->data_prio); loption("magic-fixed-limit",keyword->fixed_limit); loption("magic-fixed-prio",keyword->fixed_prio); ioption("htb-default-prio",keyword->default_prio); ioption("htb-rate-bonus",keyword->reserve_min); ioption("htb-ceil-malus",keyword->reserve_max); /* obsolete: ioption("htb-ceil-divide",keyword->divide_max); ioption("htb-ceil-bonus-divide",keyword->htb_ceil_bonus_divide); */ option("leaf-discipline",keyword->leaf_discipline); option("html-color",keyword->html_color); _=tmptr; if(keyword->data_limit || keyword->fixed_limit || keyword->data_prio || keyword->fixed_prio) use_credit=1; } } option("tc",tc); option("iptables",iptables); option("iptables-save",iptablessave); /* new */ option("iptables-restore",iptablesrestore); /* new */ option("iptables-file",iptablesfile); /* new */ option("hosts",hosts); option("lan-interface",lan); option("wan-interface",wan); option("lan-medium",lan_medium); option("wan-medium",wan_medium); lloption("wan-download",line); lloption("wan-upload",up); ioption("hall-of-fame-enable",hall_of_fame); option("hall-of-fame-title",title); option("hall-of-fame-filename",html); option("hall-of-fame-preview",preview); option("log-filename",cmdlog); option("credit-filename",credit); ioption("credit-enable",enable_credit); option("log-traffic-directory",log_dir); option("log-traffic-url-path",log_url); option("qos-free-zone",qos_free_zone); ioption("qos-free-delay",qos_free_delay); ioption("qos-proxy-enable",qos_proxy); option("qos-proxy-ip",proxy_ip); option("htb-leaf-discipline",qos_leaf); ioption("qos-proxy-port",proxy_port); ioption("free-rate",free_min); ioption("free-ceil",free_max); ioption("htb-burst",burst); ioption("htb-burst-main",burst_main); ioption("htb-burst-group",burst_group); ioption("htb-nesting-limit",max_nesting); ioption("htb-r2q",htb_r2q); ioption("magic-include-upload",include_upload); ioption("magic-priorities",magic_priorities); ioption("magic-treshold",magic_treshold); option("filter-type", cnf); /* not yet implemented: ioption("magic-fixed-packets",fixed_packets); ioption("magic-relative-packets",packet_limit); */ }