Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "HttpUpdateSM.h"
00025 #include "HttpDebugNames.h"
00026 #include "Diags.h"
00027 #include "ink_platform.h"
00028
00029 #define MAX_ACTIVE_REQUESTS 5
00030 #define MAX_TOTAL_REQUESTS 100
00031
00032 class UpTest:public Continuation
00033 {
00034 public:
00035 UpTest(FILE * f, ProxyMutex * amutex);
00036 int main_handler(int event, void *data);
00037 private:
00038 void make_requests();
00039 int active_req;
00040 #ifdef GO_AWAY
00041 int total_req;
00042 FILE *file;
00043 #endif
00044 };
00045
00046 UpTest::UpTest(FILE * , ProxyMutex * amutex)
00047 : Continuation(amutex), active_req(0)
00048 #ifdef GO_AWAY
00049 , total_req(0), file(f)
00050 #endif
00051 {
00052 SET_HANDLER(&UpTest::main_handler);
00053 }
00054
00055 void
00056 UpTest::make_requests()
00057 {
00058 ink_release_assert(0);
00059
00060 #ifdef GO_AWAY
00061 while (active_req < MAX_ACTIVE_REQUESTS && file != NULL && total_req < MAX_TOTAL_REQUESTS) {
00062
00063 char url_buf[2048];
00064 char req_buf[4096];
00065
00066 if (!fgets(url_buf, 2047, file)) {
00067 Note("[Http Update Tester] url file exhausted");
00068 fclose(file);
00069 file = NULL;
00070 return;
00071 }
00072 url_buf[strlen(url_buf) - 1] = '\0';
00073
00074 Debug("http_sch", "Firing off request for %s", url_buf);
00075
00076 sprintf(req_buf, "GET %s HTTP/1.0\r\nCache-Control: max-age=0\r\n\r\n", url_buf);
00077 const char *req = req_buf;
00078
00079 HTTPHdr test_req;
00080 HTTPParser http_parser;
00081 http_parser_init(&http_parser);
00082 test_req.create();
00083
00084 test_req.parse_req(&http_parser, &req, req + strlen(req), false);
00085 http_parser_clear(&http_parser);
00086
00087 HttpUpdateSM *current_reader = HttpUpdateSM::allocate();
00088 current_reader->init();
00089 Action *a = current_reader->start_scheduled_update(this, test_req);
00090 (void) a;
00091
00092 active_req++;
00093 total_req++;
00094 }
00095 #endif
00096 }
00097
00098 int
00099 UpTest::main_handler(int event, void * )
00100 {
00101 Debug("http_sch", "Received Event %s", HttpDebugNames::get_event_name(event));
00102
00103 if (event != EVENT_NONE && event != VC_EVENT_IMMEDIATE) {
00104 active_req--;
00105 }
00106
00107 make_requests();
00108
00109 return EVENT_DONE;
00110
00111 }
00112
00113 void
00114 init_http_update_test()
00115 {
00116
00117 FILE *f = fopen("urls", "r");
00118
00119 if (f == NULL) {
00120 Warning("[Http Update Tester] could not open URL file");
00121 return;
00122 }
00123
00124 UpTest *u = new UpTest(f, new_ProxyMutex());
00125 fclose(f);
00126 eventProcessor.schedule_imm(u);
00127 }