static cps_api_return_code_t db_read_function (void * context, cps_api_get_params_t * param, size_t key_ix) { cps_api_return_code_t rc = cps_api_ret_code_OK; cps_api_key_t key; cps_api_key_init(&key,cps_api_qualifier_TARGET, cps_api_obj_cat_ROUTE, cps_api_route_obj_ROUTE, 0); if (cps_api_key_matches(¶m->keys[key_ix], &key,false)!=0) { return cps_api_ret_code_OK; } route_filter_t rf; memset(&rf,0,sizeof(rf)); //!TODO need to handle the filter requests (using the received key) read_all_routes(param->list,&rf); return rc; }
static cps_api_return_code_t _write_function(void * context, cps_api_transaction_params_t * param,size_t ix) { cps_api_object_t obj = cps_api_object_list_get(param->change_list,ix); if (obj==NULL) return cps_api_ret_code_ERR; cps_api_operation_types_t op = cps_api_object_type_operation(cps_api_object_key(obj)); cps_api_object_t prev = cps_api_object_create(); if (prev==NULL) return cps_api_ret_code_ERR; if (!cps_api_object_list_append(param->prev,prev)) { cps_api_object_delete(prev); return cps_api_ret_code_ERR; } cps_api_key_t _local_key; cps_api_key_init(&_local_key,cps_api_qualifier_TARGET,cps_api_obj_cat_ROUTE,cps_api_route_obj_EVENT,0); if (cps_api_key_matches(&_local_key,cps_api_object_key(obj),true)) { os_send_refresh(nas_nl_sock_T_ROUTE); } else { return _op(op,context,obj,prev); } return cps_api_ret_code_OK; }
cps_api_return_code_t ds_api_linux_interface_get_function (void * context, cps_api_get_params_t * param, size_t ix) { cps_api_return_code_t rc = cps_api_ret_code_OK; cps_api_key_t key; cps_api_int_if_key_create(&key,false,0,0); if (cps_api_key_matches(&(param->keys[ix]),&key,false)==0) { if (cps_api_key_get_len(¶m->keys[ix])<=CPS_OBJ_KEY_APP_INST_POS) { return get_all_interfaces(param->list); } else { uint32_t ifix = cps_api_key_element_at(¶m->keys[ix],CPS_API_INT_IF_OBJ_KEY_IFIX); char if_name[HAL_IF_NAME_SZ+1]; if (cps_api_interface_if_index_to_name(ifix,if_name, sizeof(if_name))==NULL) { return cps_api_ret_code_OK; } rc = get_interface(if_name,param,&ix); //toss rc on a query unless it fails due to some sw err } } return rc; }
TEST(cps_api_key,key_compare) { char buff1[1024]; char buff2[1024]; cps_api_key_t key; memset(&key,0,sizeof(key)); cps_api_key_set(&key,0,1); cps_api_key_set(&key,1,3); cps_api_key_set(&key,2,1); cps_api_key_set(&key,3,1); cps_api_key_set_len(&key,4); cps_api_key_t key2; memset(&key2,0,sizeof(key2)); cps_api_key_set(&key2,0,1); cps_api_key_set(&key2,1,3); cps_api_key_set(&key2,2,1); cps_api_key_set(&key2,3,1); cps_api_key_set_len(&key2,4); ASSERT_TRUE(cps_api_key_matches(&key,&key2,false)==0); cps_api_key_set(&key2,1,4); ASSERT_TRUE(cps_api_key_matches(&key,&key2,false)!=0); cps_api_key_set(&key2,1,3); cps_api_key_set(&key2,4,2); cps_api_key_set_len(&key2,3); ASSERT_TRUE(cps_api_key_matches(&key,&key2,false)==0); cps_api_key_set(&key2,1,2); cps_api_key_set_len(&key2,4); ASSERT_TRUE(cps_api_key_matches(&key,&key2,false)!=0); cps_api_key_t key3; memset(&key3,0,sizeof(key3)); cps_api_key_set(&key3,0,1); cps_api_key_set(&key3,1,3); cps_api_key_set(&key3,2,1); cps_api_key_set_len(&key3,3); ASSERT_TRUE(cps_api_key_matches(&key,&key3,true)!=0); cps_api_key_set_len(&key3,1); ASSERT_TRUE(cps_api_key_matches(&key,&key3,false)==0); cps_api_key_set_len(&key3,2); ASSERT_TRUE(cps_api_key_matches(&key,&key3,false)==0); cps_api_key_set(&key2,1,3); ASSERT_TRUE(cps_api_key_matches(&key,&key2,true)==0); printf("Key 1 %s, Key 2 %s\n",cps_api_key_print(&key,buff1,sizeof(buff1)), cps_api_key_print(&key2,buff2,sizeof(buff2))); cps_api_key_set_len(&key2,2); cps_api_key_set(&key2,2,4); ASSERT_TRUE(cps_api_key_matches(&key,&key2,false)==0); printf("Key 1 %s, Key 2 %s\n",cps_api_key_print(&key,buff1,sizeof(buff1)), cps_api_key_print(&key2,buff2,sizeof(buff2))); ASSERT_TRUE(cps_api_key_matches(&key2,&key,false)!=0); cps_api_key_set(&key2,2,2); cps_api_key_set(&key,2,0); ASSERT_TRUE(cps_api_key_matches(&key,&key2,false)==0); printf("Key 1 %s, Key 2 %s\n",cps_api_key_print(&key,buff1,sizeof(buff1)), cps_api_key_print(&key2,buff2,sizeof(buff2))); memset(&key2,0,sizeof(key2)); cps_api_key_copy(&key2,&key); ASSERT_TRUE(cps_api_key_matches(&key,&key2,true)==0); printf("Final\nKey 1 %s, Key 2 %s\n",cps_api_key_print(&key,buff1,sizeof(buff1)), cps_api_key_print(&key2,buff2,sizeof(buff2))); }