W3C home > Mailing lists > Public > www-lib@w3.org > April to June 2000

[Fwd: Program hang after getting 401 Unauthorized status]

From: Warren Ho <warrenh@algorithmics.com>
Date: Fri, 23 Jun 2000 17:56:05 -0400
Message-ID: <3953DCF5.3C54E24F@algorithmics.com>
To: "www-lib@w3.org" <www-lib@w3.org>
Here is the terminate handler and the calling function:

int
HRWWWTransferInterfaceImpl::terminateCB(
    HTRequest * request,
    HTResponse * response,
    void * param,
    int status)
{

    HRWWWTransferInterfaceImpl* pThis = (HRWWWTransferInterfaceImpl *)
HTRequest
_context(request);
    // the status/100 == 2 trick was in the libwww sample; I assume it
means
    // that all 200-series error codes are "good", while all others are
"bad"
    pThis->i_errStatus = (status/100 == 2) ? HRERR_OK :
HRERR_HTTP_TRANSFER;
    HTEventList_stopLoop();
    return HT_OK;
}

HRError
HRWWWTransferInterfaceImpl::getFile(
    const RWCString & strURL,
    const RWCString & strOutputFilename,
    HRProgressMonitor *pProgress /* = NULL */)
{
    // Request init
    HTRequest * request = HTRequest_new();
    if (request == NULL)
        return HRERR_WWW_NO_SERVER;

    HTRequest_setOutputFormat(request, DEFAULT_FORMAT);
    HTRequest_setContext (request, (void*)this);

    // If we crap out before calling the terminate callback with a
successful
    // load, we want some sort of general failure
    i_pProgress = pProgress;

    // If we crap out before calling the terminate callback with a
successful
    // load, we want some sort of general failure
    i_pProgress = pProgress;

    HTParentAnchor * anchor = (HTParentAnchor *)
HTAnchor_findAddress(strURL);
    FILE * outputFile = fopen(strOutputFilename, "wb");
    if (outputFile == NULL)
    {
        HTRequest_delete(request);
        HRError errStatus = HRERR_CANT_OPEN_FILE;
        errStatus << strOutputFilename;
        errStatus.logError();
        return errStatus;
    }
    HTRequest_setOutputStream(request, HTFWriter_new(request,
outputFile, YES));
    int status = HTLoadAnchor((HTAnchor *) anchor, request);
    if (status != YES)
    {
        HTRequest_delete(request);
        HRSystem::getSystem().deleteFile(strOutputFilename);
        HRError errStatus = HRERR_WWW_NO_SERVER;
        errStatus.logError();
        return errStatus;
    }

    // Go into the event loop...
    HTEventList_loop(request);

    HTEventList_unregisterAll();
    HTRequest_delete(request);
    fclose(outputFile);

    HRError err = getStatus();
    if (err.bad())
    {
        HRSystem::getSystem().deleteFile(strOutputFilename);
        err = HRERR_HTTP_TRANSFER;
        err << strURL;
        err.logError();
        return err;
    }
    return HRERR_OK;
}





--
Warren Ho                                       Algorithmics Inc.
Software Engineer                               185 Spadina Avenue
email: warrenh@algorithmics.com                 Toronto, Ontario
phone: (416)-217-4353                           Canada   M5T 2C6



attached mail follows:


Would anyone help me out with this problem?

I tried to download a file from a server which requires access
authentication using http protocol.  My program works fine if I download
it from a server which does not require authentication.  However when I
tried to do it from a server which requires one, the program receive the
following traces and hangs:

Thread Id - 1: libwww trace: "Net After... calling 6c604c (request
c575d0, response c4fb50, status -1, context 0)
"
Thread Id - 1: libwww output: "Fatal Error: 401 Unauthorized
"
Thread Id - 1: libwww trace: "Load End.... Request ended with code -1
"
Thread Id - 1: libwww trace: "Net After... calling 1658c8 (request
c575d0, response c4fb50, status -1, context 0)
"

It seems the program is able to complete the terminate handler, but it
doesn't know how to return to the function that specifies the terminate
callback.  I am trying to return the status back to the GUI, so I don't
want to exit the program in the terminate handler.

Any help would be greatly appreciated.

Thanks,
Warren

--
Warren Ho                                       Algorithmics Inc.
Software Engineer                               185 Spadina Avenue
email: warrenh@algorithmics.com                 Toronto, Ontario
phone: (416)-217-4353                           Canada   M5T 2C6
Received on Friday, 23 June 2000 17:56:12 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 23 April 2007 18:18:36 GMT