parse_result parse_int(char const * str) { parse_result r=parse_int_hex(str); if (r.result) return r; else return parse_int_dec(str); }
parse_result parse_ipv4addr(char const * str) { parse_result addr[4]; addr[0]=parse_int_dec(str); addr[1]=parse_int_dec(addr[0].rest+1); addr[2]=parse_int_dec(addr[1].rest+1); addr[3]=parse_int_dec(addr[2].rest+1); if ( addr[0].result && in_range(*(int*)addr[0].result, 0, 256) && addr[1].result && in_range(*(int*)addr[1].result, 0, 256) && addr[2].result && in_range(*(int*)addr[2].result, 0, 256) && addr[3].result && in_range(*(int*)addr[3].result, 0, 256) && addr[0].rest && (*addr[0].rest=='.') && addr[1].rest && (*addr[1].rest=='.') && addr[2].rest && (*addr[2].rest=='.')) { size_t len=addr[3].rest-str+1; return make_parse_result(tostring(take_string(len, fullstr(str))), addr[3].rest); } else return make_parse_result(NULL, str); }
bool ServerConfig::getInt(const char* p,int* data) { _CONFIG* ret; if((ret = find(p)) == NULL) return false; *data = parse_int_dec(ret->value); if(*data == 0&&*(ret->value) != '0') { return false; } return true; }
int main(int args,char** argv) { int ch; char script[256] = {0}; char c_times[64] = {0}; char buf[256] = { 0 }; int times = 0; //printf("times=%d\n",args); get_file_from_path(argv[0], buf); if(args == 1) { Usage(buf); return 1; } while((ch = getopt(args,argv,"f:t:")) != -1) { switch(ch) { case 'f': strcpy(script,optarg); break; case 't': strcpy(c_times,optarg); break; default: break; } } if(script[0] == 0||c_times[0] == 0) { Usage(buf); return 1; } times = parse_int_dec(c_times); AutoControllerMock contorl; if(!contorl.init(script)) return 1; for(int i = 0; i < times;i++) { contorl.runController(); } return 0; }
bool wifi_manager::getWifiStatus(wifi_status* _status) { bool ret = false; size_t len = WIFI_BUFFER_LEN - 1; char* p_start,*p_end; do { if(_status==NULL || _ctrl == NULL) break; memset(_status,0,sizeof(wifi_status)); if(wpa_ctrl_request(_ctrl,"STATUS-VERBOSE",sizeof("STATUS-VERBOSE"),_buffer,&len,NULL)) break; _buffer[len] = 0; p_start = _buffer; while(p_start < _buffer + len) { p_end = sl_find_first_char(p_start,'\n'); *p_end = 0; if(strncmp(p_start,"bssid=",6) == 0) { sl_hwaddr_aton(p_start + 6,_status->bssid); }else if(strncmp(p_start,"id=",3) == 0) { _status->id = parse_int_dec(p_start + 3); }else if(strncmp(p_start,"ssid=",5) == 0) { strncpy(_status->ssid,p_start + 5 ,128); }else if(strncmp(p_start,"ip_address=",11) == 0) { strncpy(_status->ip_address,p_start + 11,16); } p_start = p_end + 1; } ret = true; }while(0); return ret; }
bool wifi_manager::addWifiNetwork(const char* ssid,const char* passwd) { bool ret = false; size_t len = WIFI_BUFFER_LEN - 1; char buf[256] = {0}; int id; char* p; do { if(wpa_ctrl_request(_ctrl,"ADD_NETWORK",sizeof("ADD_NETWORK"),_buffer,&len,NULL)) break; _buffer[len] = 0; p = _buffer; while(*p != '\n')p++; *p = 0; id = parse_int_dec(_buffer); //printf("new network id:%s\n",_buffer); sprintf(buf,"SET_NETWORK %d ssid \"%s\"",id,ssid); if(wpa_ctrl_request(_ctrl,buf,strlen(buf),_buffer,&len,NULL)) break; printf("%s\n",buf); sprintf(buf,"SET_NETWORK %d psk \"%s\"",id,passwd); if(wpa_ctrl_request(_ctrl,buf,strlen(buf),_buffer,&len,NULL)) break; _buffer[len] = 0; //printf("%s\n%s",buf,_buffer); ret = true; }while(0); return ret; }
bool wifi_manager::listConfigedWifi(list<wifi_list*> *_list) { bool ret = false; size_t len = WIFI_BUFFER_LEN - 1; char* p_start,*p_end; do { if(_list==NULL || _ctrl == NULL) break; if(wpa_ctrl_request(_ctrl,"LIST_NETWORKS",sizeof("LIST_NETWORKS"),_buffer,&len,NULL)) break; _buffer[len] = 0; p_start = _buffer; while(p_start < _buffer + len) { p_end = sl_find_first_char(p_start,'\n'); *p_end = 0; if(strncmp(p_start,"network",7) != 0) { wifi_list *_wifi_list = new wifi_list; char _buf[256]; char *p1 = p_start,*p2 = _buf; while(*p1&&*p1 != '\t') *p2++ = *p1++; *p2 = 0; p1 ++; _wifi_list->id = parse_int_dec(_buf); p2 = _buf; while(*p1&&*p1 != '\t') *p2++ = *p1++; *p2 = 0; p1 ++; strncpy(_wifi_list->ssid,_buf,128); while(*p1&&*p1 != '\t')p1++; p1++; p2 = _buf; while(*p1&&*p1 != '\t') *p2++ = *p1++; *p2 = 0; p1 ++; if(strncmp(_buf,"[CURRENT]",strlen("[CURRENT]")) == 0) _wifi_list->flag = 1; else _wifi_list->flag = 0; _list->push_back(_wifi_list); } p_start = p_end + 1; } ret = true; }while(0); return ret; }
bool wifi_manager::getAvaiableWifi(list<wifi_scan*> *_list) { bool ret = false; size_t len = WIFI_BUFFER_LEN - 1; char* p_start,*p_end; do { if(_list==NULL || _ctrl == NULL) break; if(wpa_ctrl_request(_ctrl,"SCAN",sizeof("SCAN"),_buffer,&len,NULL)) break; len = WIFI_BUFFER_LEN - 1; if(wpa_ctrl_request(_ctrl,"SCAN_RESULTS",sizeof("SCAN_RESULTS"),_buffer,&len,NULL)) break; _buffer[len] = 0; p_start = _buffer; while(p_start < _buffer + len) { // printf("--line:%s\n",p_start); p_end = sl_find_first_char(p_start,'\n'); *p_end = 0; if(strncmp(p_start,"bssid",5) != 0) { wifi_scan* _scan = new wifi_scan; memset(_scan,0,sizeof(wifi_scan)); char _buf[256]; char *p1 = p_start,*p2 = _buf; while(*p1&&*p1 != '\t') *p2++ = *p1++; *p2 = 0; p1 ++; sl_hwaddr_aton(_buf,_scan->bssid); p2 = _buf; while(*p1&&*p1 != '\t') *p2++ = *p1++; *p2 = 0; p1 ++; _scan->frequency = parse_int_dec(_buf); p2 = _buf; while(*p1&&*p1 != '\t') *p2++ = *p1++; *p2 = 0; p1 ++; _scan->signal_level = parse_int_dec(_buf); p2 = _buf; while(*p1&&*p1 != '\t') *p2++ = *p1++; *p2 = 0; p1 ++; strncpy(_scan->flags,_buf,128); strncpy(_scan->ssid,p1,128); _list->push_back(_scan); } p_start = p_end + 1; } ret = true; }while(0); return ret; }
int main(int args,char** argv) { int ch = 0; int port = 0; char serial_port[32] = { 0 }; char filename[256] = {0}; ServerConfig* pConfig = NULL; SlServer* pserver = NULL; #ifdef SLSERVER_LINUX if(signal(SIGINT, signal_handler) == SIG_ERR) { printf("could not register signal handler\n"); exit(1); } pthread_mutex_init(&slglobal.frame_lock,NULL); #else INIT_GLOBAL_FRAME_LOCK; #endif slglobal.is_stream_running = false; slglobal.frame = NULL; slglobal.frame_size = 0; slglobal.frame_alloc_size = 0; slglobal.frame_count = 1; while((ch = getopt(args,argv,"p:s:f:")) != -1) { switch(ch) { case 'p': port = parse_int_dec(optarg); break; case 's': strcpy_s(serial_port,optarg); break; case 'f': strcpy_s(filename,optarg); break; default: LOGOUT("%s:Unknow Option -%c\n",argv[0],ch); goto end; } } if(*filename == 0) { Usage(); LOGOUT("\t you must input config file\n"); goto end; } pConfig = new ServerConfig(); pConfig->init(filename); if(pConfig->parseData() == false) { LOGOUT("***ERROR*** error config file\n"); goto end; } pConfig->debug(); if(port == 0&&!pConfig->getInt("port",&port)) { LOGOUT("***ERROR*** Cannot find port\n"); goto end; } if(*serial_port == 0&&!pConfig->getString("serial",serial_port)) { LOGOUT("***ERROR*** Cannot define serial port\n"); goto end; } LOGOUT("***INFO*** now we start server\n"); pserver = new SlServer(port,pConfig); slglobal.pConfig = pConfig; if (pserver->init(serial_port) == false) { goto end; } if (pserver->start() == false) { goto end; } LOGOUT("***INFO*** server start ok\n"); slglobal.server = pserver; #ifdef SLSERVER_WIN32 LOGOUT("***INFO*** Please Input A Char To Stop This Server\n"); getc(stdin); #else slglobal.global_running = true; while(slglobal.global_running) { usleep(10); } #endif pserver->stop(); if (pserver) delete pserver; end: if (pConfig){ pConfig->sync(); delete pConfig; } #ifdef SLSERVER_LINUX pthread_mutex_destroy(&slglobal.frame_lock); #else DESTROY_GLOBAL_FRAME_LOCK; #endif if(slglobal.frame) free(slglobal.frame); return 0; }