added some extern module stuff #ifdef'd zero

This commit is contained in:
valeski%netscape.com 1999-05-27 22:00:30 +00:00
Родитель 761ca912ae
Коммит a250f2cba4
1 изменённых файлов: 0 добавлений и 346 удалений

Просмотреть файл

@ -1,346 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "nsHttpProtocolConnection.h"
#include "nscore.h"
#include "nsIUrl.h"
#include "nsIHttpEventSink.h"
#include "nsIComponentManager.h"
#include "nsIServiceManager.h"
#include "nsISocketTransportService.h"
#include "nsHttpProtocolHandler.h"
#include "nsITransport.h"
#include "nsIByteBufferInputStream.h"
#include "nsCRT.h"
static NS_DEFINE_CID(kSocketTransportServiceCID, NS_SOCKETTRANSPORTSERVICE_CID);
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
////////////////////////////////////////////////////////////////////////////////
nsHttpProtocolConnection::nsHttpProtocolConnection()
: mHandler(nsnull), mUrl(nsnull), mEventSink(nsnull), mState(UNCONNECTED),
mEventQueue(nsnull)
{
}
nsHttpProtocolConnection::~nsHttpProtocolConnection()
{
NS_IF_RELEASE(mHandler);
NS_IF_RELEASE(mUrl);
NS_IF_RELEASE(mEventSink);
NS_IF_RELEASE(mEventQueue);
}
NS_IMPL_ADDREF(nsHttpProtocolConnection);
NS_IMPL_RELEASE(nsHttpProtocolConnection);
NS_IMETHODIMP
nsHttpProtocolConnection::QueryInterface(const nsIID& aIID, void** aInstancePtr)
{
NS_ASSERTION(aInstancePtr, "no instance pointer");
if (aIID.Equals(nsIHttpProtocolConnection::GetIID()) ||
aIID.Equals(nsIProtocolConnection::GetIID()) ||
aIID.Equals(kISupportsIID)) {
*aInstancePtr = NS_STATIC_CAST(nsIHttpProtocolConnection*, this);
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(nsIStreamListener::GetIID()) ||
aIID.Equals(nsIStreamObserver::GetIID())) {
*aInstancePtr = NS_STATIC_CAST(nsIStreamListener*, this);
NS_ADDREF_THIS();
return NS_OK;
}
return NS_NOINTERFACE;
}
nsresult
nsHttpProtocolConnection::Init(nsIUrl* url, nsISupports* eventSink,
nsHttpProtocolHandler* handler,
nsIEventQueue* eventQueue)
{
nsresult rv;
mHandler = handler;
NS_ADDREF(mHandler);
mUrl = url;
NS_ADDREF(mUrl);
rv = eventSink->QueryInterface(nsIHttpEventSink::GetIID(), (void**)&mEventSink);
if (NS_FAILED(rv)) return rv;
mEventQueue = eventQueue;
NS_IF_ADDREF(mEventQueue);
return rv;
}
////////////////////////////////////////////////////////////////////////////////
// nsICancelable methods:
NS_IMETHODIMP
nsHttpProtocolConnection::Cancel(void)
{
switch (mState) {
case CONNECTED:
break;
case POSTING:
break;
default:
return NS_ERROR_NOT_CONNECTED;
}
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsHttpProtocolConnection::Suspend(void)
{
switch (mState) {
case CONNECTED:
break;
case POSTING:
break;
default:
return NS_ERROR_NOT_CONNECTED;
}
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsHttpProtocolConnection::Resume(void)
{
switch (mState) {
case CONNECTED:
break;
case POSTING:
break;
default:
return NS_ERROR_NOT_CONNECTED;
}
return NS_ERROR_NOT_IMPLEMENTED;
}
////////////////////////////////////////////////////////////////////////////////
// nsIProtocolConnection methods:
NS_IMETHODIMP
nsHttpProtocolConnection::Open(void)
{
nsresult rv = NS_OK;
const char* host;
rv = mUrl->GetHost(&host);
if (NS_FAILED(rv)) return rv;
PRInt32 port;
rv = mUrl->GetPort(&port);
if (NS_FAILED(rv)) return rv;
rv = mHandler->GetTransport(host, port, &mTransport);
mState = CONNECTED;
return rv;
}
NS_IMETHODIMP
nsHttpProtocolConnection::GetContentType(char* *contentType)
{
if (mState != CONNECTED)
return NS_ERROR_NOT_CONNECTED;
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsHttpProtocolConnection::GetInputStream(nsIInputStream* *result)
{
if (mState != CONNECTED)
return NS_ERROR_NOT_CONNECTED;
return mTransport->OpenInputStream(result);
}
NS_IMETHODIMP
nsHttpProtocolConnection::GetOutputStream(nsIOutputStream* *result)
{
if (mState != CONNECTED)
return NS_ERROR_NOT_CONNECTED;
return mTransport->OpenOutputStream(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, char* *result)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsHttpProtocolConnection::AddHeader(const char* header, const char* value)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsHttpProtocolConnection::RemoveHeader(const char* header)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsHttpProtocolConnection::Get(void)
{
nsresult rv;
if (mState != CONNECTED)
return NS_ERROR_NOT_CONNECTED;
// build up the http request:
nsIByteBufferInputStream* in;
rv = NS_NewByteBufferInputStream(&in);
if (NS_FAILED(rv)) return rv;
rv = Write(in, "GET ", 4);
if (NS_FAILED(rv)) goto done;
const char* path;
rv = mUrl->GetPath(&path);
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;
// blank line to end the request
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;
}
NS_IMETHODIMP
nsHttpProtocolConnection::GetByteRange(PRUint32 from, PRUint32 to)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsHttpProtocolConnection::Put(void)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsHttpProtocolConnection::Post(void)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
////////////////////////////////////////////////////////////////////////////////
// nsIStreamObserver methods:
NS_IMETHODIMP
nsHttpProtocolConnection::OnStartBinding(nsISupports* context)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsHttpProtocolConnection::OnStopBinding(nsISupports* context,
nsresult aStatus,
nsIString* aMsg)
{
nsresult rv = NS_OK;
switch (mState) {
case CONNECTED:
if (NS_SUCCEEDED(aStatus)) {
// read the reply
mState = WAITING_REPLY;
rv = mTransport->AsyncRead(NS_STATIC_CAST(nsIProtocolConnection*, this),
mEventQueue, this);
if (NS_FAILED(rv)) return rv;
}
break;
case WAITING_REPLY:
// reply finished
// rv = mHandler->ReleaseTransport(mTransport);
// if (NS_FAILED(rv)) return rv;
mState = UNCONNECTED;
break;
default:
NS_NOTREACHED("bad state");
break;
}
return rv;
}
////////////////////////////////////////////////////////////////////////////////
// nsIStreamListener methods:
NS_IMETHODIMP
nsHttpProtocolConnection::OnDataAvailable(nsISupports* context,
nsIInputStream *aIStream,
PRUint32 aSourceOffset,
PRUint32 aLength)
{
nsresult rv = NS_OK;
switch (mState) {
case WAITING_REPLY:
// data coming in for our request
// XXX do some header parsing here
// mEventSink->OnProgress();
rv = mEventSink->OnDataAvailable(context, aIStream, aSourceOffset, aLength);
break;
default:
NS_NOTREACHED("bad state");
break;
}
return rv;
}
////////////////////////////////////////////////////////////////////////////////