int main() { AHTTPRequestHeader request; AHTTPResponseHeader response; //a_Build request request.useUrl().parse(ASWNL("http://127.0.0.1/ping")); try { AFile_Socket socket; socket.open("127.0.0.1", 12345, true); request.toAFile(socket); response.fromAFile(socket); std::cout << "Response status: " << response.getStatusCode() << std::endl; } catch(AException& ex) { std::cerr << ex.what() << std::endl; } catch(...) { std::cerr << "Unknown exception" << std::endl; } return 0; }
int main(int argc, char **argv) { if (argc < 2) { std::cout << "Usage: this <url> <targetfile>\r\n"; std::cout << "\r\nExample: this http://localhost:8000/myrequest.jsp savefile.txt" << std::endl; return -1; } AFile_Socket socket; //a_Parse URL AHTTPRequestHeader requestHdr; requestHdr.useUrl().parse(argv[1]); AFile_Physical savefile(argv[2], "w"); AString hostAddr = g_ApplicationLibraryInstance.getIPFromAddress(requestHdr.useUrl().getServer()); requestHdr.setMethod("GET"); requestHdr.setPair("Host", hostAddr); requestHdr.setPair("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.6) Gecko/20040206 Firefox/0.8"); requestHdr.setPair("Accept", "application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1"); requestHdr.setPair("Accept-Language", "en-us,en;q=0.5"); requestHdr.setPair("Accept-Encoding", "gzip,deflate"); requestHdr.setPair("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7"); requestHdr.setPair("Accept", "*/*"); requestHdr.setPair("Connection", "close"); AString data(2048, 1024); try { //a_Send request socket.open(hostAddr, requestHdr.useUrl().getPort(), true); requestHdr.emit(socket); //a_Read response char c = '\x0'; while (socket.isNotEof()) { if (0 == socket.read(c)) AThread::sleep(20); else data.append(c); } socket.close(); data.debugDump(); savefile.write(data); savefile.close(); } catch(AException& e) { std::cout << e.what() << std::endl; } return 0; }
void AOSContextManager::adminEmitXml(AXmlElement& eBase, const AHTTPRequestHeader& request) { AOSAdminInterface::adminEmitXml(eBase, request); //a_Check if specific context is required AString contextId; if (request.getUrl().getParameterPairs().get(ASW("contextId",9), contextId)) { //a_Find the specific context { ALock lock(m_InUseSync); for (CONTEXT_INUSE::const_iterator cit = m_InUse.begin(); cit != m_InUse.end(); ++cit) { if (contextId == AString::fromPointer(*cit)) { adminAddProperty(eBase, ASW("contextDetail",7), *(*cit), AXmlElement::ENC_CDATADIRECT); return; } } } { ALock lock(m_ErrorHistory.useSync()); for (ABase *p = m_ErrorHistory.useTail(); p; p = p->usePrev()) { AOSContext *pContext = dynamic_cast<AOSContext *>(p); if (contextId == AString::fromPointer(pContext)) { adminAddProperty(eBase, ASW("contextDetail",7), *pContext, AXmlElement::ENC_CDATADIRECT); return; } } } { ALock lock(m_History.useSync()); for (ABase *p = m_History.useTail(); p; p = p->usePrev()) { AOSContext *pContext = dynamic_cast<AOSContext *>(p); if (contextId == AString::fromPointer(pContext)) { adminAddProperty(eBase, ASW("contextDetail",7), *pContext, AXmlElement::ENC_CDATADIRECT); return; } } } //a_Context no longer available adminAddError(eBase, ASWNL("AOSContext no longer available")); } else { //a_Display context summary for (size_t i=0; i < m_Queues.size(); ++i) { AOSContextQueueInterface *pQueue = m_Queues.at(i); if (pQueue) adminAddProperty(eBase, AString::fromSize_t(i), pQueue->getClass()); else adminAddProperty(eBase, AString::fromSize_t(i), AConstant::ASTRING_NULL); } adminAddPropertyWithAction( eBase, ASW("log_level",9), AString::fromInt(m_DefaultEventLogLevel), ASW("Update",6), ASWNL("Maximum event to log 0:Disabled 1:Error, 2:Event, 3:Warning, 4:Info, 5:Debug"), ASW("Set",3) ); { AString str; str.assign('['); str.append(AString::fromSize_t(m_History.size())); str.append('/'); str.append(AString::fromSize_t(m_HistoryMaxSize)); str.append(']'); AXmlElement& eHistory = eBase.addElement("object").addAttribute("name", "history"); adminAddPropertyWithAction(eHistory, ASWNL("max_size"), str, ASW("Set",3), ASWNL("Set maximum AOSContext history size (objects not immediately deleted)"), ASW("Set",3)); } adminAddPropertyWithAction( eBase, ASW("clear_history",13), AConstant::ASTRING_EMPTY, ASW("Clear",5), ASWNL("Clear context history: 0:all 1:history 2:error history"), ASW("Clear",5) ); { AString str; str.assign('['); str.append(AString::fromSize_t(m_ErrorHistory.size())); str.append('/'); str.append(AString::fromSize_t(m_ErrorHistoryMaxSize)); str.append(']'); AXmlElement& eErrorHistory = eBase.addElement("object").addAttribute("name", "error_history"); adminAddPropertyWithAction(eErrorHistory, ASWNL("max_size"), str, ASW("Set",3), ASWNL("Set maximum AOSContext error history size (objects not immediately deleted)"), ASW("Set",3)); } { AString str; str.assign('['); str.append(AString::fromSize_t(m_FreeStore.size())); str.append('/'); str.append(AString::fromSize_t(m_FreeStoreMaxSize)); str.append(']'); AXmlElement& eFreestore = eBase.addElement("object").addAttribute("name", "freestore"); adminAddPropertyWithAction(eFreestore, ASWNL("max_size"), str, ASW("Set",3), ASWNL("Set maximum AOSContext freestore size (objects not immediately deleted)"), ASW("Set",3)); } AXmlElement& eInUse = eBase.addElement("object"); eInUse.addAttribute("name", "InUse"); eInUse.addAttribute("size", AString::fromSize_t(m_InUse.size())); CONTEXT_INUSE::const_iterator citU = m_InUse.begin(); if (citU != m_InUse.end()) { ALock lock(m_InUseSync); while(citU != m_InUse.end()) { AXmlElement& eProp = adminAddProperty(eInUse, ASW("context",7), (*citU)->useEventVisitor(), AXmlElement::ENC_CDATADIRECT); eProp.addAttribute(ASW("errors",6), AString::fromSize_t((*citU)->useEventVisitor().getErrorCount())); eProp.addElement(ASW("url",3)).addData((*citU)->useEventVisitor().useName(), AXmlElement::ENC_CDATADIRECT); eProp.addElement(ASW("contextId",9)).addData(AString::fromPointer(*citU), AXmlElement::ENC_CDATADIRECT); ++citU; } } { AXmlElement& eHistory = eBase.addElement("object").addAttribute("name", "history"); ALock lock(m_History.useSync()); for (ABase *p = m_History.useTail(); p; p = p->usePrev()) { AOSContext *pContext = dynamic_cast<AOSContext *>(p); if (pContext) { AXmlElement& eProp = adminAddProperty(eHistory, ASW("context",7), pContext->useEventVisitor(), AXmlElement::ENC_CDATADIRECT); eProp.addAttribute(ASW("errors",6), AString::fromSize_t(pContext->useEventVisitor().getErrorCount())); eProp.addElement(ASW("url",3), pContext->useEventVisitor().useName(), AXmlElement::ENC_CDATADIRECT); eProp.addElement(ASW("contextId",3)).addData(AString::fromPointer(pContext), AXmlElement::ENC_CDATADIRECT); } else ATHROW(this, AException::InvalidObject); } } { AXmlElement& eErrorHistory = eBase.addElement("object").addAttribute("name", "error_history"); ALock lock(m_ErrorHistory.useSync()); for (ABase *p = m_ErrorHistory.useTail(); p; p = p->usePrev()) { AOSContext *pContext = dynamic_cast<AOSContext *>(p); if (pContext) { AXmlElement& eProp = adminAddProperty(eErrorHistory, ASW("context",7), pContext->useEventVisitor(), AXmlElement::ENC_CDATADIRECT); eProp.addAttribute(ASW("errors",6), AString::fromSize_t(pContext->useEventVisitor().getErrorCount())); eProp.addElement(ASW("url",3), pContext->useEventVisitor().useName(), AXmlElement::ENC_CDATADIRECT); eProp.addElement(ASW("contextId",3)).addData(AString::fromPointer(pContext), AXmlElement::ENC_CDATADIRECT); } else ATHROW(this, AException::InvalidObject); } } } }
void AOSContextManager::adminProcessAction(AXmlElement& eBase, const AHTTPRequestHeader& request) { AString str; if (request.getUrl().getParameterPairs().get(ASW("property",8), str)) { if (str.equals(ASWNL("AOSContextManager.log_level"))) { str.clear(); if (request.getUrl().getParameterPairs().get(ASW("Set",3), str)) { int level = str.toInt(); if (level >= AEventVisitor::EL_NONE && level <= AEventVisitor::EL_DEBUG) { m_DefaultEventLogLevel = level; } else { adminAddError(eBase, ASWNL("Invalid log level, must be (0-5)")); } } } else if (str.equals(ASWNL("AOSContextManager.clear_history"))) { str.clear(); if (request.getUrl().getParameterPairs().get(ASW("Clear",5), str)) { int level = str.toInt(); switch(level) { case 0: _clearHistory(); _clearErrorHistory(); break; case 1: _clearHistory(); break; case 2: _clearErrorHistory(); break; default: adminAddError(eBase, ASWNL("Invalid level for history clearing, must be (0,1,2)")); } } } else if (str.equals(ASWNL("AOSContextManager.history.max_size"))) { str.clear(); if (request.getUrl().getParameterPairs().get(ASW("Set",3), str)) { int i = str.toInt(); if (i >= 0) { m_HistoryMaxSize = i; } else { adminAddError(eBase, ASWNL("Invalid maximum size, must be >=0")); } } } else if (str.equals(ASWNL("AOSContextManager.error_history.max_size"))) { str.clear(); if (request.getUrl().getParameterPairs().get(ASW("Set",3), str)) { int i = str.toInt(); if (i >= 0) { m_ErrorHistoryMaxSize = i; } else { adminAddError(eBase, ASWNL("Invalid maximum size, must be >=0")); } } } else if (str.equals(ASWNL("AOSContextManager.freestore.max_size"))) { str.clear(); if (request.getUrl().getParameterPairs().get(ASW("Set",3), str)) { int i = str.toInt(); if (i >= 0) { m_FreeStoreMaxSize = i; } else { adminAddError(eBase, ASWNL("Invalid maximum size, must be >=0")); } } } } }