libpsyc/src/variable.c

166 lines
6.4 KiB
C
Raw Normal View History

2011-05-08 21:40:26 +00:00
#include "lib.h"
2011-04-22 15:09:32 +00:00
#include <stdint.h>
2011-11-28 13:00:41 +00:00
#include <psyc/packet.h>
/// Routing variables in alphabetical order.
const PsycMapInt psyc_rvars[] = {
{ PSYC_C2STRI("_amount_fragments"), PSYC_RVAR_AMOUNT_FRAGMENTS },
{ PSYC_C2STRI("_context"), PSYC_RVAR_CONTEXT },
{ PSYC_C2STRI("_counter"), PSYC_RVAR_COUNTER },
{ PSYC_C2STRI("_fragment"), PSYC_RVAR_FRAGMENT },
{ PSYC_C2STRI("_source"), PSYC_RVAR_SOURCE },
{ PSYC_C2STRI("_source_relay"), PSYC_RVAR_SOURCE_RELAY },
{ PSYC_C2STRI("_tag"), PSYC_RVAR_TAG },
{ PSYC_C2STRI("_tag_relay"), PSYC_RVAR_TAG_RELAY },
{ PSYC_C2STRI("_target"), PSYC_RVAR_TARGET },
{ PSYC_C2STRI("_target_relay"), PSYC_RVAR_TARGET_RELAY },
/* old psyc:
{ PSYC_C2STRI("_length"), PSYC_RVAR_LENGTH },
{ PSYC_C2STRI("_source_identification"), PSYC_RVAR_SOURCE_IDENTIFICATION },
{ PSYC_C2STRI("_source_identity"), PSYC_RVAR_SOURCE_IDENTITY },
{ PSYC_C2STRI("_source_relay_relay"), PSYC_RVAR_RELAY_RELAY },
{ PSYC_C2STRI("_tag_reply"), PSYC_RVAR_TAG_REPLY },
{ PSYC_C2STRI("_target_forward"), PSYC_RVAR_TARGET_FORWARD },
{ PSYC_C2STRI("_understand_modules"), PSYC_RVAR_UNDERSTAND_MODULES },
{ PSYC_C2STRI("_using_modules"), PSYC_RVAR_USING_MODULES },
*/
2011-04-29 20:58:19 +00:00
};
const size_t psyc_rvars_num = PSYC_NUM_ELEM(psyc_rvars);
2011-04-29 20:58:19 +00:00
// Variable types in alphabetical order.
const PsycMapInt psyc_var_types[] = {
2011-11-30 12:51:50 +00:00
{ PSYC_C2STRI("_amount"), PSYC_TYPE_AMOUNT },
{ PSYC_C2STRI("_color"), PSYC_TYPE_COLOR },
{ PSYC_C2STRI("_date"), PSYC_TYPE_DATE },
{ PSYC_C2STRI("_degree"), PSYC_TYPE_DEGREE },
{ PSYC_C2STRI("_dict"), PSYC_TYPE_DICT },
2011-11-30 12:51:50 +00:00
{ PSYC_C2STRI("_entity"), PSYC_TYPE_ENTITY },
{ PSYC_C2STRI("_flag"), PSYC_TYPE_FLAG },
{ PSYC_C2STRI("_language"), PSYC_TYPE_LANGUAGE },
{ PSYC_C2STRI("_list"), PSYC_TYPE_LIST },
{ PSYC_C2STRI("_nick"), PSYC_TYPE_NICK },
{ PSYC_C2STRI("_page"), PSYC_TYPE_PAGE },
{ PSYC_C2STRI("_struct"), PSYC_TYPE_STRUCT },
2011-11-30 12:51:50 +00:00
{ PSYC_C2STRI("_time"), PSYC_TYPE_TIME },
{ PSYC_C2STRI("_uniform"), PSYC_TYPE_UNIFORM },
2011-04-22 15:09:32 +00:00
};
const size_t psyc_var_types_num = PSYC_NUM_ELEM(psyc_var_types);
2011-04-22 15:09:32 +00:00
2011-11-30 12:51:50 +00:00
/// Method names in alphabetical order.
const PsycMapInt psyc_methods[] = {
2011-11-30 12:51:50 +00:00
{ PSYC_C2STRI("_data"), PSYC_MC_DATA },
{ PSYC_C2STRI("_echo_context_enter"), PSYC_MC_ECHO_CONTEXT_ENTER },
{ PSYC_C2STRI("_echo_context_leave"), PSYC_MC_ECHO_CONTEXT_LEAVE },
2012-01-04 22:33:43 +00:00
{ PSYC_C2STRI("_echo_hello"), PSYC_MC_ECHO_HELLO },
2011-11-30 12:51:50 +00:00
{ PSYC_C2STRI("_echo"), PSYC_MC_ECHO },
2012-01-25 17:05:44 +00:00
{ PSYC_C2STRI("_failure_alias_nonexistant"),PSYC_MC_FAILURE_ALIAS_NONEXISTANT },
{ PSYC_C2STRI("_failure_alias_unavailable"),PSYC_MC_FAILURE_ALIAS_UNAVAILABLE },
2011-11-30 12:51:50 +00:00
{ PSYC_C2STRI("_failure"), PSYC_MC_FAILURE },
{ PSYC_C2STRI("_info"), PSYC_MC_INFO },
2011-12-03 13:34:29 +00:00
{ PSYC_C2STRI("_message_action"), PSYC_MC_MESSAGE_ACTION },
2011-11-30 12:51:50 +00:00
{ PSYC_C2STRI("_message"), PSYC_MC_MESSAGE },
2012-01-25 17:05:44 +00:00
{ PSYC_C2STRI("_notice_alias_add"), PSYC_MC_NOTICE_ALIAS_ADD },
{ PSYC_C2STRI("_notice_alias_change"), PSYC_MC_NOTICE_ALIAS_CHANGE },
{ PSYC_C2STRI("_notice_alias_remove"), PSYC_MC_NOTICE_ALIAS_REMOVE },
2011-11-30 12:51:50 +00:00
{ PSYC_C2STRI("_notice_context_enter"), PSYC_MC_NOTICE_CONTEXT_ENTER },
{ PSYC_C2STRI("_notice_context_leave"), PSYC_MC_NOTICE_CONTEXT_LEAVE },
2012-01-25 17:05:44 +00:00
{ PSYC_C2STRI("_notice_friendship"), PSYC_MC_NOTICE_FRIENDSHIP },
2012-01-17 09:53:34 +00:00
{ PSYC_C2STRI("_notice_link"), PSYC_MC_NOTICE_LINK },
2012-01-25 17:05:44 +00:00
{ PSYC_C2STRI("_notice_set"), PSYC_MC_NOTICE_SET },
{ PSYC_C2STRI("_notice_unlink"), PSYC_MC_NOTICE_UNLINK },
2011-11-30 12:51:50 +00:00
{ PSYC_C2STRI("_notice"), PSYC_MC_NOTICE },
{ PSYC_C2STRI("_request_context_enter"), PSYC_MC_REQUEST_CONTEXT_ENTER },
{ PSYC_C2STRI("_request_context_leave"), PSYC_MC_REQUEST_CONTEXT_LEAVE },
2012-01-25 17:05:44 +00:00
{ PSYC_C2STRI("_request_frienship"), PSYC_MC_REQUEST_FRIENDSHIP },
2011-11-30 12:51:50 +00:00
{ PSYC_C2STRI("_request"), PSYC_MC_REQUEST },
{ PSYC_C2STRI("_status_contexts_entered"), PSYC_MC_STATUS_CONTEXTS_ENTERED },
2011-12-27 16:50:25 +00:00
{ PSYC_C2STRI("_status_hello"), PSYC_MC_STATUS_HELLO },
2011-11-30 12:51:50 +00:00
{ PSYC_C2STRI("_status"), PSYC_MC_STATUS },
{ PSYC_C2STRI("_warning"), PSYC_MC_WARNING },
2011-11-28 13:00:41 +00:00
};
2011-11-30 12:51:50 +00:00
const size_t psyc_methods_num = PSYC_NUM_ELEM(psyc_methods);
2011-04-22 15:09:32 +00:00
2011-11-28 13:00:41 +00:00
/**
2011-11-30 12:51:50 +00:00
* Get the method, its family and its flags.
2011-11-28 13:00:41 +00:00
*/
PsycMethod
2011-11-30 12:51:50 +00:00
psyc_method (char *method, size_t methodlen, PsycMethod *family, unsigned int *flag)
2011-11-28 13:00:41 +00:00
{
int mc = psyc_map_lookup_int(psyc_methods, psyc_methods_num,
2012-01-09 10:52:09 +00:00
method, methodlen, PSYC_YES);
2011-11-28 13:00:41 +00:00
switch (mc) {
2011-11-30 12:51:50 +00:00
case PSYC_MC_DATA:
*family = PSYC_MC_DATA;
*flag = 0;
2011-11-28 13:00:41 +00:00
break;
2011-11-30 12:51:50 +00:00
case PSYC_MC_ECHO:
case PSYC_MC_ECHO_CONTEXT_ENTER:
case PSYC_MC_ECHO_CONTEXT_LEAVE:
2012-01-04 22:33:43 +00:00
case PSYC_MC_ECHO_HELLO:
2011-11-30 12:51:50 +00:00
*family = PSYC_MC_ECHO;
*flag = PSYC_METHOD_TEMPLATE | PSYC_METHOD_REPLY | PSYC_METHOD_VISIBLE;
2011-11-28 13:00:41 +00:00
break;
2011-11-30 12:51:50 +00:00
case PSYC_MC_ERROR:
*family = PSYC_MC_ERROR;
*flag = PSYC_METHOD_TEMPLATE | PSYC_METHOD_REPLY | PSYC_METHOD_VISIBLE
| PSYC_METHOD_LOGGABLE;
2011-11-28 13:00:41 +00:00
break;
2011-11-30 12:51:50 +00:00
case PSYC_MC_FAILURE:
2012-01-25 17:05:44 +00:00
case PSYC_MC_FAILURE_ALIAS_NONEXISTANT:
case PSYC_MC_FAILURE_ALIAS_UNAVAILABLE:
2011-11-30 12:51:50 +00:00
*family = PSYC_MC_FAILURE;
*flag = PSYC_METHOD_TEMPLATE | PSYC_METHOD_REPLY | PSYC_METHOD_VISIBLE
| PSYC_METHOD_LOGGABLE;
2011-11-28 13:00:41 +00:00
break;
2011-11-30 12:51:50 +00:00
case PSYC_MC_INFO:
*family = PSYC_MC_INFO;
*flag = PSYC_METHOD_TEMPLATE | PSYC_METHOD_REPLY | PSYC_METHOD_VISIBLE
| PSYC_METHOD_LOGGABLE;
2011-11-28 13:00:41 +00:00
break;
2011-11-30 12:51:50 +00:00
case PSYC_MC_MESSAGE:
2011-12-03 13:34:29 +00:00
case PSYC_MC_MESSAGE_ACTION:
2011-11-30 12:51:50 +00:00
*family = PSYC_MC_MESSAGE;
*flag = PSYC_METHOD_VISIBLE | PSYC_METHOD_LOGGABLE | PSYC_METHOD_MANUAL;
2011-11-28 13:00:41 +00:00
break;
2011-11-30 12:51:50 +00:00
case PSYC_MC_NOTICE:
2012-01-25 17:05:44 +00:00
case PSYC_MC_NOTICE_ALIAS_ADD:
case PSYC_MC_NOTICE_ALIAS_CHANGE:
case PSYC_MC_NOTICE_ALIAS_REMOVE:
2011-11-30 12:51:50 +00:00
case PSYC_MC_NOTICE_CONTEXT_ENTER:
case PSYC_MC_NOTICE_CONTEXT_LEAVE:
2012-01-25 17:05:44 +00:00
case PSYC_MC_NOTICE_FRIENDSHIP:
case PSYC_MC_NOTICE_LINK:
case PSYC_MC_NOTICE_SET:
case PSYC_MC_NOTICE_UNLINK:
2011-11-30 12:51:50 +00:00
*family = PSYC_MC_NOTICE;
*flag = PSYC_METHOD_TEMPLATE | PSYC_METHOD_VISIBLE | PSYC_METHOD_LOGGABLE;
2011-11-28 13:00:41 +00:00
break;
2011-11-30 12:51:50 +00:00
case PSYC_MC_REQUEST:
case PSYC_MC_REQUEST_CONTEXT_ENTER:
case PSYC_MC_REQUEST_CONTEXT_LEAVE:
*family = PSYC_MC_REQUEST;
*flag = PSYC_METHOD_TEMPLATE | PSYC_METHOD_VISIBLE | PSYC_METHOD_LOGGABLE;
2011-11-28 13:00:41 +00:00
break;
2011-11-30 12:51:50 +00:00
case PSYC_MC_STATUS:
case PSYC_MC_STATUS_CONTEXTS_ENTERED:
2011-12-27 16:50:25 +00:00
case PSYC_MC_STATUS_HELLO:
2011-11-30 12:51:50 +00:00
*family = PSYC_MC_STATUS;
*flag = PSYC_METHOD_TEMPLATE | PSYC_METHOD_REPLY | PSYC_METHOD_VISIBLE
| PSYC_METHOD_LOGGABLE;
2011-11-28 13:00:41 +00:00
break;
2011-11-30 12:51:50 +00:00
case PSYC_MC_WARNING:
*family = PSYC_MC_WARNING;
*flag = PSYC_METHOD_TEMPLATE | PSYC_METHOD_REPLY | PSYC_METHOD_VISIBLE
| PSYC_METHOD_LOGGABLE;
2011-11-28 13:00:41 +00:00
break;
2011-11-30 12:51:50 +00:00
default:
*family = mc;
*flag = 0;
2011-11-28 13:00:41 +00:00
}
return mc;
}