bool JobSearchSession::serialize_result(Xapian::MSet &matches, string &resp) { JobSearchResult pb_result; //numbers pb_result.set_offset(m_query.offset()); pb_result.set_total_estimated(m_qualified_matches); TB_INFO("matches count:"<<matches.get_matches_estimated()); TB_INFO("matches qualified:"<<m_qualified_matches); //matches for (Xapian::MSetIterator i = matches.begin(); i != matches.end(); ++i) { if(i.get_weight() == 0){ break; } string data = i.get_document().get_data(); JobSearchResult pb_; pb_.ParseFromString(data); JobSearchResult_ResultItem &item = *(pb_result.add_result_item()); item.set_jid(pb_.result_item(0).jid()); item.set_title(pb_.result_item(0).title()); item.set_location(pb_.result_item(0).location()); item.set_company_id(pb_.result_item(0).company_id()); item.set_company_name(pb_.result_item(0).company_name()); item.set_company_image(pb_.result_item(0).company_image()); item.set_department(pb_.result_item(0).department()); item.set_post_date(pb_.result_item(0).post_date()); item.set_score(i.get_weight()); if(m_query.pb_query.has_debug() && m_query.pb_query.debug()){ item.set_debug_data(m_mid_data_recorder[item.jid()]); } TB_DEBUG("jid :"<<item.jid()); } pb_result.set_count(pb_result.result_item_size()); TB_INFO("matches in range:"<<pb_result.result_item_size()); //stats std::vector<SearchStats::pair_t> top_v; m_stats.topk(top_v,MAX_STATS_ITEMS); for(unsigned i=0;i<top_v.size();i++){ const SearchStats::term_t &key = top_v[i].first; uint32_t value = top_v[i].second; JobSearchResult_StatsItem *stats = pb_result.add_stats_item(); stats->set_stats_type(JOB_STATS_NAME[m_query.task_type]); stats->set_stats_key(key); stats->set_stats_value(value); } //serialize if(false == pb_result.SerializeToString(&resp)){ TB_INFO("serialize response failed"); return false; } return true; }
static void test_div_random(void) { int i; char str[MAX_RAND_STRING_SIZE]; TB_INFO(" Testing random divisions"); DEF_BIGINT(n, 2048); DEF_BIGINT(d, 2048); DEF_BIGINT(q, 2048); DEF_BIGINT(r, 2048); DEF_BIGINT(v, 2048); for (i = 0; i < 10000; i++) { tb_set_random_value(n, str, 1); /* don't divide by zero */ do { tb_set_random_value(d, str, 1); } while (TEE_BigIntCmpS32(d, 0) == 0); TEE_BigIntDiv(q, r, n, d); TEE_BigIntMul(v, q, d); TEE_BigIntAdd(v, v, r); TB_ASSERT_BIGINT_EQ(n, v); if (TEE_BigIntCmpS32(d, 0) > 0) TB_ASSERT_BIGINT_LESS(r, d); } DEL_BIGINT(n); DEL_BIGINT(d); DEL_BIGINT(q); DEL_BIGINT(r); DEL_BIGINT(v); }
static void test_div_signs(void) { TB_INFO(" Testing signs of q and r"); DEF_BIGINT(n, 2048); DEF_BIGINT(d, 2048); DEF_BIGINT(q, 2048); DEF_BIGINT(r, 2048); DEF_BIGINT(v, 2048); DIV_CHECK_SIGN("53", "7", CMP_LARGER, CMP_LARGER); DIV_CHECK_SIGN("-53", "7", CMP_SMALLER, CMP_SMALLER); DIV_CHECK_SIGN("53", "-7", CMP_SMALLER, CMP_LARGER); DIV_CHECK_SIGN("-53", "-7", CMP_LARGER, CMP_SMALLER); DIV_CHECK_SIGN("123456789abcdef123456789abcdef", "fedcba98765432100", CMP_LARGER, CMP_LARGER); DIV_CHECK_SIGN("-123456789abcdef123456789abcdef", "fedcba98765432100", CMP_SMALLER, CMP_SMALLER); DIV_CHECK_SIGN("123456789abcdef123456789abcdef", "-fedcba98765432100", CMP_SMALLER, CMP_LARGER); DIV_CHECK_SIGN("-123456789abcdef123456789abcdef", "-fedcba98765432100", CMP_LARGER, CMP_SMALLER); DEL_BIGINT(n); DEL_BIGINT(d); DEL_BIGINT(q); DEL_BIGINT(r); DEL_BIGINT(v); }
static void test_BigInt_getsetShort(void) { int32_t b; TEE_Result res; TB_INFO("Testing GetShort and SetShort"); DEF_BIGINT(a, 512); getsettest(a, 1); getsettest(a, -1); getsettest(a, 123); getsettest(a, -123); getsettest(a, 0x7FFFFFFF); getsettest(a, (int)0x80000000); getsettest(a, (int)0xFFFFFFFF); getsettest(a, 0); /* Testing too large BigInt */ TEE_BigIntConvertFromString(a, "0x1FFFFFFFFF"); res = TEE_BigIntConvertToS32(&b, a); TB_ASSERT(res == TEE_ERROR_OVERFLOW); mpa_wipe((mpanum) a); TEE_BigIntConvertFromString(a, "-0x1FFFFFFFFF"); res = TEE_BigIntConvertToS32(&b, a); TB_ASSERT(res == TEE_ERROR_OVERFLOW); DEL_BIGINT(a); }
bool Server::cache_set(const string &key,const char *value,size_t valuelen) { if(m_memcached_conn.number_of_hosts == 0){ return false; } /* vector<char> vv; for(size_t i=0;i<valuelen;i++){ vv.push_back(value[i]); } */ pthread_mutex_lock(&m_cache_lock); string cachekey = cache_hash(key); memcached_return_t rc= memcached_set(&m_memcached_conn, cachekey.c_str(), cachekey.size(), value, valuelen, 86400, 0); pthread_mutex_unlock(&m_cache_lock); if(rc == MEMCACHED_SUCCESS || rc == MEMCACHED_BUFFERED){ TB_INFO("cache set ok: key="<<cachekey); return true; }else{ TB_ERROR("cache set failed: error="<<memcached_strerror(NULL, rc)<<",key="<<cachekey<<", valuelen="<<valuelen); return false; } }
bool Server::init() { if(m_server_type == SERVER_TYPE_USER){ m_com_contacts = new CompanyContactsKeeper(m_mongodb_addr,m_company_list_filename); if(m_com_contacts->init()==false){ return false; } } if(m_server_type == SERVER_TYPE_JOB){ m_com_score = new CompanyScoreKeeper(m_company_score_filename); if(m_com_score->init()==false){ return false; } } m_tag_scorer = new TagScorer(1.0); memcached_create(&m_memcached_conn); memcached_behavior_set(&m_memcached_conn,MEMCACHED_BEHAVIOR_BINARY_PROTOCOL,1); //memcached_behavior_set(&m_memcached_conn, MEMCACHED_BEHAVIOR_USE_UDP,1); if(m_memcache_addr!=""){ memcached_server_st *servers; servers= memcached_servers_parse(m_memcache_addr.c_str()); memcached_return_t rc = memcached_server_push(&m_memcached_conn, servers); memcached_server_free(servers); if(rc!=MEMCACHED_SUCCESS){ TB_ERROR("connect to memcached failed, error="<<memcached_strerror(NULL, rc)); return false; }else{ TB_INFO("connected to memcached on "<<m_memcache_addr); } } pthread_mutex_init(&m_cache_lock,0); pthread_mutex_init(&m_db_lock,0); pthread_cond_init(&m_db_cond,0); for(size_t i=0;i<db_pool_size;i++){ m_dbs.push_back(new Xapian::Database(m_index_dir)); m_dbs_busy.push_back(false); m_dbs_last_reload_ts.push_back(time(0)); } TB_INFO("database doccount: "<<m_dbs[0]->get_doccount()); Session* new_session = create_session(); new_session->init(); acceptor_.async_accept(new_session->socket(), boost::bind(&Server::handle_accept, this, new_session, boost::asio::placeholders::error)); return true; }
static void test_BigInt_getsetOctetString(void) { const uint8_t os1[] = { 1, 2, 3, 4 }; const uint8_t os2[] = { 1, 2, 3, 4, 5 }; const uint8_t os3[] = { 0, 1, 2, 3, 4 }; const uint8_t os4[] = { 0x11, 0x22, 0x44, 0x55, 0x66, 0x77, 0x88 }; uint8_t os_res[10]; TEE_Result res; size_t os_len; DEF_BIGINT(a, 512); DEF_BIGINT(b, 512); TB_INFO("Testing Convert to and from OctetString"); /* Test with 0x0102030405 */ TEE_BigIntConvertFromString(a, "0x0102030405"); os_len = sizeof(os_res); res = TEE_BigIntConvertToOctetString(os_res, &os_len, a); TB_ASSERT(res == TEE_SUCCESS); TB_ASSERT(sizeof(os2) == os_len && TEE_MemCompare(os2, os_res, sizeof(os2)) == 0); res = TEE_BigIntConvertFromOctetString(b, os_res, os_len, 1); TB_ASSERT(res == TEE_SUCCESS); TB_ASSERT(TEE_BigIntCmp(a, b) == 0); /* Test with 0x11224455667788 */ TEE_BigIntConvertFromString(a, "0x11224455667788"); os_len = sizeof(os_res); res = TEE_BigIntConvertToOctetString(os_res, &os_len, a); TB_ASSERT(res == TEE_SUCCESS); TB_ASSERT(sizeof(os4) == os_len && TEE_MemCompare(os4, os_res, sizeof(os4)) == 0); res = TEE_BigIntConvertFromOctetString(b, os_res, os_len, 1); TB_ASSERT(res == TEE_SUCCESS); TB_ASSERT(TEE_BigIntCmp(a, b) == 0); /* Test with static octet strings */ res = TEE_BigIntConvertFromOctetString(a, os1, sizeof(os1), 1); TB_ASSERT(res == TEE_SUCCESS); os_len = sizeof(os_res); res = TEE_BigIntConvertToOctetString(os_res, &os_len, a); TB_ASSERT(res == TEE_SUCCESS); TB_ASSERT(sizeof(os1) == os_len && TEE_MemCompare(os1, os_res, sizeof(os1)) == 0); res = TEE_BigIntConvertFromOctetString(b, os3, sizeof(os3), 1); TB_ASSERT(res == TEE_SUCCESS); TB_ASSERT(TEE_BigIntCmp(a, b) == 0); DEL_BIGINT(a); DEL_BIGINT(b); }
static void large_composites(void) { TB_INFO("Large Composites"); DEF_BIGINT(x, 2048); IS_COMPOSITE("136233FDE5569"); IS_COMPOSITE("177B96388FD94D5D7EC9AE513"); IS_COMPOSITE("22770A7DC599BC90B2FF981CCB5CF05703344C8F3504189ED"); IS_COMPOSITE("0002ECD5_3B215054_2D1494A4_24D50322_EBABBBD5_DB89392A_368D7759"); IS_COMPOSITE("00000004_C8971C2B_6F7A8503_AB80749E_2BBA5BB6_B6031BD4_3564DCA8_003F0E3E_54E677A0_A4B1B615_3662B313_0C11C273_C0F94084_45B2ABB4_7D64153B_EB48C154_659FDFDE_DC496C8E_A81AA7B7_CE2B2CB1_AA7C8B40_7DE8C86F_122607B2_A226385D_9432F6CB_30B5E4DE_033E3363_D48A1865_D9BC95DC_7883D9DC_9331691A_17964979"); IS_COMPOSITE("00038AFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFEA_5C6D11ED_D2905192_C5429E6A_6D796E89_250BF563_DA53D393_25129B70_435894B5_6E337D58_66F0BEF6_63D6C26D_A889B69D_4B1508ED_63A17AFD_8BC0C5BE_09AC18B6_4B2B7D87_279D32EB_4F3375C1_0D58DF1F_7CA2147A_61CFA557_235244D4_A4700AB5_953C4C6E_D428EB5F_09F07DAE_D46A995B_8FFE48EF_B93390C9_60685A31_987879F8_18CCE9B9_816E13DE_E4BEA5CC_38C56A5D_1983425D_DD909C88_463B447F"); DEL_BIGINT(x); }
static void simple(void) { TB_INFO("Simple cases"); DEF_BIGINT(x, 2048); IS_COMPOSITE("0"); IS_COMPOSITE("1"); IS_PRIME("2"); IS_PRIME("3"); IS_PRIME("17"); IS_PRIME("FA1"); IS_COMPOSITE("FA0"); DEL_BIGINT(x); }
static void large_primes(void) { TB_INFO("Large Primes"); DEF_BIGINT(x, 2048); IS_PRIME("000136A3_52B2C7A5"); IS_PRIME("00000002_2770A7DC_599BC90B_2FF981CC_B5CF0570_3344C8F3_50418AAD"); IS_PRIME("000067E0_4F440C5F_ECCA2694_B1A4AB4F_CEC2D2B2_D286FC93_DD259D2B_36A3A00D_F3726A4D_4DFA9919_5998D92F_43DD7370_B8C079E2_3072036F_0C13F3F6_ABA1D6DF"); IS_PRIME("000BC9F7_E42CE741_32EC6933_DE1B8357_CD2AEB9E_4B8A5F26_BD233D1E_6F295555_4D2CFA97_60F3F69C_CC52E8E4_28F68C37_AD5BC70C_DB12F4DC_EF23CB10_1C36A2A7"); IS_PRIME("00000005_233FE157_B5B44102_598513AE_BB8876B0_D1791769_C8A1B0F3_6875D06F_E26951C7_372192C7_B21CAB67_ADF0D6FE_1A718FB3_FC4A5145_4DE87CD3_F852005B_AAEC35D5"); IS_PRIME("0000001A_655954FB_C4408E09_FE97EB82_5E0F0964_26B42317_A36E53FF_9608DD3F_A6610402_45906334_496987EF_B14BEA5F_7C050444_C9B22A09_EC76AF4E_BDC609D8_A90C05E9_E5AF0682_9C542DFC_F7E6B9DC_0B065659_C1816309_CD6012C3_7F8CE649_8DECF850_F33943F0_F8308140_6846D306_22E0BCE6_97E612FC_1F7A5D90_2280D6E0_3009E585"); DEL_BIGINT(x); }
static void test_div_basic(void) { TB_INFO(" Testing basic cases"); DEF_BIGINT(n, 2048); DEF_BIGINT(d, 2048); DEF_BIGINT(q, 2048); DEF_BIGINT(r, 2048); DEF_BIGINT(v, 2048); SELF_VERIFY_DIV("8111_1110_0000_0001_12345678", "8000000012345678"); DIV("0", "1", "0"); DIV("1", "1", "1"); DIV("b7fb", "5", "24CB"); DIV("124378912734891273894712890347102358129034789120374", "1984086C15FA011154C86FA68", "B73D14EC7205D3311F6E78411D"); SELF_VERIFY_DIV("124378912734891273894712890347102358129034789120374", "1984086C15FA011154C86FA68"); SELF_VERIFY_DIV("-124378912734891273894712890347102358129034789120374", "1984086C15FA011154C86FA68"); SELF_VERIFY_DIV("124378912734891273894712890347102358129034789120374", "-1984086C15FA011154C86FA68"); SELF_VERIFY_DIV("-124378912734891273894712890347102358129034789120374", "-1984086C15FA011154C86FA68"); SELF_VERIFY_DIV("12345678", "10"); SELF_VERIFY_DIV("-12345678", "10"); SELF_VERIFY_DIV("12345678", "-10"); SELF_VERIFY_DIV("-12345678", "-10"); SELF_VERIFY_DIV("12345678901234567890123456789012345678901", "10"); SELF_VERIFY_DIV("1234567890123456789012345678901234567890", "10"); SELF_VERIFY_DIV("123456789012345678901234567890123456789", "10"); DEL_BIGINT(n); DEL_BIGINT(d); DEL_BIGINT(q); DEL_BIGINT(r); DEL_BIGINT(v); }
/*------------------------------------------------------------ * * test_BigIntInit * */ static void test_BigIntInit(void) { TEE_BigInt *a; size_t aLen; TB_INFO("Testing BigIntInit"); /* Testing normal allocation and initialization */ aLen = TEE_BigIntSizeInU32(512); a = (TEE_BigInt *) TEE_Malloc(aLen * sizeof(TEE_BigInt), 0); TEE_BigIntInit(a, aLen); TEE_Free(a); /* Testing zero allocation */ aLen = TEE_BigIntSizeInU32(0); a = (TEE_BigInt *) TEE_Malloc(aLen * sizeof(TEE_BigInt), 0); TEE_BigIntInit(a, aLen); TEE_Free(a); /* Testing too large */ aLen = TEE_BigIntSizeInU32(4096); a = (TEE_BigInt *) TEE_Malloc(aLen * sizeof(TEE_BigInt), 0); TEE_BigIntInit(a, aLen); TEE_Free(a); /* Testing boundaries */ aLen = TEE_BigIntSizeInU32(2048); a = (TEE_BigInt *) TEE_Malloc(aLen * sizeof(TEE_BigInt), 0); TEE_BigIntInit(a, aLen); TEE_Free(a); aLen = TEE_BigIntSizeInU32(2049); a = (TEE_BigInt *) TEE_Malloc(aLen * sizeof(TEE_BigInt), 0); TEE_BigIntInit(a, aLen); TEE_Free(a); }
static void test_modexp(void) { TEE_BigIntFMMContext *context; size_t nLen; const char *nstr; const char *xstr; const char *estr; const char *resstr; int nbitsize; TB_INFO(" Testing modular exponentiation"); DEF_BIGINT(dest, 2048); DEF_BIGINT(x, 2048); DEF_BIGINT(e, 2048); DEF_BIGINT(n, 2048); nstr = "2C8D59AF47C81AB3725B472BE417E3BF" "7AB85439AF726ED3DFDF66489D155DC0" "B771C7A50EF7C5E58FB"; nbitsize = 330; xstr = "18EE90FF6C373E0EE4E3F0AD2"; estr = "AB54A98CEB1F0AD2"; resstr = "23F455C413C2F037A8A1D06CCFD007BE" "021ABEEE4CE522990A67C65CA94922BD" "822218A79BE6A0AB00C"; MOD_EXP_TEST; nstr = "FFF1FFF1"; nbitsize = 33; xstr = "ABCDEF"; estr = "1234567"; resstr = "E9D974C2"; MOD_EXP_TEST; nstr = "C7970CEEDCC3B0754490201A7AA613CD" "73911081C790F5F1A8726F463550BB5B" "7FF0DB8E1EA1189EC72F93D1650011BD" "721AEEACC2ACDE32A04107F0648C2813" "A31F5B0B7765FF8B44B4B6FFC93384B6" "46EB09C7CF5E8592D40EA33C80039F35" "B4F14A04B51F7BFD781BE4D1673164BA" "8EB991C2C4D730BBBE35F592BDEF524A" "F7E8DAEFD26C66FC02C479AF89D64D37" "3F442709439DE66CEB955F3EA37D5159" "F6135809F85334B5CB1813ADDC80CD05" "609F10AC6A95AD65872C909525BDAD32" "BC729592642920F24C61DC5B3C3B7923" "E56B16A4D9D373D8721F24A3FC0F1B31" "31F55615172866BCCC30F95054C824E7" "33A5EB6817F7BC16399D48C6361CC7E5"; nbitsize = 2048; xstr = "63CB86776E61D83AA248100D3D5309E6" "B9C88840E3C87AF8D43937A31AA85DAD" "BFF86DC70F508C4F6397C9E8B28008DE" "B90D775661566F19502083F832461409" "D18FAD85BBB2FFC5A25A5B7FE499C25B" "237584E3E7AF42C96A07519E4001CF9A" "DA78A5025A8FBDFEBC0DF268B398B25D" "475CC8E1626B985DDF1AFAC95EF7A925" "7BF46D77E936337E01623CD7C4EB269B" "9FA21384A1CEF33675CAAF9F51BEA8AC" "FB09AC04FC299A5AE58C09D6EE406682" "B04F8856354AD6B2C396484A92DED699" "5E394AC9321490792630EE2D9E1DBC91" "F2B58B526CE9B9EC390F9251FE078D98" "98FAAB0A8B94335E66187CA82A641273" "99D2F5B40BFBDE0B1CCEA4631B0E63F3"; estr = "31E5C33BB730EC1D512408069EA984F3" "5CE4442071E43D7C6A1C9BD18D542ED6" "DFFC36E387A84627B1CBE4F45940046F" "5C86BBAB30AB378CA81041FC19230A04" "E8C7D6C2DDD97FE2D12D2DBFF24CE12D" "91BAC271F3D7A164B503A8CF2000E7CD" "6D3C52812D47DEFF5E06F93459CC592E" "A3AE6470B135CC2EEF8D7D64AF7BD492" "BDFA36BBF49B19BF00B11E6BE275934D" "CFD109C250E7799B3AE557CFA8DF5456" "7D84D6027E14CD2D72C604EB77203341" "5827C42B1AA56B5961CB2425496F6B4C" "AF1CA564990A483C93187716CF0EDE48" "F95AC5A93674DCF61C87C928FF03C6CC" "4C7D558545CA19AF330C3E5415320939" "CCE97ADA05FDEF058E6752318D8731FA"; resstr = "4F7CAEC2D0663A719DC73CF51030906D" "320E9B7AB19AAAF887EFA16E1A92C829" "D7AC7F984E792C94955EFDE31E97E716" "3D9193D3F4A4656EF94C3202DC84D499" "5D25EC33C5284635285639E7B59EB92C" "CA883348AE1F5B78098B0DE87C718CF0" "AA7BE51623A57C1DD8BD1B72E9F0FD17" "98085A5E100810C740C45DB79D391F48" "8BC4ACB3F3C24D5948A994637FF4593B" "7FA8D07F88649EFEED2840EAC47248B6" "5BD3A09A923065A0BDA0EBEB6340AAE1" "08701FEB85811D628467A8D2CCC2D888" "5DE807D0CF65B254B3435E9F844AA86F" "3795ACC2EF71DE64F55EBC638B88B964" "E5C2D55F8F7E3F00B0FC86C19C6AF1EA" "B5CC45E90D7464BA230298F660DDE812"; MOD_EXP_TEST; nstr = "000000022770A7DC599BC90B2FF981CCB5CF05703344C8F3504189ED"; nbitsize = 2048; xstr = "000000020BCFDDA4E89FE86AAC303CB3D767FE66627C797794403831"; estr = "89DC29F71666F242CBFE60732D73C15C0CD1323CD410627B"; resstr = "7202419F1301F56B6D0BF9F287D49061F6F378426A78533F"; MOD_EXP_TEST; nstr = "00000002_2770A7DC_599BC90B_2FF981CC_B5CF0570_3344C8F3_50418AAD"; nbitsize = 2048; xstr = "00000001_8D359BB6_4F9B75A9_357C8215_E1E4D5F1_764D016C_F0130738"; estr = "89DC29F7_1666F242_CBFE6073_2D73C15C_0CD1323C_D41062AB"; resstr = "1"; MOD_EXP_TEST; DEL_BIGINT(dest); DEL_BIGINT(x); DEL_BIGINT(e); DEL_BIGINT(n); }