QList<DMXInterface *> FTD2XXInterface::interfaces(QList<DMXInterface *> discoveredList) { QList <DMXInterface*> interfacesList; int id = 0; /* Find out the number of FTDI devices present */ DWORD num = 0; FT_STATUS status = FT_CreateDeviceInfoList(&num); if (status != FT_OK || num <= 0) { qWarning() << Q_FUNC_INFO << "[FTD2XXInterface] Error in FT_CreateDeviceInfoList:" << status; return interfacesList; } // Allocate storage for list based on numDevices FT_DEVICE_LIST_INFO_NODE* devInfo = new FT_DEVICE_LIST_INFO_NODE[num]; // Get the device information list if (FT_GetDeviceInfoList(devInfo, &num) == FT_OK) { for (DWORD i = 0; i < num; i++) { QString vendor, name, serial; quint16 VID, PID; FT_STATUS s = get_interface_info(i, vendor, name, serial, VID, PID); if (s != FT_OK || name.isEmpty() || serial.isEmpty()) { // Seems that some otherwise working devices don't provide // FT_PROGRAM_DATA struct used by get_interface_info(). name = QString(devInfo[i].Description); serial = QString(devInfo[i].SerialNumber); vendor = QString(); } qDebug() << "serial: " << serial << "name:" << name << "vendor:" << vendor; bool found = false; for (int c = 0; c < discoveredList.count(); c++) { if (discoveredList.at(c)->checkInfo(serial, name, vendor) == true) { found = true; break; } } if (found == false) { FTD2XXInterface *iface = new FTD2XXInterface(serial, name, vendor, VID, PID, id); interfacesList << iface; } id++; } } delete [] devInfo; return interfacesList; }
u32 cw_cfg_dynamic_update_init() { s32 ret = CWLAN_OK; /* 获取套接字描述符 */ g_ap_udp_sock.sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (-1 == g_ap_udp_sock.sockfd) { printf("socket: %d %s\n", errno, strerror(errno)); return CWLAN_FAIL; } /* 设置服务器端基本配置信息 */ g_ap_udp_sock.server_addr.sin_family =AF_INET; g_ap_udp_sock.server_addr.sin_port = htons(g_ap_com_cfg.ac_com_port); g_ap_udp_sock.server_addr.sin_addr.s_addr = htonl(g_ap_com_cfg.ac_com_addr); bzero(&(g_ap_udp_sock.server_addr.sin_zero), 8); /*获得本地出口地址和端口*/ get_interface_info(g_ap_com_cfg.ap_com_eth, &g_ap_udp_sock.client_ip, g_ap_udp_sock.client_mac); g_ap_udp_sock.client_port = 22223; /* 设置客户机端基本配置信息 */ g_ap_udp_sock.client_addr.sin_family =AF_INET; g_ap_udp_sock.client_addr.sin_port = htons(g_ap_udp_sock.client_port); g_ap_udp_sock.client_addr.sin_addr.s_addr = 0;//htonl(g_ap_udp_sock.client_ip); bzero(&(g_ap_udp_sock.client_addr.sin_zero), 8); /* 显示通信连接基本信息 */ printf("\n========== INFOMATION ===========\n"); printf("Server:sockfd = %d\n",g_ap_udp_sock.sockfd); printf("Server:server IP : %s\n",inet_ntoa(g_ap_udp_sock.server_addr.sin_addr)); printf("Server:server PORT : %d\n",ntohs(g_ap_udp_sock.server_addr.sin_port)); printf("Server:client IP : %s\n",inet_ntoa(g_ap_udp_sock.client_addr.sin_addr)); printf("Server:client PORT : %d\n",ntohs(g_ap_udp_sock.client_addr.sin_port)); printf("Server:client MAC : %02x:%02x:%02x:%02x:%02x:%02x\n", (u8)g_ap_udp_sock.client_mac[0],(u8)g_ap_udp_sock.client_mac[1], (u8)g_ap_udp_sock.client_mac[2],(u8)g_ap_udp_sock.client_mac[3], (u8)g_ap_udp_sock.client_mac[4],(u8)g_ap_udp_sock.client_mac[5] ); printf("-----------------------------------\n"); /* 指定一个套接字使用的端口 */ if (-1 == bind (g_ap_udp_sock.sockfd, (struct sockaddr *)&g_ap_udp_sock.client_addr, sizeof(struct sockaddr))) { printf("bind: %d %s\n", errno, strerror(errno)); return CWLAN_FAIL; } ret = cw_dispose_pthread_cfg_init(); return ret; }
static int init_network(struct config *conf) { int sd; int ret; struct sockaddr_ieee802154 a; sd = socket(PF_IEEE802154, SOCK_DGRAM, 0); if (sd < 0) { perror("socket"); return 1; } get_interface_info(conf); a.family = AF_IEEE802154; a.addr.addr_type = IEEE802154_ADDR_SHORT; a.addr.pan_id = conf->pan_id; /* Bind socket on this side */ a.addr.short_addr = conf->short_addr; ret = bind(sd, (struct sockaddr *)&a, sizeof(a)); if (ret) { perror("bind"); return 1; } /* Connect to other side */ a.addr.short_addr = conf->dst_addr; ret = connect(sd, (struct sockaddr *)&a, sizeof(a)); if (ret) { perror("connect"); return 1; } if (conf->server) init_server(conf, sd); measure_roundtrip(conf, sd); shutdown(sd, SHUT_RDWR); close(sd); return 0; }
s32 cw_ap_recv_ac_update_url_wl(dcma_udp_skb_info_t *buff) { ac_udp_white_list_t *node = (ac_udp_white_list_t *)buff->data; dns_white_list_t dns_white_list = {0,{0}}; s8 *url; u32 i; u32 ip; u32 maxnumber = buff->number<CLOUD_WLAN_WHITE_LIST_MAX_U?buff->number:CLOUD_WLAN_WHITE_LIST_MAX_U; /*需要删除数据库中所有重定向表中的数据*/ snprintf(g_cw_sql, G_CW_SQL_BUF_LEN, "delete from %s;",CWLAN_AP_WHITE_TABLE); sqlite3_exec_unres(g_cw_db, g_cw_sql); memset(&dns_white_list, 0, sizeof(dns_white_list)); get_interface_info("br-lan", &ip, NULL); dns_white_list.list[dns_white_list.number++] = ip; for(i=0; i<maxnumber; i++) { url = (s8 *)node->data; if(url != NULL) { /*更新数据库中所有重定向表中的数据*/ snprintf(g_cw_sql, G_CW_SQL_BUF_LEN, "INSERT INTO %s (url) VALUES('%s');", CWLAN_AP_WHITE_TABLE, url); sqlite3_exec_unres(g_cw_db, g_cw_sql); cw_get_url_dns(url, &dns_white_list); } node = (ac_udp_white_list_t *)(url + node->len); } cloud_wlan_sendto_kmod(CW_NLMSG_UPDATE_WHITE_LIST, (s8 *)&dns_white_list, sizeof(dns_white_list)); return CWLAN_OK; }
static ssh_dns_resolver_get_2k(SshDNSResolver resolver) { HMODULE module; p_get_interface_info get_interface_info; p_get_per_adapter_info get_per_adapter_info; IP_INTERFACE_INFO *interface_info; IP_ADAPTER_INDEX_MAP *adapter_map; IP_PER_ADAPTER_INFO *adapter_info; IP_ADDR_STRING *addr_string; SshInt32 count; SshUInt32 result; SshUInt32 info_len = 0; Boolean added = FALSE; SshIpAddrStruct address[1]; module = LoadLibrary(TEXT("iphlpapi")); if (module == NULL) { SSH_DEBUG(SSH_D_FAIL, ("Unable to load iphelper library")); return FALSE; } get_interface_info = (p_get_interface_info)GetProcAddress(module, TEXT("GetInterfaceInfo")); get_per_adapter_info = (p_get_per_adapter_info)GetProcAddress(module, TEXT("GetPerAdapterInfo")); if (get_interface_info == NULL || get_per_adapter_info == NULL) { SSH_DEBUG(SSH_D_FAIL, ("Could not find necessary" " functions in the library")); goto exit_function; } result = get_interface_info(NULL, &info_len); if (ERROR_INSUFFICIENT_BUFFER != result) { SSH_DEBUG(SSH_D_FAIL, ("Unable to get the size of Interface info. Error is %d", result)); goto exit_function; } interface_info = ssh_calloc(1, info_len); if (NULL == interface_info) { SSH_DEBUG(SSH_D_FAIL, ("Unable to allocate memory")); goto exit_function; } result = get_interface_info(interface_info, &info_len); if (NO_ERROR != result) { SSH_DEBUG(SSH_D_FAIL, ("Failed to Get Interface information. Error is %d", result)); goto exit_function; } for (count = 0; count < interface_info->NumAdapters; count++) { adapter_map = (IP_ADAPTER_INDEX_MAP *)&(interface_info->Adapter[count]); info_len = 0; result = get_per_adapter_info(adapter_map->Index, NULL, &info_len); if (ERROR_BUFFER_OVERFLOW == result) { adapter_info = ssh_calloc(1, info_len); if (NULL == adapter_info) { SSH_DEBUG(SSH_D_FAIL, ("Unable to allocate memory")); break; } result = get_per_adapter_info(adapter_map->Index, adapter_info, &info_len); if (NO_ERROR == result) { addr_string = &(adapter_info->DnsServerList); while (addr_string !=NULL) { if (ssh_ipaddr_parse(address, addr_string->IpAddress.String)) { ssh_dns_resolver_safety_belt_add(resolver, 1, address); added = TRUE; SSH_DEBUG(SSH_D_NICETOKNOW, ("Added DNS server %@", ssh_ipaddr_render, address)); } addr_string = addr_string->Next; } } else { /* Failed for this adapter. Lets continue for other adapters */ SSH_DEBUG(SSH_D_FAIL, ("Failed to get adapter info for index %d. " "Error is %d", count, result)); } ssh_free(adapter_info); } else { SSH_DEBUG(SSH_D_FAIL, ("Failed to get adapter info len for index %d. " "Error is %d", count, result)); } } exit_function: ssh_free(interface_info); FreeLibrary(module); return added; }
void *cw_ap_local_cfg_dynamic_update(void *param) { u32 i, ret; time_t cw_network = 0; s8 *url = NULL; u32 ip = 0; s8 cmd[128]={0}; s8 logname[64]={0}; struct in_addr tmp_ip; //sqlite3_res res; dns_white_list_t dns_white_list = {0,{0}}; struct stat filestat; pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); /*以下为系统默认方式*/ //pthread_setcanceltype(PTHREAD_CANCEL_DEFFERED, NULL); while(1) { pthread_testcancel(); /*这个需要系统功能支持*/ stat(DNS_CONFIG_FILE, &filestat); if(cw_network < filestat.st_ctime) { cw_network = filestat.st_ctime; memset(&dns_white_list, 0, sizeof(dns_white_list)); /*优先更新本地,要不管理web页面都上不去*/ get_interface_info("br-lan", &ip, NULL); dns_white_list.list[dns_white_list.number++] = ip; cloud_wlan_sendto_kmod(CW_NLMSG_UPDATE_WHITE_LIST, (s8 *)&dns_white_list, sizeof(dns_white_list_t)); while(1) { get_interface_info(g_ap_com_cfg.ap_com_eth, &ip, NULL); if(ip != 0) { break; } } /*更新portal的url*/ cw_ap_local_update_portal_wl(); cw_ap_local_update_url_wl(&dns_white_list); } stat(CW_AP_LOG_FILE, &filestat); if( filestat.st_size> CW_AP_LOG_MAX) { system(">cw_ap.log"); } stat(CW_AP_KLOG_FILE, &filestat); if( filestat.st_size> CW_AP_KLOG_MAX) { snprintf(logname, 64, "%02x%02x%02x%02x%02x%02x.%s.%d", (u8)g_ap_udp_sock.client_mac[0],(u8)g_ap_udp_sock.client_mac[1], (u8)g_ap_udp_sock.client_mac[2],(u8)g_ap_udp_sock.client_mac[3], (u8)g_ap_udp_sock.client_mac[4],(u8)g_ap_udp_sock.client_mac[5], CW_AP_KLOG_FILE,filestat.st_mtime ); CW_DEBUG_U("Turn on the log: %s\n",logname); tmp_ip.s_addr = g_ap_com_cfg.ac_com_addr; snprintf(cmd, 128, "mv %s %s; tftp -p -l %s %s; rm %s", CW_AP_KLOG_FILE, logname, logname, inet_ntoa(tmp_ip), logname); system(cmd); } /* stat(CLIENTS_FILE_PATH, &filestat); if(clients < filestat.st_ctime) { clients = filestat.st_ctime; CW_DEBUG_U("call clients config update\n"); } */ pthread_testcancel(); sleep(3); }; }