예제 #1
0
bool
MobileConnectionRequestChild::DoReply(const MobileConnectionReplySuccessMmi& aReply)
{
  nsAutoString serviceCode(aReply.serviceCode());
  nsAutoString statusMessage(aReply.statusMessage());
  AdditionalInformation info(aReply.additionalInformation());

  nsRefPtr<MobileConnectionCallback> callback = static_cast<MobileConnectionCallback*>(mRequestCallback.get());


  // Handle union types
  switch (info.type()) {
    case AdditionalInformation::Tvoid_t:
      return NS_SUCCEEDED(callback->NotifySendCancelMmiSuccess(serviceCode,
                                                               statusMessage));
    case AdditionalInformation::Tuint16_t:
      return NS_SUCCEEDED(callback->NotifySendCancelMmiSuccess(serviceCode,
                                                               statusMessage,
                                                               info.get_uint16_t()));
    case AdditionalInformation::TArrayOfnsString:
      return NS_SUCCEEDED(callback->NotifySendCancelMmiSuccess(serviceCode,
                                                               statusMessage,
                                                               info.get_ArrayOfnsString()));
    case AdditionalInformation::TArrayOfMozCallForwardingOptions:
      return NS_SUCCEEDED(callback->NotifySendCancelMmiSuccess(serviceCode,
                                                               statusMessage,
                                                               info.get_ArrayOfMozCallForwardingOptions()));

    default:
      MOZ_CRASH("Received invalid type!");
  }

  return false;
}
예제 #2
0
bool
MobileConnectionRequestChild::DoReply(const MobileConnectionReplySuccessMmi& aReply)
{
  nsAutoString serviceCode(aReply.serviceCode());
  nsAutoString statusMessage(aReply.statusMessage());
  AdditionalInformation info(aReply.additionalInformation());

  // Handle union types
  switch (info.type()) {
    case AdditionalInformation::Tvoid_t:
      return NS_SUCCEEDED(mRequestCallback->NotifySendCancelMmiSuccess(serviceCode,
                                                                       statusMessage));

    case AdditionalInformation::Tuint16_t:
      return NS_SUCCEEDED(mRequestCallback->NotifySendCancelMmiSuccessWithInteger(
        serviceCode, statusMessage, info.get_uint16_t()));

    case AdditionalInformation::TArrayOfnsString: {
      uint32_t count = info.get_ArrayOfnsString().Length();
      const nsTArray<nsString>& additionalInformation = info.get_ArrayOfnsString();

      nsAutoArrayPtr<const char16_t*> additionalInfoPtrs(new const char16_t*[count]);
      for (size_t i = 0; i < count; ++i) {
        additionalInfoPtrs[i] = additionalInformation[i].get();
      }

      return NS_SUCCEEDED(mRequestCallback->NotifySendCancelMmiSuccessWithStrings(
        serviceCode, statusMessage, count, additionalInfoPtrs));
    }

    case AdditionalInformation::TArrayOfnsMobileCallForwardingOptions: {
      uint32_t count = info.get_ArrayOfnsMobileCallForwardingOptions().Length();

      nsTArray<nsCOMPtr<nsIMobileCallForwardingOptions>> results;
      for (uint32_t i = 0; i < count; i++) {
        // Use dont_AddRef here because these instances are already AddRef-ed in
        // MobileConnectionIPCSerializer.h
        nsCOMPtr<nsIMobileCallForwardingOptions> item = dont_AddRef(
          info.get_ArrayOfnsMobileCallForwardingOptions()[i]);
        results.AppendElement(item);
      }

      return NS_SUCCEEDED(mRequestCallback->NotifySendCancelMmiSuccessWithCallForwardingOptions(
        serviceCode, statusMessage, count,
        const_cast<nsIMobileCallForwardingOptions**>(info.get_ArrayOfnsMobileCallForwardingOptions().Elements())));
    }

    default:
      MOZ_CRASH("Received invalid type!");
  }

  return false;
}