Changeset 2280
- Timestamp:
- 2001-04-04T22:37:36+12:00 (23 years ago)
- Location:
- trunk/gsdl/src/w32server
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gsdl/src/w32server/cgiwrapper.cpp
r2212 r2280 766 766 } 767 767 768 int ExamineURIStr( char *URIStr, RequestInfoT *RequestInfo,768 int ExamineURIStr(text_t &URIStr, RequestInfoT *RequestInfo, 769 769 RequestFieldsT *RequestFields) 770 770 { 771 771 char *protocol, *machine, *rest; int port; 772 char URICopyA[MAX_URL_SIZE], URICopyB[MAX_URL_SIZE];772 // char URICopyA[MAX_URL_SIZE], URICopyB[MAX_URL_SIZE]; 773 773 774 774 if (RequestFields->ContentLength > 0) { 775 775 // POST data 776 int len = strlen (URIStr); 776 URIStr.push_back('?'); 777 URIStr += (char*)RequestFields->Content; 778 779 // int len = strlen (URIStr); 777 780 // fail relatively gracefully (and mysteriously) if POST 778 781 // arguments are too long 779 if (len + RequestFields->ContentLength + 1 <= MAX_URL_SIZE) { 780 URIStr[len] = '?'; len ++; 781 for (int i = 0; i < RequestFields->ContentLength; i++) { 782 URIStr[len] = RequestFields->Content[i]; 783 len ++; 784 } 785 URIStr[len] = '\0'; 786 } else { 787 MessageBox (NULL, "POST data too long", "Greenstone Digital Library Software", MB_OK); 788 } 789 } 790 791 strcpy(URICopyA,URIStr); 782 // if (len + RequestFields->ContentLength + 1 <= MAX_URL_SIZE) { 783 // URIStr[len] = '?'; len ++; 784 // for (int i = 0; i < RequestFields->ContentLength; i++) { 785 // URIStr[len] = RequestFields->Content[i]; 786 // len ++; 787 // } 788 // URIStr[len] = '\0'; 789 // } else { 790 // MessageBox (NULL, "POST data too long", "Greenstone Digital Library Software", MB_OK); 791 // } 792 } 793 794 char *URICopyA = URIStr.getcstr(); 795 char URICopyB[MAX_URL_SIZE]; 796 char *URICopytmp = URIStr.getcstr(); 797 798 // strcpy(URICopyA,URIStr); 792 799 793 800 if (parse_url(URICopyA,&protocol,&machine,&port,&rest)!=http_ok) { 794 801 /* Alter local file request to address 'gsdl' */ 795 fix_prefix(URICopyB, "http://gsdl", URIStr); 802 // fix_prefix(URICopyB, "http://gsdl", URIStr); 803 fix_prefix(URICopyB, "http://gsdl", URICopytmp); 796 804 URIStr = URICopyB; 797 805 strcpy(URICopyA, URICopyB); -
trunk/gsdl/src/w32server/cgiwrapper.h
r1739 r2280 34 34 extern int libaccessnum; 35 35 36 int ExamineURIStr( char *URIStr,RequestInfoT *RequestInfo,36 int ExamineURIStr(text_t &URIStr,RequestInfoT *RequestInfo, 37 37 RequestFieldsT *RequestFields); 38 38 -
trunk/gsdl/src/w32server/httpreq.cpp
r1203 r2280 245 245 //No version, assume simple request 246 246 //part after method is URI 247 memcpy(RequestFields.URIStr, CurLine + End, strlen(CurLine) + 1 - End); 247 for (int i = 0; i < strlen(CurLine); i++) { 248 RequestFields.URIStr.push_back(CurLine[i]); 249 } 248 250 return GH_SIMPLE_REQUEST; 249 251 } … … 252 254 //<Method> <WhiteSpace> <URI> <WhiteSpace> <Version> <CRLF> 253 255 // End^ Start^ 254 int URIStrLen = Start - End;; 255 if (URIStrLen > ReqURIStrLen-1) URIStrLen = ReqURIStrLen - 1; 256 memcpy(RequestFields.URIStr, CurLine + End, URIStrLen); 257 RequestFields.URIStr[URIStrLen] = 0; 258 TrimRight(RequestFields.URIStr); //Remove trailing space 256 text_t spacebuffer; 257 for (int i = End; i < Start; i++) { 258 // do this to remove trailing space 259 if (CurLine[i] == ' ') { 260 spacebuffer.push_back(' '); 261 } else { 262 if (!spacebuffer.empty()) { 263 RequestFields.URIStr += spacebuffer; 264 spacebuffer.clear(); 265 } 266 RequestFields.URIStr.push_back(CurLine[i]); 267 } 268 } 259 269 260 270 //Only accept requests from HTTP/0.9 or HTTP/1.X clients, we'll -
trunk/gsdl/src/w32server/httpreq.h
r2038 r2280 3 3 4 4 #include "locate.h" 5 #include "text_t.h" 5 6 6 7 /* … … 43 44 //Length constants for RequestFieldsT 44 45 #define ReqMethodStrLen 24 45 #define ReqURIStrLen 25546 //#define ReqURIStrLen 255 46 47 #define ReqVersionStrLen 24 47 48 #define ReqDateStrLen 48 … … 69 70 70 71 struct RequestHeaderT { 71 72 73 72 char *Var; 73 char *Val; 74 }; 74 75 75 76 struct RequestFieldsT { 76 77 77 //Simple request line info v0.9 78 char MethodStr[ReqMethodStrLen]; 78 79 // char URIStr[ReqURIStrLen]; 79 char URIStr[MAX_URL_SIZE];80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 80 text_t URIStr; 81 //added v1.0 82 char VersionStr[ReqVersionStrLen]; 83 //General Header 84 char DateStr[ReqDateStrLen]; 85 char MIMEVerStr[ReqMIMEVerStrLen]; 86 char PragmaStr[ReqPragmaStrLen]; 87 //Request Header 88 char AuthorizationStr[ReqAuthorizationStrLen]; 89 char FromStr[ReqFromStrLen]; 90 char IfModSinceStr[ReqIfModSinceStrLen]; 91 char RefererStr[ReqRefererStrLen]; 92 char UserAgentStr[ReqUserAgentStrLen]; 93 //Entity Header (Only CGI stuff) 94 char ContentEncodingStr[ReqContentEncodingStrLen]; 95 char ContentTypeStr[ReqContentTypeStrLen]; 96 char ContentLengthStr[ReqContentLengthStrLen]; 97 //v1.0 Optional (the more common ones) 98 char AcceptStr[ReqAcceptStrLen]; 99 char AcceptLangStr[ReqAcceptLangStrLen]; 100 //v1.1 Exentions 101 char ConnectionStr[ReqConnectionStrLen]; 102 //Pointer to buffer containing the content 103 DWORD ContentLength; 104 BYTE *Content; 105 106 //Authorized user, filled in if a user is authorized from Auth..Str above 107 char AuthorizedUserStr[ReqAuthorizedUserStrLen]; 108 109 //CGI style fields 110 char PathInfoStr[ReqPathInfoStrLen]; 111 char PathTranslatedStr[ReqPathTranslatedStrLen]; 112 char ScriptNameStr[ReqScriptNameStrLen]; 113 114 //Other Headers 115 int NumOtherHeaders; 116 RequestHeaderT OtherHeaders[MAX_OTHER_HEADERS]; 117 }; 117 118 118 119 struct RequestInfoT { 119 120 121 122 123 124 125 126 127 128 129 130 131 132 120 int ThreadNum; 121 122 //Buffer for IO operations (so we're not constantly reallocating buffers) 123 BYTE *IOBuffer; 124 int IOBufferSize; 125 126 //Socket the request is on and its address 127 SOCKET ClientSocket; 128 SOCKADDR_IN ClientSockAddr; 129 int AddrLen; 130 131 //Should we keep the connection alive? 132 BOOL KeepAlive; 133 }; 133 134 134 135 -
trunk/gsdl/src/w32server/httpsend.cpp
r611 r2280 24 24 #include <memory.h> 25 25 #pragma hdrstop 26 #include "parse.h"27 26 #include "netio.h" 28 27 #include "httpreq.h"
Note:
See TracChangeset
for help on using the changeset viewer.