static int ldo_session_connect(ScarabSession * session) { LDO_Session *s; unsigned char expected_magic[sizeof(MAGIC)]; int i; s = (LDO_Session*)scarab_mem_malloc(sizeof(LDO_Session)); s->refs = scarab_dict_new(11, scarab_dict_times2); int magic_size = 0; if ((magic_size = scarab_session_read(session, expected_magic, sizeof(MAGIC))) != sizeof(MAGIC)) { fprintf(stderr,"Wrong size magic (is %d, should be %d)\n", magic_size, sizeof(MAGIC));fflush(stderr); return scarab_session_seterr(session, LDO_ERR_BAD_HEADER); } for (i = 0; i < sizeof(MAGIC); i++) { if (expected_magic[i] != MAGIC[i]) { fprintf(stderr,"Wrong magic (in pos %d: is: %x, should be %x)\n", i, MAGIC[i], expected_magic[i]); fflush(stderr); return scarab_session_seterr(session, LDO_ERR_BAD_HEADER); } } scarab_session_set_encoder(session, &scarab_ldo_encoder, s); return 0; }
Datum VariableRegistry::generateCodecDatum() { ScarabDatum *codec = NULL; shared_ptr<Variable> var; boost::mutex::scoped_lock s_lock(lock); int dictSize = master_variable_list.size(); codec = scarab_dict_new(dictSize, &scarab_dict_times2); for(int i = 0; i < dictSize; i++) { var = master_variable_list[i]; if(var == NULL) { continue; } int codec_code = var->getCodecCode(); if(codec_code == RESERVED_CODEC_CODE) { continue; } VariableProperties *props = var->getProperties(); if(props == NULL){ continue; } Datum serialized_var(props->operator Datum()); if(serialized_var.isUndefined()) { mdebug("local parameter null value at param (%d)", i); } ScarabDatum *codec_key = scarab_new_integer(codec_code); scarab_dict_put(codec, codec_key, serialized_var.getScarabDatum()); scarab_free_datum(codec_key); } Datum returnCodec(codec); scarab_free_datum(codec); return returnCodec; }
static int ldo_session_accept(ScarabSession * session) { LDO_Session *s; s = (LDO_Session*)scarab_mem_malloc(sizeof(LDO_Session)); s->refs = scarab_dict_new(11, scarab_dict_times2); int write_size = scarab_session_write(session, (const void *)MAGIC, 7); scarab_session_send(session); if (write_size != 7 ) return scarab_session_seterr(session, LDO_ERR_BAD_HEADER); scarab_session_set_encoder(session, &scarab_ldo_encoder, s); return 0; }
static ScarabDatum * ldo_read_dict(ScarabSession * session) { int len; ScarabDatum *dict; len = ldo_readber(session); dict = scarab_dict_new(len, scarab_dict_times2); for (; len > 0; len--) { ScarabDatum *key = ldo_read(session); ScarabDatum *value = ldo_read(session); scarab_dict_put(dict, key, value); scarab_free_datum(key); scarab_free_datum(value); } return dict; }