diff -r 000000000000 -r 6474c204b198 netwerk/test/TestSocketInput.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/netwerk/test/TestSocketInput.cpp Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,154 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include + +#ifdef WIN32 +#include +#endif + +#include "nscore.h" +#include "nsCOMPtr.h" +#include "nsISocketTransportService.h" +#include "nsIEventQueueService.h" +#include "nsIServiceManager.h" +#include "nsIComponentRegistrar.h" +#include "nsITransport.h" +#include "nsIRequest.h" +#include "nsIStreamListener.h" +#include "nsIInputStream.h" + +static NS_DEFINE_CID(kSocketTransportServiceCID, NS_SOCKETTRANSPORTSERVICE_CID); +static NS_DEFINE_CID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID); + +static int gKeepRunning = 1; + +class InputTestConsumer : public nsIStreamListener +{ +public: + + InputTestConsumer(); + virtual ~InputTestConsumer(); + + // ISupports interface... + NS_DECL_ISUPPORTS + + // IStreamListener interface... + NS_DECL_NSIREQUESTOBSERVER + NS_DECL_NSISTREAMLISTENER +}; + + +InputTestConsumer::InputTestConsumer() +{ +} + +InputTestConsumer::~InputTestConsumer() +{ +} + + +NS_IMPL_ISUPPORTS(InputTestConsumer, nsIRequestObserver, nsIStreamListener) + + +NS_IMETHODIMP +InputTestConsumer::OnStartRequest(nsIRequest *request, nsISupports* context) +{ + printf("+++ OnStartRequest +++\n"); + return NS_OK; +} + + +NS_IMETHODIMP +InputTestConsumer::OnDataAvailable(nsIRequest *request, + nsISupports* context, + nsIInputStream *aIStream, + uint64_t aSourceOffset, + uint32_t aLength) +{ + char buf[1025]; + while (aLength > 0) { + uint32_t amt; + aIStream->Read(buf, 1024, &amt); + if (amt == 0) break; + buf[amt] = '\0'; + printf(buf); + aLength -= amt; + } + + return NS_OK; +} + + +NS_IMETHODIMP +InputTestConsumer::OnStopRequest(nsIRequest *request, nsISupports* context, + nsresult aStatus) +{ + gKeepRunning = 0; + printf("+++ OnStopRequest status %x +++\n", aStatus); + return NS_OK; +} + + +int +main(int argc, char* argv[]) +{ + nsresult rv; + + if (argc < 2) { + printf("usage: %s \n", argv[0]); + return -1; + } + + int port; + char* hostName = argv[1]; +//nsString portString(argv[2]); + +//port = portString.ToInteger(&rv); + port = 13; + { + nsCOMPtr servMan; + NS_InitXPCOM2(getter_AddRefs(servMan), nullptr, nullptr); + nsCOMPtr registrar = do_QueryInterface(servMan); + NS_ASSERTION(registrar, "Null nsIComponentRegistrar"); + if (registrar) + registrar->AutoRegister(nullptr); + + // Create the Event Queue for this thread... + nsCOMPtr eventQService = + do_GetService(kEventQueueServiceCID, &rv); + if (NS_FAILED(rv)) return rv; + + nsCOMPtr eventQ; + rv = eventQService->GetThreadEventQueue(NS_CURRENT_THREAD, getter_AddRefs(eventQ)); + if (NS_FAILED(rv)) return rv; + + nsCOMPtr sts = + do_GetService(kSocketTransportServiceCID, &rv); + if (NS_FAILED(rv)) return rv; + + nsITransport* transport; + + rv = sts->CreateTransport(hostName, port, nullptr, 0, 0, &transport); + if (NS_SUCCEEDED(rv)) { + nsCOMPtr request; + transport->AsyncRead(new InputTestConsumer, nullptr, 0, -1, 0, getter_AddRefs(request)); + + NS_RELEASE(transport); + } + + // Enter the message pump to allow the URL load to proceed. + while ( gKeepRunning ) { + PLEvent *gEvent; + eventQ->WaitForEvent(&gEvent); + eventQ->HandleEvent(gEvent); + } + + } // this scopes the nsCOMPtrs + // no nsCOMPtrs are allowed to be alive when you call NS_ShutdownXPCOM + rv = NS_ShutdownXPCOM(nullptr); + NS_ASSERTION(NS_SUCCEEDED(rv), "NS_ShutdownXPCOM failed"); + return 0; +} +