Exemplo n.º 1
0
xt_core_bool_t ta_identity_talk(ta_identity_t *identity, ta_phrase_t *phrase)
{
    assert(identity);
    assert(phrase);
    xt_core_bool_t success;
    xt_core_bool_t zap;

    if (xt_case_list_get_size(identity->phrases) >= MAX_PHRASES_SIZE) {
        zap = xt_core_bool_true;
    } else {
        zap = xt_core_bool_false;
    }

    xt_sync_qutex_lock_exclusive(identity->phrases_qutex);
    if (zap) {
        xt_case_list_clear(identity->phrases);
    }
    ta_phrase_set_id(phrase, xt_case_list_get_size(identity->phrases));
    if (xt_case_list_add_last(identity->phrases, phrase)) {
        xt_sync_qutex_unlock_exclusive(identity->phrases_qutex);
        success = xt_core_bool_true;
    } else {
        xt_sync_qutex_unlock_exclusive(identity->phrases_qutex);
        xt_core_log_enter(identity->log, " ta ", "xt_case_list_add_last");
        success = xt_core_bool_false;
    }

    return success;
}
Exemplo n.º 2
0
Arquivo: post.c Projeto: xtools/xt
xt_core_bool_t xt_net_http_post_send_message(void *http_post_object,
    void *http_message_object)
{
  assert(http_post_object);
  assert(http_message_object);
  xt_core_bool_t success;
  xt_net_http_post_t *http_post;

  http_post = http_post_object;

  success = xt_case_list_add_last(http_post->outbox, http_message_object);

  return success;
}
Exemplo n.º 3
0
Arquivo: system.c Projeto: xtools/xt
xt_core_bool_t xt_net_post_system_send_message(void *post_object,
        void *message_object)
{
    assert(post_object);
    assert(message_object);
    xt_core_bool_t success;
    xt_net_post_system_t *post;

    post = post_object;

    success = xt_case_list_add_last(post->outbox, message_object);

    return success;
}
Exemplo n.º 4
0
Arquivo: system.c Projeto: xtools/xt
xt_core_bool_t xt_net_client_system_register_engine
(xt_net_client_system_t *client, xt_net_engine_id_t engine_id,
    unsigned long message_type_count)
{
  engine_container_t *engine_container;
  xt_core_bool_t success;
  unsigned short each_handler;

  engine_container = malloc(sizeof *engine_container);
  if (engine_container) {
    engine_container->engine_id = engine_id;
    success = xt_core_bool_true;
  } else {
    xt_core_log_trace(client->log, "xnet", "malloc");
    success = xt_core_bool_false;
  }

  if (success) {
    engine_container->message_handlers_size = message_type_count;
    engine_container->message_handlers
      = malloc((sizeof *engine_container->message_handlers)
          * message_type_count);
    if (engine_container->message_handlers) {
      for (each_handler = 0; each_handler < message_type_count;
           each_handler++) {
        *(engine_container->message_handlers + each_handler) = NULL;
      }
      success = xt_core_bool_true;
    } else {
      xt_core_log_trace(client->log, "xnet", "malloc");
      success = xt_core_bool_false;
    }
  }

  if (success) {
    *(client->engines_array + engine_id) = engine_container;
    if (!xt_case_list_add_last(client->engines, engine_container)) {
      success = xt_core_bool_false;
    }
  }

  return success;
}
Exemplo n.º 5
0
Arquivo: system.c Projeto: xtools/xt
xt_core_bool_t put_received_message_in_inbox(xt_net_post_system_t *post)
{
    xt_core_bool_t success;
    xt_core_message_t *message;

    message = xt_core_message_create(post->socket,
                                     post->in_message_header.engine_id, post->in_message_header.message_type,
                                     post->in_buffer, post->in_message_header.data_size);
    if (message) {
        if (xt_case_list_add_last(post->inbox, message)) {
            success = xt_core_bool_true;
        } else {
            xt_core_trace("x_case_list_add_last");
            success = xt_core_bool_false;
        }
    } else {
        xt_core_trace("x_core_message_create");
        success = xt_core_bool_false;
    }

    return success;
}
Exemplo n.º 6
0
xt_case_list_t *ta_identity_listen(ta_identity_t *identity,
    unsigned long next_phrase_id)
{
  assert(identity);
  unsigned long i;
  xt_case_list_t *phrases;
  ta_phrase_t *phrase;
  ta_phrase_t *phrase_copy;
  unsigned long phrases_size;

  phrases = xt_case_list_create(ta_phrase_compare, ta_phrase_copy,
      ta_phrase_destroy);
  if (phrases) {
    xt_sync_qutex_lock_shared(identity->phrases_qutex);
    phrases_size = xt_case_list_get_size(identity->phrases);
    check_range_of_next_phrase_id(&next_phrase_id, phrases_size);
    for (i = next_phrase_id; i < phrases_size; i++) {
      phrase = xt_case_list_find_at(identity->phrases, i);
      assert(phrase);
      phrase_copy = ta_phrase_copy(phrase);
      if (phrase_copy) {
        if (!xt_case_list_add_last(phrases, phrase_copy)) {
          xt_core_log_trace(identity->log, " ta ", "xt_case_list_add_last");
          ta_phrase_destroy(phrase_copy);
          break;
        }
      } else {
        xt_core_log_trace(identity->log, " ta ", "ta_phrase_copy");
        break;
      }
    }
    xt_sync_qutex_unlock_shared(identity->phrases_qutex);
  } else {
    xt_core_log_trace(identity->log, " ta ", "xt_case_list_create");
  }

  return phrases;
}
Exemplo n.º 7
0
Arquivo: post.c Projeto: xtools/xt
xt_core_bool_t put_received_message_in_inbox(xt_net_http_post_t *http_post)
{
  xt_core_bool_t success;
  xt_net_http_message_t *http_message;

  http_message = xt_net_http_message_create(http_post->socket,
      http_post->in_http_method, XT_NET_HTTP_STATUS_UNKNOWN,
      http_post->in_resource_path, http_post->in_http_version,
      http_post->in_http_headers);
  if (http_message) {
    if (xt_case_list_add_last(http_post->inbox, http_message)) {
      success = xt_core_bool_true;
    } else {
      xt_core_trace("x_case_list_add_last");
      success = xt_core_bool_false;
    }
  } else {
    xt_core_trace("x_net_http_message_create");
    success = xt_core_bool_false;
  }

  return success;
}
Exemplo n.º 8
0
Arquivo: system.c Projeto: xtools/xt
xt_case_list_t *xt_net_post_system_take_unsent_messages(xt_net_post_system_t *post)
{
    assert(post);
    xt_case_list_t *list;
    xt_core_message_t *message;

    list = xt_case_list_create(XT_CORE_OBJECT_NO_COMPARE_F,
                               xt_core_message_copy, XT_CORE_OBJECT_NO_DESTROY_F);
    if (list) {
        xt_case_list_iterate_start(post->outbox);
        while ((message = xt_case_list_iterate_next(post->outbox))) {
            if (xt_case_list_add_last(list, message)) {
                xt_case_list_iterate_remove(post->outbox);
            } else {
                xt_core_trace("x_case_list_add_last");
            }
        }
    } else {
        xt_core_trace("x_case_list_create");
    }

    return list;
}