Esempio n. 1
0
void RequestHandler::handle_retry_decision(ResponseMessage* response,
                                           const RetryPolicy::RetryDecision& decision) {
  ErrorResponse* error =
      static_cast<ErrorResponse*>(response->response_body().get());

  switch(decision.type()) {
    case RetryPolicy::RetryDecision::RETURN_ERROR:
      set_error_with_error_response(response->response_body(),
                                    static_cast<CassError>(CASS_ERROR(
                                                             CASS_ERROR_SOURCE_SERVER, error->code())),
                                    error->message().to_string());
      break;

    case RetryPolicy::RetryDecision::RETRY:
      set_consistency(decision.retry_consistency());
      if (!decision.retry_current_host()) {
        next_host();
      }
      if (state() == REQUEST_STATE_DONE) {
        retry();
      } else {
        set_state(REQUEST_STATE_RETRY_WRITE_OUTSTANDING);
      }
      break;

    case RetryPolicy::RetryDecision::IGNORE:
      set_response(SharedRefPtr<Response>(new ResultResponse()));
      break;
  }
  num_retries_++;
}
Esempio n. 2
0
bool
DeviceStorageRequestChild::Recv__delete__(const DeviceStorageResponseValue& aValue)
{
    if (mCallback) {
        mCallback->RequestComplete();
        mCallback = nullptr;
    }

    switch (aValue.type()) {

    case DeviceStorageResponseValue::TErrorResponse:
    {
        ErrorResponse r = aValue;
        mRequest->FireError(r.error());
        break;
    }

    case DeviceStorageResponseValue::TSuccessResponse:
    {
        jsval result = StringToJsval(mRequest->GetOwner(), mFile->mPath);
        mRequest->FireSuccess(result);
        break;
    }

    case DeviceStorageResponseValue::TBlobResponse:
    {
        BlobResponse r = aValue;
        BlobChild* actor = static_cast<BlobChild*>(r.blobChild());
        nsCOMPtr<nsIDOMBlob> blob = actor->GetBlob();

        nsCOMPtr<nsIDOMFile> file = do_QueryInterface(blob);
        jsval result = InterfaceToJsval(mRequest->GetOwner(), file, &NS_GET_IID(nsIDOMFile));
        mRequest->FireSuccess(result);
        break;
    }

    case DeviceStorageResponseValue::TFreeSpaceStorageResponse:
    {
        FreeSpaceStorageResponse r = aValue;
        jsval result = JS_NumberValue(double(r.freeBytes()));
        mRequest->FireSuccess(result);
        break;
    }

    case DeviceStorageResponseValue::TUsedSpaceStorageResponse:
    {
        UsedSpaceStorageResponse r = aValue;
        jsval result = JS_NumberValue(double(r.usedBytes()));
        mRequest->FireSuccess(result);
        break;
    }

    case DeviceStorageResponseValue::TAvailableStorageResponse:
    {
        AvailableStorageResponse r = aValue;
        jsval result = StringToJsval(mRequest->GetOwner(), r.mountState());
        mRequest->FireSuccess(result);
        break;
    }

    case DeviceStorageResponseValue::TEnumerationResponse:
    {
        EnumerationResponse r = aValue;
        nsDOMDeviceStorageCursor* cursor = static_cast<nsDOMDeviceStorageCursor*>(mRequest.get());

        uint32_t count = r.paths().Length();
        for (uint32_t i = 0; i < count; i++) {
            nsCOMPtr<nsIFile> f;
            nsresult rv = NS_NewLocalFile(r.paths()[i].fullpath(), false, getter_AddRefs(f));
            if (NS_FAILED(rv)) {
                continue;
            }

            nsRefPtr<DeviceStorageFile> dsf = new DeviceStorageFile(r.paths()[i].type(), f);
            dsf->SetPath(r.paths()[i].name());
            cursor->mFiles.AppendElement(dsf);
        }

        nsCOMPtr<ContinueCursorEvent> event = new ContinueCursorEvent(cursor);
        event->Continue();
        break;
    }

    default:
    {
        NS_RUNTIMEABORT("not reached");
        break;
    }
    }
    return true;
}
bool
DeviceStorageRequestChild::
  Recv__delete__(const DeviceStorageResponseValue& aValue)
{
  if (mCallback) {
    mCallback->RequestComplete();
    mCallback = nullptr;
  }

  nsCOMPtr<nsPIDOMWindow> window = mRequest->GetOwner();
  if (!window) {
    return true;
  }

  switch (aValue.type()) {

    case DeviceStorageResponseValue::TErrorResponse:
    {
      ErrorResponse r = aValue;
      mRequest->FireError(r.error());
      break;
    }

    case DeviceStorageResponseValue::TSuccessResponse:
    {
      nsString fullPath;
      mDSFile->GetFullPath(fullPath);
      AutoJSContext cx;
      JS::Rooted<JS::Value> result(cx);
      StringToJsval(window, fullPath, &result);
      mRequest->FireSuccess(result);
      break;
    }

    case DeviceStorageResponseValue::TFileDescriptorResponse:
    {
      FileDescriptorResponse r = aValue;

      nsString fullPath;
      mDSFile->GetFullPath(fullPath);
      AutoJSContext cx;
      JS::Rooted<JS::Value> result(cx);
      StringToJsval(window, fullPath, &result);

      mDSFileDescriptor->mDSFile = mDSFile;
      mDSFileDescriptor->mFileDescriptor = r.fileDescriptor();
      mRequest->FireSuccess(result);
      break;
    }

    case DeviceStorageResponseValue::TBlobResponse:
    {
      BlobResponse r = aValue;
      BlobChild* actor = static_cast<BlobChild*>(r.blobChild());
      nsRefPtr<BlobImpl> bloblImpl = actor->GetBlobImpl();
      nsRefPtr<Blob> blob = Blob::Create(mRequest->GetParentObject(),
                                         bloblImpl);

      AutoJSContext cx;

      JS::Rooted<JSObject*> obj(cx, blob->WrapObject(cx, JS::NullPtr()));
      MOZ_ASSERT(obj);

      JS::Rooted<JS::Value> result(cx, JS::ObjectValue(*obj));
      mRequest->FireSuccess(result);
      break;
    }

    case DeviceStorageResponseValue::TFreeSpaceStorageResponse:
    {
      FreeSpaceStorageResponse r = aValue;
      AutoJSContext cx;
      JS::Rooted<JS::Value> result(cx, JS_NumberValue(double(r.freeBytes())));
      mRequest->FireSuccess(result);
      break;
    }

    case DeviceStorageResponseValue::TUsedSpaceStorageResponse:
    {
      UsedSpaceStorageResponse r = aValue;
      AutoJSContext cx;
      JS::Rooted<JS::Value> result(cx, JS_NumberValue(double(r.usedBytes())));
      mRequest->FireSuccess(result);
      break;
    }

    case DeviceStorageResponseValue::TAvailableStorageResponse:
    {
      AvailableStorageResponse r = aValue;
      AutoJSContext cx;
      JS::Rooted<JS::Value> result(cx);
      StringToJsval(window, r.mountState(), &result);
      mRequest->FireSuccess(result);
      break;
    }

    case DeviceStorageResponseValue::TStorageStatusResponse:
    {
      StorageStatusResponse r = aValue;
      AutoJSContext cx;
      JS::Rooted<JS::Value> result(cx);
      StringToJsval(window, r.storageStatus(), &result);
      mRequest->FireSuccess(result);
      break;
    }

    case DeviceStorageResponseValue::TFormatStorageResponse:
    {
      FormatStorageResponse r = aValue;
      AutoJSContext cx;
      JS::Rooted<JS::Value> result(cx);
      StringToJsval(window, r.mountState(), &result);
      mRequest->FireSuccess(result);
      break;
    }

    case DeviceStorageResponseValue::TMountStorageResponse:
    {
      MountStorageResponse r = aValue;
      AutoJSContext cx;
      JS::Rooted<JS::Value> result(cx);
      StringToJsval(window, r.storageStatus(), &result);
      mRequest->FireSuccess(result);
      break;
    }

    case DeviceStorageResponseValue::TUnmountStorageResponse:
    {
      UnmountStorageResponse r = aValue;
      AutoJSContext cx;
      JS::Rooted<JS::Value> result(cx);
      StringToJsval(window, r.storageStatus(), &result);
      mRequest->FireSuccess(result);
      break;
    }

    case DeviceStorageResponseValue::TEnumerationResponse:
    {
      EnumerationResponse r = aValue;
      nsDOMDeviceStorageCursor* cursor
        = static_cast<nsDOMDeviceStorageCursor*>(mRequest.get());

      uint32_t count = r.paths().Length();
      for (uint32_t i = 0; i < count; i++) {
        nsRefPtr<DeviceStorageFile> dsf
          = new DeviceStorageFile(r.type(), r.paths()[i].storageName(),
                                  r.rootdir(), r.paths()[i].name());
        cursor->mFiles.AppendElement(dsf);
      }

      nsRefPtr<ContinueCursorEvent> event = new ContinueCursorEvent(cursor);
      event->Continue();
      break;
    }

    default:
    {
      NS_RUNTIMEABORT("not reached");
      break;
    }
  }
  return true;
}
Esempio n. 4
0
bool EVEPacketDispatcher::DispatchPacket( PyPacket* packet )
{
    switch( packet->type )
    {
        case AUTHENTICATION_REQ:
        {
            //check the string part, just for good measure
            if( packet->type_string != "macho.AuthenticationReq" )
            {
                sLog.Error("EVEPacketDispatcher","Received AUTHENTICATION_RSP with invalid type string '%s'", packet->type_string.c_str());
                return false;
            }

            AuthenticationReq req;
            if( !req.Decode( packet->payload ) )
            {
                sLog.Error("EVEPacketDispatcher","Failed to decode AuthenticationReq");
                return false;
            }

            return Handle_AuthenticationReq( packet, req );
        }

        case AUTHENTICATION_RSP:
        {
            //check the string part, just for good measure
            if( packet->type_string != "macho.AuthenticationRsp" )
            {
                sLog.Error("EVEPacketDispatcher","Received AUTHENTICATION_RSP with invalid type string '%s'", packet->type_string.c_str());
                return false;
            }

            AuthenticationRsp rsp;
            if( !rsp.Decode( packet->payload ) )
            {
                sLog.Error("EVEPacketDispatcher","Failed to decode AuthenticationRsp");
                return false;
            }

            return Handle_AuthenticationRsp( packet, rsp );
        }

        case CALL_REQ:
        {
            //check the string part, just for good measure
            if( packet->type_string != "macho.CallReq" )
            {
                sLog.Error("EVEPacketDispatcher","Received CALL_REQ with invalid type string '%s'", packet->type_string.c_str());
                return false;
            }

            PyCallStream call;
            if( !call.Decode( packet->type_string, packet->payload ))
            {
                sLog.Error("EVEPacketDispatcher","Failed to convert packet into a call stream");
                return false;
            }

            return Handle_CallReq( packet, call );
        }

        case CALL_RSP:
        {
            //check the string part, just for good measure
            if( packet->type_string != "macho.CallRsp" )
            {
                sLog.Error("EVEPacketDispatcher","Received CALL_RSP with invalid type string '%s'", packet->type_string.c_str());
                return false;
            }

            //TODO: decode substream in tuple

            return Handle_CallRsp( packet );
        } break;

        case NOTIFICATION:
        {
            //check the string part, just for good measure
            if( packet->type_string != "macho.Notification" )
            {
                sLog.Error("EVEPacketDispatcher","Received NOTIFICATION with invalid type string '%s'", packet->type_string.c_str());
                return false;
            }

            return Handle_Notify( packet );
        }

        case ERRORRESPONSE:
        {
            //check the string part, just for good measure
            if( packet->type_string != "macho.ErrorResponse" )
            {
                sLog.Error("EVEPacketDispatcher","Received ERRORRESPONSE with invalid type string '%s'", packet->type_string.c_str());
                return false;
            }

            ErrorResponse error;
            if( !error.Decode( packet->payload ) )
            {
                sLog.Error("EVEPacketDispatcher","Failed to decode Error Response");
                return false;
            }

            return Handle_ErrorResponse( packet, error );
        }

        case SESSIONCHANGENOTIFICATION:
        {
            //check the string part, just for good measure
            if( packet->type_string != "macho.SessionChangeNotification" )
            {
                sLog.Error("EVEPacketDispatcher","Received SESSIONCHANGENOTIFICATION with invalid type string '%s'", packet->type_string.c_str());
                return false;
            }

            SessionChangeNotification sessionChange;
            if( !sessionChange.Decode( packet->payload ) )
            {
                sLog.Error("EVEPacketDispatcher","Failed to decode session change notification");
                return false;
            }

            return Handle_SessionChange( packet, sessionChange );
        }

        case PING_REQ:
        {
            //check the string part, just for good measure
            if( packet->type_string != "macho.PingReq" )
            {
                sLog.Error("EVEPacketDispatcher","Received PING_REQ with invalid type string '%s'", packet->type_string.c_str());
                return false;
            }

            return Handle_PingReq( packet );
        }

        case PING_RSP:
        {
            //check the string part, just for good measure
            if( packet->type_string != "macho.PingRsp" )
            {
                sLog.Error("EVEPacketDispatcher","Received PING_RSP with invalid type string '%s'", packet->type_string.c_str());
                return false;
            }

            return Handle_PingRsp( packet );
        }

        default:
        {
            return Handle_Other( packet );
        }
    }
}
bool
DeviceStorageRequestChild::Recv__delete__(const DeviceStorageResponseValue& aValue)
{
  switch (aValue.type()) {

    case DeviceStorageResponseValue::TErrorResponse:
    {
      ErrorResponse r = aValue;
      mRequest->FireError(r.error());
      break;
    }

    case DeviceStorageResponseValue::TSuccessResponse:
    {
      jsval result = StringToJsval(mRequest->GetOwner(), mFile->mPath);
      mRequest->FireSuccess(result);
      break;
    }

    case DeviceStorageResponseValue::TBlobResponse:
    {
      BlobResponse r = aValue;
      BlobChild* actor = static_cast<BlobChild*>(r.blobChild());
      nsCOMPtr<nsIDOMBlob> blob = actor->GetBlob();

      jsval result = InterfaceToJsval(mRequest->GetOwner(), blob, &NS_GET_IID(nsIDOMBlob));
      mRequest->FireSuccess(result);
      break;
    }

    case DeviceStorageResponseValue::TStatStorageResponse:
    {
      StatStorageResponse r = aValue;

      nsRefPtr<nsIDOMDeviceStorageStat> domstat = new nsDOMDeviceStorageStat(r.freeBytes(), r.totalBytes(), r.mountState());
      jsval result = InterfaceToJsval(mRequest->GetOwner(), domstat, &NS_GET_IID(nsIDOMDeviceStorageStat));
      mRequest->FireSuccess(result);
      break;
    }

    case DeviceStorageResponseValue::TEnumerationResponse:
    {
      EnumerationResponse r = aValue;
      nsDOMDeviceStorageCursor* cursor = static_cast<nsDOMDeviceStorageCursor*>(mRequest.get());

      uint32_t count = r.paths().Length();
      for (uint32_t i = 0; i < count; i++) {
        nsCOMPtr<nsIFile> f;
        nsresult rv = NS_NewLocalFile(r.paths()[i].fullpath(), false, getter_AddRefs(f));
        if (NS_FAILED(rv)) {
          continue;
        }

        nsRefPtr<DeviceStorageFile> dsf = new DeviceStorageFile(r.paths()[i].type(), f);
        dsf->SetPath(r.paths()[i].name());
        cursor->mFiles.AppendElement(dsf);
      }

      nsCOMPtr<ContinueCursorEvent> event = new ContinueCursorEvent(cursor);
      NS_DispatchToMainThread(event);
      break;
    }

    default:
    {
      NS_RUNTIMEABORT("not reached");
      break;
    }
  }
  return true;
}
bool
DeviceStorageRequestChild::
  Recv__delete__(const DeviceStorageResponseValue& aValue)
{
  switch (aValue.type()) {

    case DeviceStorageResponseValue::TErrorResponse:
    {
      DS_LOG_INFO("error %u", mRequest->GetId());
      ErrorResponse r = aValue;
      mRequest->Reject(r.error());
      break;
    }

    case DeviceStorageResponseValue::TSuccessResponse:
    {
      DS_LOG_INFO("success %u", mRequest->GetId());
      nsString fullPath;
      mRequest->GetFile()->GetFullPath(fullPath);
      mRequest->Resolve(fullPath);
      break;
    }

    case DeviceStorageResponseValue::TFileDescriptorResponse:
    {
      DS_LOG_INFO("fd %u", mRequest->GetId());
      FileDescriptorResponse r = aValue;

      DeviceStorageFile* file = mRequest->GetFile();
      DeviceStorageFileDescriptor* descriptor = mRequest->GetFileDescriptor();
      nsString fullPath;
      file->GetFullPath(fullPath);
      descriptor->mDSFile = file;
      descriptor->mFileDescriptor = r.fileDescriptor();
      mRequest->Resolve(fullPath);
      break;
    }

    case DeviceStorageResponseValue::TBlobResponse:
    {
      DS_LOG_INFO("blob %u", mRequest->GetId());
      BlobResponse r = aValue;
      BlobChild* actor = static_cast<BlobChild*>(r.blobChild());
      RefPtr<BlobImpl> blobImpl = actor->GetBlobImpl();
      mRequest->Resolve(blobImpl.get());
      break;
    }

    case DeviceStorageResponseValue::TFreeSpaceStorageResponse:
    {
      DS_LOG_INFO("free %u", mRequest->GetId());
      FreeSpaceStorageResponse r = aValue;
      mRequest->Resolve(r.freeBytes());
      break;
    }

    case DeviceStorageResponseValue::TUsedSpaceStorageResponse:
    {
      DS_LOG_INFO("used %u", mRequest->GetId());
      UsedSpaceStorageResponse r = aValue;
      mRequest->Resolve(r.usedBytes());
      break;
    }

    case DeviceStorageResponseValue::TAvailableStorageResponse:
    {
      DS_LOG_INFO("available %u", mRequest->GetId());
      AvailableStorageResponse r = aValue;
      mRequest->Resolve(r.mountState());
      break;
    }

    case DeviceStorageResponseValue::TStorageStatusResponse:
    {
      DS_LOG_INFO("status %u", mRequest->GetId());
      StorageStatusResponse r = aValue;
      mRequest->Resolve(r.storageStatus());
      break;
    }

    case DeviceStorageResponseValue::TFormatStorageResponse:
    {
      DS_LOG_INFO("format %u", mRequest->GetId());
      FormatStorageResponse r = aValue;
      mRequest->Resolve(r.mountState());
      break;
    }

    case DeviceStorageResponseValue::TMountStorageResponse:
    {
      DS_LOG_INFO("mount %u", mRequest->GetId());
      MountStorageResponse r = aValue;
      mRequest->Resolve(r.storageStatus());
      break;
    }

    case DeviceStorageResponseValue::TUnmountStorageResponse:
    {
      DS_LOG_INFO("unmount %u", mRequest->GetId());
      UnmountStorageResponse r = aValue;
      mRequest->Resolve(r.storageStatus());
      break;
    }

    case DeviceStorageResponseValue::TEnumerationResponse:
    {
      DS_LOG_INFO("enumerate %u", mRequest->GetId());
      EnumerationResponse r = aValue;
      auto request = static_cast<DeviceStorageCursorRequest*>(mRequest.get());
      uint32_t count = r.paths().Length();
      request->AddFiles(count);
      for (uint32_t i = 0; i < count; i++) {
        RefPtr<DeviceStorageFile> dsf
          = new DeviceStorageFile(r.type(), r.paths()[i].storageName(),
                                  r.rootdir(), r.paths()[i].name());
        request->AddFile(dsf.forget());
      }
      request->Continue();
      break;
    }

    default:
    {
      DS_LOG_ERROR("unknown %u", mRequest->GetId());
      NS_RUNTIMEABORT("not reached");
      break;
    }
  }
  return true;
}
Esempio n. 7
0
	void createTokenFailed(const ErrorResponse & inErrorResponse)
	{
		cout << inErrorResponse.errorMessage();
		PostQuitMessage(0);
	}
Esempio n. 8
0
	void users_getInfo_Failed(const ErrorResponse & inErrorResponse)
	{
		stopTicking();
		cout << endl << inErrorResponse.errorMessage();
		PostQuitMessage(0);
	}
Esempio n. 9
0
	void getFriendsFailed(const ErrorResponse & inErrorResponse)
	{
		stopTicking();
		cout << inErrorResponse.errorMessage();
		PostQuitMessage(0);
	}
Esempio n. 10
0
void RequestHandler::on_error_response(ResponseMessage* response) {
  ErrorResponse* error =
      static_cast<ErrorResponse*>(response->response_body().get());


  switch(error->code()) {
    case CQL_ERROR_UNPREPARED:
      on_error_unprepared(error);
      break;

    case CQL_ERROR_READ_TIMEOUT:
      handle_retry_decision(response,
                            retry_policy_->on_read_timeout(error->consistency(),
                                                           error->received(),
                                                           error->required(),
                                                           error->data_present() > 0,
                                                           num_retries_));
      break;

    case CQL_ERROR_WRITE_TIMEOUT:
      handle_retry_decision(response,
                            retry_policy_->on_write_timeout(error->consistency(),
                                                            error->received(),
                                                            error->required(),
                                                            error->write_type(),
                                                            num_retries_));
      break;

    case CQL_ERROR_UNAVAILABLE:
      handle_retry_decision(response,
                            retry_policy_->on_unavailable(error->consistency(),
                                                          error->required(),
                                                          error->received(),
                                                          num_retries_));
      break;

    default:
      set_error(static_cast<CassError>(CASS_ERROR(
                                         CASS_ERROR_SOURCE_SERVER, error->code())),
                error->message().to_string());
      break;
  }
}