Added missing out param to GetHeader. Started making GET request async.

This commit is contained in:
warren%netscape.com 1999-04-20 04:48:51 +00:00
parent e30d8f477a
commit 411dd4b228
3 changed files with 48 additions and 31 deletions

View File

@ -37,7 +37,8 @@ public:
////////////////////////////////////////////////////////////////////////////
// Things that can be done at any time:
NS_IMETHOD GetHeader(const char* header) = 0;
// free result with nsCRT::free
NS_IMETHOD GetHeader(const char* header, char* *result) = 0;
////////////////////////////////////////////////////////////////////////////
// Things done before connecting:

View File

@ -184,8 +184,20 @@ nsHttpProtocolConnection::GetOutputStream(nsIOutputStream* *result)
////////////////////////////////////////////////////////////////////////////////
// nsIHttpProtocolConnection methods:
static nsresult
Write(nsIByteBufferInputStream* in, const char* str,
PRInt32 len = -1)
{
if (len == -1)
len = nsCRT::strlen(str);
PRUint32 writeCnt;
nsresult rv = in->Fill(str, (PRUint32)len, &writeCnt);
NS_ASSERTION((PRInt32)writeCnt == len, "nsIByteBufferInputStream failed");
return rv;
}
NS_IMETHODIMP
nsHttpProtocolConnection::GetHeader(const char* header)
nsHttpProtocolConnection::GetHeader(const char* header, char* *result)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
@ -210,39 +222,31 @@ nsHttpProtocolConnection::Get(void)
if (mState != CONNECTED)
return NS_ERROR_NOT_CONNECTED;
// Write the http request to the server.
// Note: We're doing synchronous writes here because it's
// unlikely that our get request will fill the output
// stream's buffer and block.
nsIOutputStream* out;
rv = mTransport->OpenOutputStream(&out);
// build up the http request:
nsIByteBufferInputStream* in;
rv = NS_NewByteBufferInputStream(&in);
if (NS_FAILED(rv)) return rv;
PRUint32 written;
rv = out->Write("GET ", 4, &written);
if (NS_FAILED(rv)) return rv;
NS_ASSERTION(written == 4, "write failed");
rv = Write(in, "GET ", 4);
if (NS_FAILED(rv)) goto done;
const char* path;
rv = mUrl->GetPath(&path);
if (NS_FAILED(rv)) return rv;
PRUint32 pathLen = nsCRT::strlen(path);
rv = out->Write(path, pathLen, &written);
if (NS_FAILED(rv)) return rv;
NS_ASSERTION(written == pathLen, "write failed");
rv = out->Write(" HTTP/1.1", 9, &written);
if (NS_FAILED(rv)) return rv;
NS_ASSERTION(written == 9, "write failed");
rv = out->Flush();
if (NS_FAILED(rv)) return rv;
// start the state machine to read the response:
rv = mTransport->AsyncRead(NS_STATIC_CAST(nsIProtocolConnection*, this),
mEventQueue, this);
if (NS_FAILED(rv)) return rv;
if (NS_FAILED(rv)) goto done;
rv = Write(in, path);
if (NS_FAILED(rv)) goto done;
rv = Write(in, " ", 1);
if (NS_FAILED(rv)) goto done;
rv = Write(in, HTTP_DEFAULT_VERSION_STRING, HTTP_VERSION_STRING_LENGTH);
if (NS_FAILED(rv)) goto done;
rv = Write(in, CRLF, 2);
if (NS_FAILED(rv)) goto done;
// send it to the server:
rv = mTransport->AsyncWrite(in,
NS_STATIC_CAST(nsIProtocolConnection*, this),
mEventQueue, this);
done:
NS_RELEASE(in);
return rv;
}

View File

@ -46,7 +46,7 @@ public:
NS_IMETHOD GetOutputStream(nsIOutputStream* *result);
// nsIHttpProtocolConnection methods:
NS_IMETHOD GetHeader(const char* header);
NS_IMETHOD GetHeader(const char* header, char* *result);
NS_IMETHOD AddHeader(const char* header, const char* value);
NS_IMETHOD RemoveHeader(const char* header);
NS_IMETHOD Get(void);
@ -91,4 +91,16 @@ protected:
PLEventQueue* mEventQueue;
};
const char HTTP_VERSION_STRING_1_1[] = "HTTP/1.1";
const char HTTP_VERSION_STRING_1_0[] = "HTTP/1.0";
const PRUint32 HTTP_VERSION_STRING_LENGTH = 8;
#define HTTP_DEFAULT_VERSION_STRING HTTP_VERSION_STRING_1_1
enum nsHttpVersion {
nsHttpVersion_0_9,
nsHttpVersion_1_0,
nsHttpVersion_1_1
};
const nsHttpVersion kHttpDefaultVersion = nsHttpVersion_1_1;
#endif /* nsHttpProtocolConnection_h___ */