void DetectNetworkSetupThread::on(Complete, HttpConnection*, const string&) throw() { debug_log(AUTODETECT, "parsing response {%s}", m_buffer.c_str()); try { SimpleXML xml; xml.fromXML(m_buffer); if (xml.findChild("response")) { debug_log(AUTODETECT, "found <response>"); xml.stepIn(); if (xml.findChild("mode")) { string mode = xml.getChildData(); info_log(AUTODETECT, "mode={%s}", mode.c_str()); xml.resetCurrentChild(); string address; if (xml.findChild("address")) { string address = xml.getChildData(); info_log(AUTODETECT, "address={%s}", address.c_str()); if (!address.empty()) { SettingsManager::getInstance()->set(SettingsManager::EXTERNAL_IP, address); } } else { warn_log(AUTODETECT, "<address> not found"); } debug_log(AUTODETECT, "local address={%s}", connection.m_localIp.c_str()); if (Util::stricmp(mode, "active") == 0) { SettingsManager::getInstance()->set(SettingsManager::INCOMING_CONNECTIONS, SettingsManager::INCOMING_FIREWALL_NAT); debug_log(AUTODETECT, "setting ACTIVE mode"); } else if (Util::stricmp(mode, "passive") == 0) { SettingsManager::getInstance()->set(SettingsManager::INCOMING_CONNECTIONS, SettingsManager::INCOMING_FIREWALL_PASSIVE); } else { throw Exception("Wrong mode '" + mode + "'"); } } else { warn_log(AUTODETECT, "<mode> not found"); } } else { warn_log(AUTODETECT, "<response> not found"); } } catch (const Exception &e) { error_log(AUTODETECT, "Error parsing response: %s", e.getError().c_str()); } finalize(); }
void DetectNetworkSetupThread::wait() { for (int i = 0; i < 20; ++i) { if (isDone()) { debug_log(AUTODETECT, "*** Completed"); return; } Sleep(100); } warn_log(AUTODETECT, "*** Not completed in expected time"); }
int log::write_log(const char * msg, int len){ if(!m_file){ error_log("file is not open\n"); return -1; } time_t cur = time(NULL); struct tm tm_cur ; localtime_r(&cur, &tm_cur); int cur_size = (int)ftell(m_file); if(cur_size > m_max_size || m_logbegin.tm_mday != tm_cur.tm_mday){ fprintf(m_file, "file log %d-%d day end write %d/%d bytes\n", m_logbegin.tm_mday , tm_cur.tm_mday, cur_size, m_max_size); fclose(m_file); if(m_logbegin.tm_mday != tm_cur.tm_mday){ tm_cur.tm_hour = 24; tm_cur.tm_min = 0; tm_cur.tm_sec = 0; } char newfilename[max_path_len] = {0}; snprintf(newfilename ,sizeof(newfilename), "%s-%d%02d%02d-%02d%02d%02d.log", m_pathname, m_logbegin.tm_year+1900, m_logbegin.tm_mon+1, m_logbegin.tm_mday, tm_cur.tm_hour, tm_cur.tm_min, tm_cur.tm_sec); rename(m_filename, newfilename); if(open_log() < 0){ return -1; } } int ret = fwrite(msg, 1, len, m_file); if(ret < len){ warn_log("write %d/%d bytes error(%d)\n", ret, len, errno); } if(m_immediate_flush){ fflush(m_file); } return 0; }
int test_hello() { LOG *g = NULL ; char buffer[ 64 + 1 ] = "" ; long buflen = sizeof(buffer) - 1 ; g = create_log_handle() ; if( g == NULL ) { printf( "create log handle failed , errno[%d]\n" , errno ); return -1; } printf( "create log handle ok\n" ); set_log_output( g , LOG_OUTPUT_FILE , "$HOME$/log/test_hello.log" , LOG_NO_OUTPUTFUNC ); set_log_level( g , LOG_LEVEL_INFO ); set_log_styles( g , LOG_STYLES_HELLO , LOG_NO_STYLEFUNC ); debug_log( g , __FILE__ , __LINE__ , "hello DEBUG" ); info_log( g , __FILE__ , __LINE__ , "hello INFO" ); warn_log( g , __FILE__ , __LINE__ , "hello WARN" ); error_log( g , __FILE__ , __LINE__ , "hello ERROR" ); fatal_log( g , __FILE__ , __LINE__ , "hello FATAL" ); debug_hex_log( g , __FILE__ , __LINE__ , buffer , buflen , "buflen[%ld]" , buflen ); info_hex_log( g , __FILE__ , __LINE__ , buffer , buflen , "buflen[%ld]" , buflen ); warn_hex_log( g , __FILE__ , __LINE__ , buffer , buflen , "buflen[%ld]" , buflen ); error_hex_log( g , __FILE__ , __LINE__ , buffer , buflen , "buflen[%ld]" , buflen ); fatal_hex_log( g , __FILE__ , __LINE__ , buffer , buflen , "buflen[%ld]" , buflen ); destroy_log_handle( g ); printf( "destroy log handle\n" ); return 0; }
int listen_thread(struct server_conf *srv){ struct sockaddr_in server; struct sockaddr_in client; //struct con_stack *connections=NULL; int client_len; int newsock=-1; int sock; char logstr[1024]; server.sin_family=AF_INET; ///init server addr //struct con_stack *connections; sprintf(logstr,"listen thread create %u",pthread_self()); debug_log(logstr); connections=(struct con_stack*)malloc(sizeof(struct con_stack)); if(!connections){ error_log("malloc for connection stack error"); exit(-1); } debug_log("malloc for connection stack OK"); stack_init(connections); if(!srv->ip) server.sin_addr.s_addr=htonl(INADDR_ANY); else inet_pton(AF_INET,srv->ip,&server.sin_addr.s_addr); if(!srv->port) server.sin_port=htons(80); else server.sin_port=htons(srv->port); memset(server.sin_zero,0,8); if((sock=socket(AF_INET,SOCK_STREAM,0))<0){ error_log("create sock failed"); exit(-1); } debug_log("create sock sucessful"); //listen_sock=sock; if(bind(sock,(struct sockaddr*)&server,sizeof(server))<0){ error_log("bind sock error"); exit(-1); } debug_log("bind sock sucessful"); if(!srv->maxfds){ listen(sock,10); error_log("read server config maxfds error,listen 10"); } else{ listen(sock,srv->maxfds); debug_log("listen sucessful"); } while(1){ if((int)(connections->top)>128){ //printf("top is %d\n",connections->top); warn_log("listen stack > 128,sleep 1s"); sleep(1); continue; } if((newsock=accept(sock,(struct sockaddr*)&client,&client_len))<0){ sprintf(logstr,"accept error,accept sock %d",newsock); warn_log(logstr); continue; } sprintf(logstr,"accept OK,accept sock %d",newsock); warn_log(logstr); con_push(connections,newsock); } }