📄 ch05l06.txt
字号:
Listing 5.6 The server code that supports DGI.int ClientAgent :: LoadExt (const string &sModName, const string &sQuery, const string &sPathInfo, const string &sFormData){ APIRET rc; char szObjNameBuf [128]; HMODULE hModHandle; rc = DosLoadModule(szObjNameBuf, sizeof szObjNameBuf, sModName.c_str(), &hModHandle); if (rc != 0) { // load the module in memory TRACE(cerr<<"Unable to load "<<sModName<<" module [" <<rc<< "]" << endl;); return rc; }/* module loaded, resolve functions address */ PDGI_FN_START fnStart; PDGI_FN_DOACTION fnDoAction; PDGI_FN_END fnEnd; PFN pProcAddr; rc = DosQueryProcAddr(hModHandle, 1, 0, &pProcAddr); if (rc != 0) { TRACE (cerr<< "Error [" << rc << "] addressing Start function" << endl;); fnStart = 0; } else fnStart = (PDGI_FN_START) pProcAddr; rc = DosQueryProcAddr(hModHandle, 2, 0, &pProcAddr); if (rc != 0) { TRACE (cerr<<"Error [" << rc << "] addressing Action function" << endl;); fnDoAction = 0; } else fnDoAction = (PDGI_FN_DOACTION) pProcAddr; rc = DosQueryProcAddr(hModHandle, 3, 0, &pProcAddr); if (rc != 0) { TRACE (cerr << "Error [" << rc << "] addressing End function" << endl;); fnEnd = 0; } else fnEnd = (PDGI_FN_END) pProcAddr; TRACE(printf ("Start: %p\n", fnStart);); TRACE(printf ("Do: %p\n", fnDoAction);); TRACE(printf ("End: %p\n", fnEnd);); /* Invoke start function */ long retCode; if ((retCode = fnStart(putHtml, getData, (void *)this)) != 0) { TRACE (cerr << "Start OK" << endl;); // OK } else {TRACE (cerr << "Start in error" << endl;);}char szUrl [2560]; szUrl[0] = '\0'; if ((retCode = fnDoAction (sQuery.c_str(), sPathInfo.c_str(), sFormData.c_str(), szUrl ) ) != 0){ // OK TRACE (cerr << "DoAction OK" << endl;); } else { TRACE (cerr << "DoAction in error" << endl;); } if ((retCode = fnEnd()) != 0) { // OK TRACE (cerr << "End OK" << endl;); } else { TRACE (cerr << "End in error" << endl;); } DosFreeModule (hModHandle); // check if external module has rquested redirection if (strlen(szUrl)) { if (strstr(szUrl,"http:")) { char msg [512]; fprintf (stderr, "Returning 301 ERROR\n"); sprintf (msg, "HTTP/1.0 301 \"HTTPD/2 Server\"\r\n" "Server: A.Montefusco 3.0 -- on OS/2 2.x+\r\n" "Location: %s\r\n\r\n", szUrl); pCn->Send (msg, strlen(msg)); } else print (string(szUrl), TYPE_HTML); } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -