Beispiel #1
0
bool AtDrv::setApSSID(char *ssid, int type, const char *password)
{
	bool ret = false;
	IPAddress ipStart(192, 168, 43, 100);
	IPAddress ipEnd(192, 168, 43, 200);
	IPAddress mask(255, 255, 255, 0);
	IPAddress gateway(192, 168, 43, 1);
	IPAddress dns1(192, 168, 43, 1);
	IPAddress dns2(8, 8, 8, 8);
	IPAddress netIp(192, 168, 43, 1);

	if(!isAtMode()) {
		if(!switchToAtMode()) {
			INFO1("Can't switch to at mode");
			goto end;
		}
	}
	
	if(!setNetMode(NET_MODE_WIFI_AP))
		goto end;
	
	if(!setWiFiConfig(ssid, type, password))
		goto end;
    
 	if(!setDhcpd(true))
		goto end;
    
 	if(!setDhcpdIp(ipStart, ipEnd, mask, gateway))
		goto end;
    
 	if(!setDhcpdDns(dns1, dns2))
		goto end;  

 	if(!setDhcpdTime(86400))
		goto end;
    
 	if(!setNetIp(netIp, mask, gateway))
		goto end;
    
 	if(!setNetDns(dns1, dns2))
		goto end;      

	netCommit();

	ret = true;
end:
	return ret;
}
void ClusterGeoIpService::_parseLine(const char *line,std::vector<_V4E> &v4db,std::vector<_V6E> &v6db,int ipStartColumn,int ipEndColumn,int latitudeColumn,int longitudeColumn)
{
	std::vector<std::string> ls(OSUtils::split(line,",\t","\\","\"'"));
	if ( ((ipStartColumn >= 0)&&(ipStartColumn < (int)ls.size()))&&
	     ((ipEndColumn >= 0)&&(ipEndColumn < (int)ls.size()))&&
	     ((latitudeColumn >= 0)&&(latitudeColumn < (int)ls.size()))&&
	     ((longitudeColumn >= 0)&&(longitudeColumn < (int)ls.size())) ) {
		InetAddress ipStart(ls[ipStartColumn].c_str(),0);
		InetAddress ipEnd(ls[ipEndColumn].c_str(),0);
		const double lat = strtod(ls[latitudeColumn].c_str(),(char **)0);
		const double lon = strtod(ls[longitudeColumn].c_str(),(char **)0);

		if ((ipStart.ss_family == ipEnd.ss_family)&&(ipStart)&&(ipEnd)&&(std::isfinite(lat))&&(std::isfinite(lon))) {
			const double latRadians = lat * 0.01745329251994; // PI / 180
			const double lonRadians = lon * 0.01745329251994; // PI / 180
			const double cosLat = cos(latRadians);
			const int x = (int)round((-6371.0) * cosLat * cos(lonRadians)); // 6371 == Earth's approximate radius in kilometers
			const int y = (int)round(6371.0 * sin(latRadians));
			const int z = (int)round(6371.0 * cosLat * sin(lonRadians));

			if (ipStart.ss_family == AF_INET) {
				v4db.push_back(_V4E());
				v4db.back().start = Utils::ntoh((uint32_t)(reinterpret_cast<const struct sockaddr_in *>(&ipStart)->sin_addr.s_addr));
				v4db.back().end = Utils::ntoh((uint32_t)(reinterpret_cast<const struct sockaddr_in *>(&ipEnd)->sin_addr.s_addr));
				v4db.back().lat = (float)lat;
				v4db.back().lon = (float)lon;
				v4db.back().x = x;
				v4db.back().y = y;
				v4db.back().z = z;
				//printf("%s - %s : %d,%d,%d\n",ipStart.toIpString().c_str(),ipEnd.toIpString().c_str(),x,y,z);
			} else if (ipStart.ss_family == AF_INET6) {
				v6db.push_back(_V6E());
				memcpy(v6db.back().start,reinterpret_cast<const struct sockaddr_in6 *>(&ipStart)->sin6_addr.s6_addr,16);
				memcpy(v6db.back().end,reinterpret_cast<const struct sockaddr_in6 *>(&ipEnd)->sin6_addr.s6_addr,16);
				v6db.back().lat = (float)lat;
				v6db.back().lon = (float)lon;
				v6db.back().x = x;
				v6db.back().y = y;
				v6db.back().z = z;
				//printf("%s - %s : %d,%d,%d\n",ipStart.toIpString().c_str(),ipEnd.toIpString().c_str(),x,y,z);
			}
		}
	}
}