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_++; }
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; }
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; }
void createTokenFailed(const ErrorResponse & inErrorResponse) { cout << inErrorResponse.errorMessage(); PostQuitMessage(0); }
void users_getInfo_Failed(const ErrorResponse & inErrorResponse) { stopTicking(); cout << endl << inErrorResponse.errorMessage(); PostQuitMessage(0); }
void getFriendsFailed(const ErrorResponse & inErrorResponse) { stopTicking(); cout << inErrorResponse.errorMessage(); PostQuitMessage(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; } }