summaryrefslogtreecommitdiffstats
path: root/netwerk/test/TestSocketInput.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'netwerk/test/TestSocketInput.cpp')
-rw-r--r--netwerk/test/TestSocketInput.cpp154
1 files changed, 154 insertions, 0 deletions
diff --git a/netwerk/test/TestSocketInput.cpp b/netwerk/test/TestSocketInput.cpp
new file mode 100644
index 000000000..c3e58bd1e
--- /dev/null
+++ b/netwerk/test/TestSocketInput.cpp
@@ -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 <stdio.h>
+
+#ifdef WIN32
+#include <windows.h>
+#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 <host>\n", argv[0]);
+ return -1;
+ }
+
+ int port;
+ char* hostName = argv[1];
+//nsString portString(argv[2]);
+
+//port = portString.ToInteger(&rv);
+ port = 13;
+ {
+ nsCOMPtr<nsIServiceManager> servMan;
+ NS_InitXPCOM2(getter_AddRefs(servMan), nullptr, nullptr);
+ nsCOMPtr<nsIComponentRegistrar> registrar = do_QueryInterface(servMan);
+ NS_ASSERTION(registrar, "Null nsIComponentRegistrar");
+ if (registrar)
+ registrar->AutoRegister(nullptr);
+
+ // Create the Event Queue for this thread...
+ nsCOMPtr<nsIEventQueueService> eventQService =
+ do_GetService(kEventQueueServiceCID, &rv);
+ if (NS_FAILED(rv)) return rv;
+
+ nsCOMPtr<nsIEventQueue> eventQ;
+ rv = eventQService->GetThreadEventQueue(NS_CURRENT_THREAD, getter_AddRefs(eventQ));
+ if (NS_FAILED(rv)) return rv;
+
+ nsCOMPtr<nsISocketTransportService> 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<nsIRequest> 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;
+}
+