void __stdcall CWtlHtmlView::OnBeforeNavigate2 ( IDispatch* pDisp, VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers, VARIANT_BOOL* Cancel ) { std::string url ((LPCSTR) bstr_t(URL)); std::string data ((LPCSTR) bstr_t(PostData)); std::string hdrs ((LPCSTR) bstr_t(Headers)); // if(url._host == "localhost") // if(url.find("localhost") != std::string::npos ) // { std::vector<FcnLognotify> &listeners(listenerMap["Step"]); for(int i=0; i< listeners.size(); i++) listeners[i](url.c_str() ); } // Return TRUE to cancel *Cancel = VARIANT_TRUE; }
//--------------|--------------------------------------------- int main(int argc, char **argv) { int ret = 0; int opt; int timed = 0; char cmd[10240]; while (0 < (opt = getopt(argc, argv, "?c:dmp:s:tv-"))) { switch (opt) { case '?': help(); break; case 'c': hxcrash = atoi(optarg); break; case 'd': ++hxdebug; break; case 'm': mmode |= HX_MMAP; break; case 's': mmode |= HX_FSYNC; break; case 't': timed++; break; case 'v': ++verbose; break; } } argc -= optind; argv += optind; setvbuf(stdout, NULL, _IOLBF, 0); setvbuf(stderr, NULL, _IOLBF, 0); errno = 0; //setvbuf sets errno !? int size = 0; HXMODE mode; HXFILE *hp = NULL; FILE *fp = NULL; if (!*argv) die("See 'chx help' for usage"); if (*argv[0] == '?' || !strcmp(argv[0], "help")) help(); double tstart = tick(); if (hxdebug) hxtime = tstart; if (!strcmp(argv[0], "build")) { hp = do_hxopen("build", argv[1], HX_UPDATE); fp = do_fopen("build", argv[2], "r"); int memsize = argc > 3 ? atoi(argv[3]) : 1; int inpsize = argc > 4 ? atoi(argv[4]) : 0; memsize <<= 20; is_hxret("build", hxbuild(hp, fp, memsize, inpsize)); } else if (!strcmp(argv[0], "check")) { char *udata = argc > 3 ? argv[3] : NULL; if (argc < 2) die("%s: requires filename [pgsize [udata]]", argv[0]); if (argc > 2 && !sscanf(argv[2], "%d", &size)) die("%s: invalid pgsize", argv[2]); hp = do_hxopen("check", argv[1], HX_CHECK); mode = hxfix(hp, NULL, size, udata, udata ? strlen(udata) : 0); if (verbose || mode != HX_UPDATE) printf("%s %s\n", hxmode(mode), errno ? strerror(errno) : ""); ret = mode != HX_UPDATE; } else if (!strcmp(argv[0], "create")) { if (argc < 3 || !sscanf(argv[2], "%d", &size)) die("create: requires filename, pgsize, type"); char const *type = argv[3] ? argv[3] : ""; is_hxret("create", hxcreate(argv[1], 0644, size, type, strlen(type))); hp = do_hxopen("create", argv[1], HX_RECOVER); } else if (!strcmp(argv[0], "del")) { hp = do_hxopen("del", argv[1], HX_UPDATE); fp = do_fopen("del", argv[2], "r"); del(hp, fp); } else if (!strcmp(argv[0], "dump")) { hp = do_hxopen("dump", argv[1], HX_READ); dump(hp, stdout); } else if (!strcmp(argv[0], "fix") || !strcmp(argv[0], "repair")) { char *udata = argc > 3 ? argv[3] : NULL; if (argc < 2) die("%s: requires filename [pgsize [udata]]", argv[0]); if (argv[2] && !sscanf(argv[2], "%d", &size)) die("%s: invalid pgsize", argv[2]); hp = do_hxopen("repair", argv[1], HX_UPDATE); fp = tmpfile(); mode = hxfix(hp, fp, size, udata, udata ? strlen(udata) : 0); if (verbose || mode != HX_UPDATE) printf("%s %s\n", hxmode(mode), errno ? strerror(errno) : ""); ret = mode != HX_UPDATE; } else if (!strcmp(argv[0], "hdrs")) { hp = do_hxopen("hdrs", argv[1], HX_READ); fp = do_fopen("hdrs", argv[2], "w"); hdrs(hp); } else if (!strcmp(argv[0], "info")) { hp = do_hxopen("info", argv[1], HX_READ); info(hp); } else if (!strcmp(argv[0], "load")) { hp = do_hxopen("load", argv[1], HX_UPDATE); fp = do_fopen("hdrs", argv[2], "r"); do_load(hp, fp); } else if (!strcmp(argv[0], "lock")) { hp = do_hxopen("lock", argv[1], HX_READ); do_lock(hp); } else if (!strcmp(argv[0], "maps")) { hp = do_hxopen("maps", argv[1], HX_READ); is_hxret("maps", maps(hp)); } else if (!strcmp(argv[0], "pack")) { hp = do_hxopen("load", argv[1], HX_UPDATE); is_hxret("pack", hxpack(hp)); } else if (!strcmp(argv[0], "save")) { hp = do_hxopen("save", argv[1], HX_READ); fp = do_fopen("save", argv[2], "w"); do_save(hp, fp); } else if (!strcmp(argv[0], "shape")) { double density; if (argc != 3 || !sscanf(argv[2], "%lf", &density)) die("%s: requires density arg (0 to 1.0)", argv[2]); hp = do_hxopen("shape", argv[1], HX_UPDATE); is_hxret("shape", hxshape(hp, density)); } else if (!strcmp(argv[0], "stat")) { hp = do_hxopen("stat", argv[1], HX_READ); stats(hp); } else if (!strcmp(argv[0], "types")) { // for each dir in LD_LIBRARY_PATH (and "" -> ".") then /lib then /usr/lib, // find all files of the form "<dir>/hx_<rectype>.so" // and build a file of unique rectypes. // Then call hxlib which returns an exact path and a bitmask of DIFF/LOAD/TEST // "type diff-load-test path" // If the path matches, print the entry. types(getenv("LD_LIBRARY_PATH")); types("lib:/usr/lib"); } else { die("%s: unknown command. See 'chx help'", cmd); } if (fp) fclose(fp); if (hp) hxclose(hp); if (timed) fprintf(stderr, "# chx %s: %.3f secs\n", *argv, tick() - tstart); return ret; }
void __stdcall CWtlHtmlView::OnBeforeNavigate2 ( IDispatch* pDisp, VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers, VARIANT_BOOL* Cancel ) { std::string url ((LPCSTR) bstr_t(URL)); std::string data ((LPCSTR) bstr_t(PostData)); std::string hdrs ((LPCSTR) bstr_t(Headers)); // STEP if(url.find("localhost") != std::string::npos ) // { //std::vector<FcnLognotify> &listeners(listenerMap["Step"]); //for(int i=0; i< listeners.size(); i++) // listeners[i](url.c_str() ); _wndMain->cond.notify_all(); // have to run once from "STEP" } if(url.find("runhost") != std::string::npos ) // { std::string loop ; this->GetElementId("Loop",loop); _wndMain->jobs->Deadline() += (double) ConvertString<int>(loop, -1); //_wndMain->_nLoopCounter = _wndMain->jobs->Deadline() - _wndMain->jobs->TimeElapsed(); _wndMain->cond.notify_all(); // have to run once from "STEP" } if(url.find("deadlinehost") != std::string::npos ) // { std::string loop ; this->GetElementId("ContinueLoop",loop); _wndMain->jobs->Deadline() += (double) ConvertString<int>(loop, -1); _wndMain->cond.notify_all(); // have to run once from "STEP" } //Stop if(url.find("stophost") != std::string::npos ) // { _wndMain->_bStopped = true; _wndMain->cond.notify_all(); // in case, have to run once } //Pause if(url.find("pausehost") != std::string::npos ) // { _wndMain->_bPaused=true; } //Resume if(url.find("resumehost") != std::string::npos ) // { _wndMain->_bPaused=false; _wndMain->cond.notify_all(); // have to run once from "STEP" } if(url.find("snapshothost") != std::string::npos ) // { // _wndMain->_bSnapshot=true; Reporting::GenerateHtmlReport(_wndMain->jobs, ::ExeDirectory() + "Doc.html"); ::PostMessage(_wndMain->m_hWnd, DISPLAY_SNAPSHOT,0,0); ::Sleep(500); } if(url.find("unitshost") != std::string::npos ) // { _wndMain->_bMinutes=!_wndMain->_bMinutes; if(_wndMain->_bMinutes) _wndMain->_timeDivisor=60.0; else _wndMain->_timeDivisor=1.0; } if(url.find("KPIhost") != std::string::npos ) // { _wndMain->_bKPISnapshot=true; } if(url.find("ziphost") != std::string::npos ) // { _wndMain->_bZip=!_wndMain->_bZip; } if(url.find("finishhost") != std::string::npos ) // { _wndMain->_bFinish=!_wndMain->_bFinish; } for(int i=0; i< Factory.size() ; i++) { std::string name = Factory[i]->_statemachine->Name(); name = MakeLower(name); if(url.find(name) != std::string::npos ) { Reporting::GenerateResourceReport(i); ::PostMessage(_wndMain->m_hWnd, DISPLAY_RESOURCE,(WPARAM) i ,0); ::Sleep(500); } } // Return TRUE to cancel *Cancel = VARIANT_TRUE; }
HTTP_RESPONSE* resp_t::toHttpResponse(void) { // std::lock_guard< std::mutex > lck(m_mutex); HTTP_RESPONSE* resp(new HTTP_RESPONSE); HTTP_RESPONSE_HEADERS* hdrs(m_headers.getResponseHeaders()); std::string sc(getStatusString().toStdString()); //QString sc(getStatusString()); BYTE* buf(nullptr); HTTP_DATA_CHUNK* chunk(new HTTP_DATA_CHUNK); std::size_t len(m_body.size()); ::memset(resp, 0, sizeof(HTTP_RESPONSE)); resp->StatusCode = m_status; resp->pReason = new CHAR[sc.length() + 1]; ::memset((void*)resp->pReason, 0, sc.length() + 1); ::memcpy_s((void*)resp->pReason, sc.length() + 1, sc.c_str(), sc.length()); resp->ReasonLength = ::strlen(resp->pReason); if (INT_MAX <= len) throw std::runtime_error("http::resp_t::toHttpResponse(): Overly large HTTP response encountered"); buf = new BYTE[len + 1]; ::memset(buf, 0, len + 1); ::memcpy_s(buf, len + 1, m_body.constData(), len); chunk->DataChunkType = HTTP_DATA_CHUNK_TYPE::HttpDataChunkFromMemory; chunk->FromMemory.pBuffer = buf; chunk->FromMemory.BufferLength = len; resp->pEntityChunks = chunk; resp->EntityChunkCount = 1; if (nullptr != hdrs) { ::memcpy_s(resp->Headers.KnownHeaders, sizeof(resp->Headers.KnownHeaders), hdrs->KnownHeaders, sizeof(hdrs->KnownHeaders)); resp->Headers.pTrailers = hdrs->pTrailers; resp->Headers.TrailerCount = hdrs->TrailerCount; resp->Headers.UnknownHeaderCount = hdrs->UnknownHeaderCount; if (0 != hdrs->UnknownHeaderCount) { //USHORT l = hdrs->UnknownHeaderCount; //if (USHRT_MAX-1 < l) // throw std::runtime_error("http::resp_t::toHttpResponse(): Unusually large volume of unknown HTTP headers, aborting response."); //resp->Headers.pUnknownHeaders = new HTTP_UNKNOWN_HEADER[l+1]; /*for (auto idx = 0; idx < l; idx++) { resp->Headers.pUnknownHeaders[idx].NameLength = hdrs->pUnknownHeaders[idx].NameLength; resp->Headers.pUnknownHeaders[idx].RawValueLength = hdrs->pUnknownHeaders[idx].RawValueLength; resp->Headers.pUnknownHeaders[idx].pName = hdrs->pUnknownHeaders[idx].pName; */ resp->Headers.pUnknownHeaders = hdrs->pUnknownHeaders; //::memcpy_s(resp->Headers.pUnknownHeaders, (l+1)*sizeof(HTTP_UNKNOWN_HEADER), hdrs->pUnknownHeaders, l*sizeof(HTTP_UNKNOWN_HEADER)); } //m_headers.destroyResponseHeaders(hdrs); } //m_log.info("unknown headers count: " + QString::number(resp->Headers.UnknownHeaderCount) + " name: " + QString(resp->Headers.pUnknownHeaders[0].pName) + " value: " + QString(resp->Headers.pUnknownHeaders[0].pRawValue)); return resp; }