ta_identity_t *ta_identity_create(char *name, xt_core_log_t *log)
{
  assert(name);
  assert(log);
  ta_identity_t *identity;
  xt_core_bool_t so_far_so_good;

  identity = malloc(sizeof *identity);
  if (identity) {
    identity->log = log;
    identity->phrases_qutex = NULL;
    identity->phrases = NULL;
    identity->name = xt_core_string_copy(name);
    if (identity->name) {
      so_far_so_good = xt_core_bool_true;
    } else {
      so_far_so_good = xt_core_bool_false;
      xt_core_log_trace(log, " ta ", "xt_core_string_copy");
    }
  } else {
    so_far_so_good = xt_core_bool_false;
    xt_core_log_trace(log, " ta ", "malloc");
  }

  if (so_far_so_good) {
    identity->phrases = xt_case_list_create(ta_phrase_compare, ta_phrase_copy,
        ta_phrase_destroy);
    if (identity->phrases) {
      so_far_so_good = xt_core_bool_true;
      xt_case_list_set_size_limit(identity->phrases, MAX_PHRASES_SIZE);
    } else {
      so_far_so_good = xt_core_bool_false;
      xt_core_log_enter(log, " ta ", "xt_case_list_create");
    }
  }

  if (so_far_so_good) {
    identity->phrases_qutex = xt_sync_qutex_create();
    if (!identity->phrases_qutex) {
      so_far_so_good = xt_core_bool_false;
      xt_core_log_enter(log, " ta ", "xt_sync_qutex_create");
    }
  }

  if (identity && !so_far_so_good) {
    if (identity->name) {
      xt_core_string_destroy(identity->name);
    }
    if (identity->phrases) {
      xt_case_list_destroy(identity->phrases);
    }
    if (identity->phrases_qutex) {
      xt_sync_qutex_destroy(identity->phrases_qutex);
    }
    free(identity);
    identity = NULL;
  }

  return identity;
}
void ta_identity_destroy_decoy(void *identity_decoy_object)
{
  assert(identity_decoy_object);
  ta_identity_t *identity = identity_decoy_object;

  xt_core_string_destroy(identity->name);
  free(identity);
}
void ta_identity_destroy(void *identity_object)
{
  assert(identity_object);
  ta_identity_t *identity = identity_object;

  xt_core_string_destroy(identity->name);
  xt_case_list_destroy(identity->phrases);
  xt_sync_qutex_destroy(identity->phrases_qutex);
  free(identity);
}
Exemple #4
0
xt_core_bool_t xt_net_http_message_create_uri
(xt_net_http_message_t *http_message)
{
  assert(http_message->resource_path);
  xt_core_bool_t success;
  char *parameters;
  char *parameter;
  char *name;
  char *value;
  char *parameter_context;
  char *nameobject_context;
  xt_core_nameobject_t *nameobject;
  char *resource_name;
  char *decoded_value;

  nameobject_context = NULL;

  resource_name = strtok(http_message->resource_path, "?");
  http_message->resource_name = strdup(resource_name);
  /*
    TODO: check the result of the strdup!
  */
  parameters = strtok(NULL, "?");
  if (parameters) {
    http_message->uri_parameters
      = xt_case_set_create(&http_message->nameobject_iobject);
    if (http_message->uri_parameters) {
      success = xt_core_bool_true;
      parameter = strtok_r(parameters, "&", &parameter_context);
      while (parameter) {
        name = strtok_r(parameter, "=", &nameobject_context);
        value = strtok_r(NULL, "=", &nameobject_context);
        if (name && value) {
          decoded_value = xt_net_http_decode_uri(value, strlen(value));
          if (decoded_value) {
            nameobject = xt_core_nameobject_create(name, decoded_value,
                xt_core_string_copy, xt_core_string_destroy,
                xt_core_string_get_as_string);
            if (nameobject) {
              if (!xt_case_set_add
                  (http_message->uri_parameters, nameobject)) {
                xt_core_nameobject_destroy(nameobject);
              }
            } else {
              xt_core_trace("x_core_nameobject_create");
              success = xt_core_bool_false;
            }
            xt_core_string_destroy(decoded_value);
          } else {
            xt_core_trace("xt_net_http_decode_uri");
          }
        }
        parameter = strtok_r(NULL, "&", &parameter_context);
      }
    } else {
      xt_core_trace("x_case_set_create");
      success = xt_core_bool_false;
    }
  } else {
    http_message->uri_parameters = NULL;
    success = xt_core_bool_true;
  }

  return success;
}