Esempio n. 1
0
NS_IMETHODIMP
nsJSONListener::OnDataAvailable(nsIRequest *aRequest, nsISupports *aContext,
                                nsIInputStream *aStream,
                                uint64_t aOffset, uint32_t aLength)
{
  nsresult rv = NS_OK;

  if (mNeedsConverter && mSniffBuffer.Length() < 4) {
    uint32_t readCount = (aLength < 4) ? aLength : 4;
    rv = NS_ConsumeStream(aStream, readCount, mSniffBuffer);
    NS_ENSURE_SUCCESS(rv, rv);

    if (mSniffBuffer.Length() < 4)
      return NS_OK;
  }
  
  char buffer[JSON_STREAM_BUFSIZE];
  unsigned long bytesRemaining = aLength - mSniffBuffer.Length();
  while (bytesRemaining) {
    unsigned int bytesRead;
    rv = aStream->Read(buffer,
                       std::min((unsigned long)sizeof(buffer), bytesRemaining),
                       &bytesRead);
    NS_ENSURE_SUCCESS(rv, rv);
    rv = ProcessBytes(buffer, bytesRead);
    NS_ENSURE_SUCCESS(rv, rv);
    bytesRemaining -= bytesRead;
  }

  return rv;
}
Esempio n. 2
0
NS_IMETHODIMP
nsJSONListener::OnStopRequest(nsIRequest *aRequest, nsISupports *aContext,
                              nsresult aStatusCode)
{
  nsresult rv;

  // This can happen with short UTF-8 messages (<4 bytes)
  if (!mSniffBuffer.IsEmpty()) {
    // Just consume mSniffBuffer
    rv = ProcessBytes(nullptr, 0);
    NS_ENSURE_SUCCESS(rv, rv);
  }

  JS::RootedValue reviver(mCx, JS::NullValue()), value(mCx);

  JS::StableCharPtr chars(reinterpret_cast<const jschar*>(mBufferedChars.Elements()),
                          mBufferedChars.Length());
  JSBool ok = js::ParseJSONWithReviver(mCx, chars,
                                       (uint32_t) mBufferedChars.Length(),
                                       reviver, &value,
                                       mDecodingMode);

  *mRootVal = value;
  mBufferedChars.TruncateLength(0);
  return ok ? NS_OK : NS_ERROR_FAILURE;
}
Esempio n. 3
0
	void* ServerWaitMessages(void* networkManager)
	{

		CNetworkManager* nm = static_cast<CNetworkManager*>(networkManager);

		nm->ClientSocket = INVALID_SOCKET;

		// Accept a client socket
		nm->ClientSocket = accept(nm->ListenSocket, NULL, NULL);
		if (nm->ClientSocket == INVALID_SOCKET) {
			int i = WSAGetLastError();
			printf("accept failed: %d\n", i);
			closesocket(nm->ListenSocket);
			WSACleanup();
			return NULL;
		}


		char recvbuf[DEFAULT_BUFLEN];
		int recvbuflen = DEFAULT_BUFLEN;
		int iResult;

		// Receive until the peer shuts down the connection
		do {

			iResult = recv(nm->ClientSocket, recvbuf, recvbuflen, 0);
			if (iResult > 0) {
				ProcessBytes(recvbuf, iResult, nm);
			}
			else if (iResult == 0)
				printf("Connection closing...\n");
			else {
				printf("recv failed: %d\n", WSAGetLastError());
				closesocket(nm->ClientSocket);
				WSACleanup();
				return NULL;
			}

		} while (iResult > 0);

		return NULL;
	};
Esempio n. 4
0
NS_IMETHODIMP
nsJSONListener::OnStopRequest(nsIRequest *aRequest, nsISupports *aContext,
                              nsresult aStatusCode)
{
  nsresult rv;

  // This can happen with short UTF-8 messages
  if (!mSniffBuffer.IsEmpty()) {
    rv = ProcessBytes(mSniffBuffer.get(), mSniffBuffer.Length());
    NS_ENSURE_SUCCESS(rv, rv);
  }

  JSBool ok = JS_FinishJSONParse(mCx, mJSONParser, JSVAL_NULL);
  mJSONParser = nsnull;

  if (!ok)
    return NS_ERROR_FAILURE;

  return NS_OK;
}
Esempio n. 5
0
	void* ClientWaitMessages(void* networkManager)
	{
		CNetworkManager* nm = static_cast<CNetworkManager*>(networkManager);

		int recvbuflen = DEFAULT_BUFLEN;
		int iResult;
		char recvbuf[DEFAULT_BUFLEN];
		// Receive data until the server closes the connection
		do {
			iResult = recv(nm->ConnectSocket, recvbuf, recvbuflen, 0);
			if (iResult > 0)
			{
				ProcessBytes(recvbuf, iResult, nm);
			}
			else if (iResult == 0)
				printf("Connection closed\n");
			else
				printf("recv failed: %d\n", WSAGetLastError());
		} while (iResult > 0);

		return NULL;
	};
bool MonitorRTMPProtocol::SignalInputData(IOBuffer &buffer) {
	return ProcessBytes(buffer);
}