📄 apitest.c
字号:
/* * Test program for Local Resource Manager API. * * Copyright (C) 2004 Huang Zhen <zhenh@cn.ibm.com> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */#include <portability.h>#include <unistd.h>#include <stdio.h>#include <sys/poll.h>#include <string.h>#include <glib.h>#include <lrm/lrm_api.h>#include <syslog.h>void lrm_op_done_callback (lrm_op_t* op);void printf_rsc(lrm_rsc_t* rsc);void printf_op(lrm_op_t* op);void printf_hash_table(GHashTable* hash_table);void get_all_rsc(ll_lrm_t* lrm);void get_cur_state(lrm_rsc_t* rsc);int main (int argc, char* argv[]){ ll_lrm_t* lrm; lrm_rsc_t* rsc = NULL; lrm_op_t* op = NULL; const char* rid = "ip248"; GHashTable* param = NULL; int call_id; set_debug_level(0); lrm = ll_lrm_new("lrm"); if(NULL == lrm) { printf("lrm==NULL\n"); return 1; } puts("sigon..."); lrm->lrm_ops->signon(lrm,"apitest"); param = g_hash_table_new(g_str_hash,g_str_equal); g_hash_table_insert(param, strdup("1"), strdup("3ffe:ffff:0:f101::3")); puts("add_rsc..."); lrm->lrm_ops->add_rsc(lrm, rid, "heartbeat", "IPv6addr", NULL, param); puts("get_rsc..."); rsc = lrm->lrm_ops->get_rsc(lrm, rid); printf_rsc(rsc); puts("perform_op(start)..."); op = g_new0(lrm_op_t, 1); op->op_type = g_strdup("start"); op->params = param; op->timeout = 0; op->user_data = strdup("It is a start op!"); if ( op->user_data == NULL ) { fprintf(stderr, "No enough memory.\n"); return -1; } op->user_data_len = strlen(op->user_data)+1; op->interval = 0; op->target_rc = EVERYTIME; rsc->ops->perform_op(rsc,op); printf_op(op); puts("perform_op(status)..."); op = g_new0(lrm_op_t, 1); op->op_type = g_strdup("status"); op->params = param; op->timeout = 0; op->user_data = strdup("It is a status op!"); if ( op->user_data == NULL ) { fprintf(stderr, "No enough memory.\n"); return -1; } op->user_data_len = strlen(op->user_data)+1; op->interval = 1000; op->target_rc=EVERYTIME; call_id = rsc->ops->perform_op(rsc,op); printf_op(op); puts("perform_op(stop)..."); op = g_new0(lrm_op_t, 1); op->op_type = g_strdup("stop"); op->params = param; op->timeout = 0; op->user_data = strdup("It is a stop op!"); if ( op->user_data == NULL ) { fprintf(stderr, "No enough memory.\n"); return -1; } op->user_data_len = strlen(op->user_data)+1; op->interval = 0; op->target_rc=EVERYTIME; rsc->ops->perform_op(rsc,op); printf_op(op); puts("get_cur_state..."); get_cur_state(rsc); puts("stop_op..."); rsc->ops->cancel_op(rsc,call_id); puts("get_cur_state..."); get_cur_state(rsc); puts("sleep a while..."); sleep(10); puts("get_cur_state..."); get_cur_state(rsc); puts("delete_rsc..."); lrm->lrm_ops->delete_rsc(lrm, rid); puts("signoff..."); lrm->lrm_ops->signoff(lrm); return 0;}void lrm_op_done_callback(lrm_op_t* op){ puts("lrm_op_done_callback..."); printf_op(op);}void printf_rsc(lrm_rsc_t* rsc){ printf("print resource\n"); if (NULL == rsc) { printf("resource is null\n"); printf("print end\n"); return; } printf("\tresource of id:%s\n", rsc->id); printf("\ttype:%s\n", rsc->type); printf("\tclass:%s\n", rsc->class); printf("\tparams:\n"); printf_hash_table(rsc->params); printf("print end\n");}void printf_op(lrm_op_t* op){ printf("print op\n"); if (NULL == op) { printf("op is null\n"); printf("print end\n"); return; } printf("\top_type:%s\n",op->op_type?op->op_type:"null"); printf("\tparams:\n"); printf_hash_table(op->params); printf("\ttimeout:%d\n",op->timeout); printf("\tuser_data:%s\n",op->user_data?(char*)op->user_data:"null"); printf("\top_status:%d\n",op->op_status); printf("\tapp_name:%s\n",op->app_name?op->app_name:"null"); printf("\toutput:%s\n",op->output?op->output:"null"); printf("\trc:%d\n",op->rc);/* printf("\tcall_id:%d\n",op->call_id); */ printf("print end\n");}static voidprintf_pair(gpointer key, gpointer value, gpointer user_data){ printf("\t\t%s=%s\n",(char*)key,(char*)value);}voidprintf_hash_table(GHashTable* hash_table){ if (NULL == hash_table) { printf("\t\tnull\n"); return; } g_hash_table_foreach(hash_table, printf_pair, NULL);}voidget_all_rsc(ll_lrm_t* lrm){ GList* element = NULL, * rid_list = NULL; puts("get_all_rscs..."); rid_list = lrm->lrm_ops->get_all_rscs(lrm); if (NULL != rid_list) { element = g_list_first(rid_list); while (NULL != element) { printf("\tid:%s\n",(char*)element->data); element = g_list_next(element); } } else { puts("\tnone."); }}voidget_cur_state(lrm_rsc_t* rsc){ state_flag_t state; GList* node = NULL, * op_list = NULL; lrm_op_t* op = NULL; op_list = rsc->ops->get_cur_state(rsc, &state); printf("\tcurrent state:%s\n",state==LRM_RSC_IDLE?"Idel":"Busy"); for(node = g_list_first(op_list); NULL != node; node = g_list_next(node)) { op = (lrm_op_t*)node->data; printf_op(op); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -