bool asnCertificate::isTimeValid(int numDaysFromNow) { time_t ti; struct tm mTime; time(&ti); #ifdef _WIN32 localtime_s(&mTime,&ti); #else localtime_r(&ti,&mTime); #endif mTime.tm_mday +=numDaysFromNow; time_t ttmp = mktime(&mTime); #ifdef _WIN32 localtime_s(&mTime,&ttmp); #else localtime_r(&ttmp,&mTime); #endif std::ostringstream buf; buf << std::setfill('0') << std::setw(2) << (mTime.tm_year - 100); buf << std::setfill('0') << std::setw(2) << (mTime.tm_mon + 1) ; buf << std::setfill('0') << std::setw(2) << mTime.tm_mday; string local = buf.str(),cer(13,'0'); copy(validityPeriod->contents[1]->body_start, validityPeriod->contents[1]->stop,cer.begin()); return cer > local; }
main() { Cerc *c[50]; Dreptunghi *d[50]; int n_c, n_d, i, x, y, r; clrscr(); cout<<"\n Numarul de cercuri : "; cin>>n_c; i= 0; while (i < n_c) { i++; cout<<" Coordonatele centrului cercului "<<i<<" : "; cin>>x>>y; cout<<" Raza cercului "<<i<<" : "; cin>>r; Cerc cer(x, y, r); c[i]= &cer; } (*c[0]).List(); return 0; }
void RunAsHttpSvr() { Poco::Logger& logger=this->logger(); logger.information("读取配置文件.."); unsigned short port = (unsigned short) config().getInt("HttpSvr.port", 9443); std::string format(config().getString("HttpSvr.format", DateTimeFormat::SORTABLE_FORMAT)); std::string pathCA(config().getString("openSSL.server.caConfig"));//openSSL.server.caConfig X509Certificate cer(pathCA); SecureServerSocket ssock(port); HTTPServerParams *prams=new HTTPServerParams(); prams->setKeepAlive(true); HTTPServer httpsrv(new RequestHandlerFactoryImpl(),ssock,prams); httpsrv.start(); Context::Ptr ctx=ssock.context(); ostringstream ms; ms<<"Https服务器已经启动\n"; ms<<"-----------------------------详细信息-----------------------------\n"; ms<<"监听端口:"<<port<<"\n"; ms<<"SSL验证模式:"<<ctx->verificationMode()<<"\n"; ms<<"颁发给:"<<cer.commonName()<<"\n"; ms<<"证书颁发者:"<<cer.issuerName()<<"\n"; ms<<"subjectName:"<<cer.subjectName()<<"\n"; ms<<"expiresOn:"<<DateTimeFormatter::format(cer.expiresOn(),"%Y-%n-%d %H-%M-%S")<<"\n"; ms<<"validFrom:"<<DateTimeFormatter::format(cer.validFrom(),"%Y-%n-%d %H-%M-%S")<<"\n"; ms<<"KeepAlive:"<<(prams->getKeepAlive() ? "是\n":"否\n"); ms<<"接收超时时间:"<<prams->getTimeout().totalSeconds()<<"s\n"; ms<<"KeepAliveTimeout:"<<prams->getKeepAliveTimeout().seconds()<<"s\n"; ms<<"启用会话缓存:"<<(ctx->sessionCacheEnabled() ? "是\n":"否\n"); ms<<"会话缓存大小:"<<ctx->getSessionCacheSize()<<"\n"; ms<<"会话超时时间:"<<ctx->getSessionTimeout()<<"s\n"; ms<<"------------------------------------------------------------------\n"; logger.information(ms.str()); this->waitForTerminationRequest(); httpsrv.stop(); }
void Packet_handler::operator()() { std::cout << "Packet handler has started\n"; try { while(*running_) { while(!inQueue_->empty()) { Packet *top = &inQueue_->front(); std::cout << "Handling packet with tag " << top->get_tag() << std::endl; switch(top->get_tag()) { case Packet::REGISTER_REQUEST: { // Handshake HandshakeRaw* hr(static_cast<HandshakeRaw*>((top->get_content()).get())); TcpServer::getInstance().connectedClients.register_client(top->get_address(), top->get_address()->connection, hr->nick_); } /*break;*/ case Packet::SYNCHRONISE_REQUEST: { // prosba o wyslanie wszystkich zasobow... ClientID s = TcpServer::getInstance().registeredAddresses.get_address_owner(*(top->get_address())); //pobiera id klienta o adresie zapisanym w pakiecie Observer* obs((TcpServer::getInstance().connectedClients.look_up_with_id(s).get())); //rzutowanie z ClientPtr na Observer* TcpServer::getInstance().connectedClients.synchronise(obs); //kolejno wywoływane metody synchronise u każdego z obserwatorów TcpServer::getInstance().registeredChat.synchronise(obs); TcpServer::getInstance().registeredRooms.synchronise(obs); } break; case Packet::CHAT_ENTRY_MESSAGE_REQUEST: { // prosba o nadanie wiadomosci czatu ChatEntryRaw* cer(static_cast<ChatEntryRaw*>((top->get_content()).get())); TcpServer::getInstance().registeredChat.register_message(*cer); } break; case Packet::GAMEROOM_CREATE_REQUEST: { // prosba o stworzenie nowego pokoju GameRoomRaw* gr(static_cast<GameRoomRaw*>((top->get_content()).get())); GameRoomPtr gpt = TcpServer::getInstance().registeredRooms.add_game_room(gr->host, gr->gameRoomName); // w metodzie add_gameroom() host jest automatycznie dodany do listy graczy } break; case Packet::GAMEROOM_JOIN_REQUEST: { // prosba o dolaczenie do pokoju GameRoomRaw* gr(static_cast<GameRoomRaw*>((top->get_content()).get())); GameRoomPtr gpt = TcpServer::getInstance().registeredRooms.look_up_with_id(gr->id); gpt->add_player(TcpServer::getInstance().registeredAddresses.get_address_owner(*(top->get_address()))); } break; case Packet::GAMEROOM_LEAVE_REQUEST: { // prosba o opuszczenie pokoju ClientID l = TcpServer::getInstance().registeredAddresses.get_address_owner(*(top->get_address())); GameRoomID gr = TcpServer::getInstance().connectedClients.get_state(l).locationIdentifier; GameRoomPtr gpt = TcpServer::getInstance().registeredRooms.look_up_with_id(gr); gpt->remove_player(l); } break; case Packet::LOG_OUT_REQUEST: { ClientID rm = TcpServer::getInstance().registeredAddresses.get_address_owner(*(top->get_address())); TcpServer::getInstance().connectedClients.remove_client(rm); // GameRoom, w którym był ten gracz, powinien być obserwatorem ClientsRegister, jeśli ma się dowiedzieć o jego wyjściu lub w ClientsRegister i metodzie remove_client powinno być zrobione zawiadomienie odpowiedniego gameroomu } //case Packet::GAMEROOM_UPDATE_REQUEST: // prosba o zmiane ustawien pokoju //case Packet::GAMEROOM_START_REQUEST: // prosba o rozpoczecie rozgrywki //case Packet::GAME_START_FAILURE_INFO: // informacja dla klienta o niespelnionym rzadaniu //case Packet::CLOCK_SYNCHRONISE: // prosba o okreslenie czasu wzgledem serwera //case Packet::GAME_STATE: // pakiet zawierajacy stan rozgrywki //case Packet::GAME_ACTION: // byc moze sie przyda? case Packet::KEEP_ALIVE: { // ping! do ustalenia czy ktos stracil polaczenie. std::cout << "Keeping alive client "; ClientID x=TcpServer::getInstance().registeredAddresses.get_address_owner(*(top->get_address())); std::cout << x << std::endl; } break; case Packet::UPDATED_RESOURCE: { // dane aktualizacyjne przeznaczone dla klienta // pokazuje na cout zawartość odebranego pakietu (tylko dla testów) std::cout << top->get_tag() << " " << top->show_resource_content() << std::endl; } break; default: std::cout << "Unexpected packet received. Tag: " << top->get_tag() << std::endl ; std::cout << top->get_data_streambuf() << std::endl; break; } inQueue_->pop(); } std::this_thread::yield(); } } catch(std::exception &e) { std::cout << "Exception at Packet_handler." << e.what() << "\n Packet Queue status:" << inQueue_->size() << " " << std::endl; } std::cout << "Packet handler has finished\n"; }