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;
			}
		}
	}
示例#2
0
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);
*/
 }