Exemple #1
0
sse_uint32
sse_hextou32(sse_char *s)
{
  return hex_to_uint(s, sse_strlen(s));
}
static void
FILEContentInfo_OnCompleteCallback(MoatValue *in_err_code,
                                   MoatValue *in_err_msg,
                                   const sse_char *in_uid,
                                   const sse_char *in_key,
                                   const sse_char *operation,
                                   sse_pointer in_user_data)
{
  TFILEContentInfo *self = (TFILEContentInfo*)in_user_data;
  sse_char *job_service_id = NULL;
  MoatObject *collection = NULL;
  sse_int err;
  sse_char *str;
  sse_uint len;
  sse_bool success;
  sse_int request_id;

  ASSERT(self);
  ASSERT(in_err_code);
  ASSERT(in_err_msg);

  job_service_id = moat_create_notification_id_with_moat(self->fMoat, (sse_char*)operation, "1.0.0");
  ASSERT(job_service_id);
  LOG_DEBUG("URI=[%s]", job_service_id);

  collection = moat_object_new();
  ASSERT(collection);

  err = moat_value_get_string(in_err_code, &str, &len);
  ASSERT(err == SSE_E_OK);
  if ((sse_strlen(FILE_ERROR_OK) == len) && (sse_strncmp(FILE_ERROR_OK, str, len) == 0)) {
    success = sse_true;
  } else {
    success = sse_false;
  }

  err = moat_object_add_boolean_value(collection, "success", success, sse_true);
  ASSERT(err == SSE_E_OK);
  err = moat_object_add_value(collection, "message", in_err_msg, sse_true, sse_true);
  ASSERT(err == SSE_E_OK);
  err = moat_object_add_value(collection, "code", in_err_code, sse_true, sse_true);
  ASSERT(err == SSE_E_OK);
  if (in_uid) {
    err = moat_object_add_string_value(collection, "uid", (sse_char*)in_uid, 0, sse_true, sse_true);
    ASSERT(err == SSE_E_OK);
  }

  /* Send a notification. */
  request_id = moat_send_notification(self->fMoat,
                                      job_service_id,
                                      (sse_char*)in_key,
                                      FILE_MODELNAME_FILERESULT,
                                      collection,
                                      NULL, //FIXME
                                      NULL); //FIXME
  if (request_id < 0) {
    LOG_ERROR("moat_send_notification() ... failed with [%s].", request_id);
  }
  LOG_INFO("moat_send_notification(job_service_id=[%s], key=[%s]) ... in progress.", job_service_id, in_key);
  MOAT_OBJECT_DUMP_INFO(TAG, collection);

  moat_object_free(collection);
  sse_free(job_service_id);

  return;
}
sse_int
TDEVINFOCollector_GetHardwareSim(TDEVINFOCollector* self,
				 DEVINFOCollector_OnGetCallback in_callback,
				 sse_pointer in_user_data)
{
  sse_int err;
  MoatObject *object = NULL;
  MoatValue *value = NULL;
  FILE *fd;
  sse_char buff[128];
  sse_char *iccid = NULL;
  sse_char *imsi = NULL;
  sse_char *msisdn = NULL;
  sse_int i;

  ASSERT(self);

  self->fOnGetCallback = in_callback;
  self->fUserData = in_user_data;
  self->fStatus = DEVINFO_COLLECTOR_STATUS_COLLECTING;


  /* Get SIM Info */
  fd = fopen("/tmp/.flags/.sim_exist", "r");
  if (fd == NULL) {
    LOG_INFO("No SIM info.");
    if (self->fOnGetCallback) {
      self->fOnGetCallback(NULL, self->fUserData, SSE_E_NOENT);
    }
    self->fStatus = DEVINFO_COLLECTOR_STATUS_COMPLETED;
    return SSE_E_OK;
  }


  while (fgets(buff, sizeof(buff), fd) != NULL) {
    LOG_DEBUG("SIM: %s", buff);
    if ((imsi == NULL) && (sse_strlen(buff) > 15)) {
      for (i = 0; i < 15; i++) {
        if (!isdigit(buff[i])) {
          break;
        }
      }
      imsi = sse_strndup(buff, 15);
      ASSERT(imsi);
      LOG_INFO("IMSI=%[%s].", imsi);
    } else if ((iccid == NULL) && (sse_strlen(buff) > 6) && (sse_strncmp(buff, "+CCID:", 6) == 0)) {
      iccid = sse_strndup(buff + 7, 19);
      ASSERT(iccid);
      LOG_INFO("ICCID=[%s].", iccid);
    } else if ((msisdn == NULL) && (sse_strlen(buff) > 6) && (sse_strncmp(buff, "+CNUM:", 6) == 0)) {
      msisdn = sse_strndup(buff + 11, 11);
      ASSERT(msisdn);
      LOG_INFO("MSISDN=[%s].", msisdn);
    }
  }
  fclose(fd);

  /* Create MoatObject */
  object = moat_object_new();
  ASSERT(object);
  if (iccid) {
    err = moat_object_add_string_value(object, DEVINFO_KEY_SIM_ICCID, iccid, sse_strlen(iccid), sse_true, sse_false); 
    if (err != SSE_E_OK) {
      LOG_ERROR("moat_object_set_string_value() ... failed with [%s].", sse_get_error_string(err));
      if(self->fOnGetCallback) {
        self->fOnGetCallback(NULL, self->fUserData, err);
      }
      goto error_exit;
    }
  }
  if (imsi) {
    err = moat_object_add_string_value(object, DEVINFO_KEY_SIM_IMSI, imsi, sse_strlen(imsi), sse_true, sse_false); 
    if (err != SSE_E_OK) {
      LOG_ERROR("moat_object_set_string_value() ... failed with [%s].", sse_get_error_string(err));
      if(self->fOnGetCallback) {
        self->fOnGetCallback(NULL, self->fUserData, err);
      }
      goto error_exit;
    }
  }
  if (msisdn) {
    err = moat_object_add_string_value(object, DEVINFO_KEY_SIM_MSISDN, msisdn, sse_strlen(msisdn), sse_true, sse_false); 
    if (err != SSE_E_OK) {
      LOG_ERROR("moat_object_set_string_value() ... failed with [%s].", sse_get_error_string(err));
      if(self->fOnGetCallback) {
        self->fOnGetCallback(NULL, self->fUserData, err);
      }
      goto error_exit;
    }
  }

  /* Call callback */
  if(self->fOnGetCallback) {
    value = moat_value_new_object(object, sse_true);
    ASSERT(value);
    self->fOnGetCallback(value, self->fUserData, err);
    moat_value_free(value);
  }

  /* Cleanup */
  moat_object_free(object);
  if (imsi)   sse_free(imsi);
  if (iccid)  sse_free(iccid);
  if (msisdn) sse_free(msisdn);
  self->fStatus = DEVINFO_COLLECTOR_STATUS_COMPLETED;
  return SSE_E_OK;

  /* Abnormal end */
 error_exit:
  self->fStatus = DEVINFO_COLLECTOR_STATUS_ABEND;
  if (object) moat_object_free(object);
  if (imsi)   sse_free(imsi);
  if (iccid)  sse_free(iccid);
  if (msisdn) sse_free(msisdn);
  return err;
}