mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-04-01 12:03:08 +00:00
Added missing out param to GetHeader. Started making GET request async.
This commit is contained in:
parent
e30d8f477a
commit
411dd4b228
@ -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:
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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___ */
|
||||
|
Loading…
x
Reference in New Issue
Block a user