void
dynamic_1D(TestArg *arg)
{
    HttpEngine engine;
    HttpRequest request(arg->server, arg->uri, arg->proto);
    HttpResponse *response;
    char header[1024], value[1024];

    arg->returnVal = 0;

    memset(header, 'X', 1024);
    header[1024-1] = '\0';
    memset(value, 'Y', 1024);
    value[1024-1] = '\0';

    request.addHeader(header,value);
    request.setExpectDynamicBody();
    response = engine.makeRequest(request);

    if (response->getStatus() != 200) {
        Logger::logError(LOGERROR, "server responded with status code %d", response->getStatus());
        arg->returnVal = -1;
    }

    char *rvheader = response->getDynamicResponse().lookupValue("REQUEST HEADERS", header);
    if (!rvheader || strcmp(rvheader, value)) {
fprintf(stdout, "strlen(rvheader) is %d\n", strlen(rvheader));
fprintf(stdout, "strlen(header) is %d\n", strlen(header));
        Logger::logError(LOGERROR, "long header mismatch! (\"%s\")", rvheader);
        arg->returnVal = -1;
    }

    delete response;
}
void
dynamic_1B(TestArg *arg)
{
    char *uri;
    HttpEngine engine;
    HttpRequest *request;
    HttpResponse *response;

    arg->returnVal = 0;

    uri = (char *)malloc(sizeof(TEST_QUERY) + strlen(arg->uri) + 2);
    sprintf(uri, "%s?%s", arg->uri, TEST_QUERY);

    request = new HttpRequest(arg->server, uri, arg->proto);
    request->setExpectDynamicBody();
    response = engine.makeRequest(*request);

    if (response->getStatus() != 200) {
        Logger::logError(LOGERROR, "server responded with status code %d", response->getStatus());
        arg->returnVal = -1;
    }

    char *query = response->getDynamicResponse().lookupValue("BASIC", "queryString");
    if (!query || strcmp(query, TEST_QUERY)) {
        Logger::logError(LOGERROR, "query string mismatch! (\"%s\")", query);
        arg->returnVal = -1;
    }

    free(uri);
    delete request;
    delete response;
}
void
dynamic_1C(TestArg *arg)
{
    HttpEngine engine;
    HttpRequest request(arg->server, arg->uri, arg->proto);
    HttpResponse *response;

    arg->returnVal = 0;

    request.addHeader(HEADER1, VALUE1);
    request.addHeader(HEADER2, VALUE2);
    request.addHeader(HEADER3, VALUE3);
    request.addHeader(HEADER4, VALUE4);
    request.setExpectDynamicBody();
    response = engine.makeRequest(request);

    if (response->getStatus() != 200) {
        Logger::logError(LOGERROR, "server responded with status code %d", response->getStatus());
        arg->returnVal = -1;
    }

    char *header = response->getDynamicResponse().lookupValue("REQUEST HEADERS", HEADER1);
    if (!header || strcmp(header, VALUE1)) {
        Logger::logError(LOGERROR, "header1 mismatch! (\"%s\")", header);
        arg->returnVal = -1;
    }

    header = response->getDynamicResponse().lookupValue("REQUEST HEADERS", HEADER2);
    if (!header || strcmp(header, VALUE2)) {
        Logger::logError(LOGERROR, "header2 mismatch! (\"%s\")", header);
        arg->returnVal = -1;
    }

    header = response->getDynamicResponse().lookupValue("REQUEST HEADERS", HEADER3);
    if (!header || strcmp(header, VALUE3)) {
        Logger::logError(LOGERROR, "header3 mismatch! (\"%s\")", header);
        arg->returnVal = -1;
    }

    header = response->getDynamicResponse().lookupValue("REQUEST HEADERS", HEADER4);
    if (!header || strcmp(header, VALUE4)) {
        Logger::logError(LOGERROR, "header4 mismatch! (\"%s\")", header);
        arg->returnVal = -1;
    }

    delete response;
}