📄 u_isem.c
字号:
/************************************************************************//* SISCO SOFTWARE MODULE HEADER *****************************************//************************************************************************//* (c) Copyright Systems Integration Specialists Company, Inc., *//* 1986 - 1997, All Rights Reserved. *//* *//* MODULE NAME : u_isem.c *//* PRODUCT(S) : MMSEASE *//* *//* MODULE DESCRIPTION : *//* This module contains user defined code to service semaphore *//* management indications. These functions are invoked from *//* the 'mms_ind_serve' function, and should perform the request *//* action. *//* *//* GLOBAL FUNCTIONS DEFINED IN THIS MODULE : *//* *//* MODIFICATION LOG : *//* Date Who Rev Comments *//* -------- --- ------ ------------------------------------------- *//* 04/15/97 DSF 7.00 MMSEASE 7.0 release. See MODL70.DOC for *//* history. *//************************************************************************/#include "glbtypes.h"#include "sysincs.h"#include "mms_usr.h"#include "mms_psem.h"#include "userdefs.h"#include "mmsop_en.h"#include "gvaldefs.h"#include "scrndefs.h"#include "fkeydefs.h"static ST_BOOLEAN done; /* used for input loop control */static ST_INT tot_len; /* used for total string len */static ST_INT num; /* integer used for input */static ST_LONG lnum; /* long integer used for input *//************************************************************************//* For debug version, use a static pointer to avoid duplication of *//* __FILE__ strings. *//************************************************************************/#ifdef DEBUG_SISCOstatic ST_CHAR *thisFileName = __FILE__;#endif/************************************************************************//************************************************************************//* SEMAPHORE MANAGEMENT *//************************************************************************//************************************************************************//* TAKE CONTROL *//************************************************************************/#if MMS_TAKECTRL_EN & RESP_ENST_VOID u_takectrl_ind (MMSREQ_IND *req_info) {TAKECTRL_REQ_INFO *ptr;TAKECTRL_RESP_INFO rsp_info; if (mms_debug_sel & MMS_LOG_USR_IND) { indic_info_print (req_info,"Take Control "); ptr = (TAKECTRL_REQ_INFO *) req_info->req_info_ptr; print_objname (&(ptr->sem_name)); printf ("\n Named Token : "); if (ptr->named_token_pres) printf ("%s",ptr->named_token); else printf ("Not Present"); printf ("\n Priority : %u",ptr->priority); printf ("\n Acceptable Delay Time : "); if (ptr->acc_delay_pres) printf ("%lu",ptr->acc_delay); else printf ("Not Present"); printf ("\n Control Timeout Time : "); if (ptr->ctrl_timeout_pres) printf ("%lu",ptr->ctrl_timeout); else printf ("Not Present"); printf ("\n Abort On Timeout : "); if (ptr->abrt_on_timeout_pres) { if (ptr->abrt_on_timeout) printf ("SD_TRUE"); else printf ("FALSE"); } else printf ("NOT PRESENT"); printf ("\n Relinquish if Connection Lost : "); if (ptr->rel_conn_lost) printf ("YES"); else printf ("NO "); printf ("\n Application Preempt : "); if (ptr->app_preempt_pres) print_asn1_app_ref (ptr->app_preempt, ptr->app_len); else printf ("Not Present"); } /* create a default response */ rsp_info.resp_tag = 1; /* named token response */ strcpy (rsp_info.named_token, "named_token"); if (mms_debug_sel & MMS_LOG_USR_IND) { printf ("\n\n (0-Null, 1-Named Token)"); printf ("\n Enter response choice : (default = 0) "); rsp_info.resp_tag = 0; if (intget (&num)) { if (num == 1) { printf ( " Enter named token : (R) "); if (strget (tbuf)) { rsp_info.resp_tag = 1; tbuf [MAX_IDENT_LEN] = '\x00'; strcpy (rsp_info.named_token, tbuf); } } } } mp_takectrl_resp (req_info, &rsp_info); /* send the response */ indic_info_wait (); /* allow user to see indic info */ }#endif/************************************************************************//* RELINQUISH CONTROL *//************************************************************************/#if MMS_RELCTRL_EN & RESP_ENST_VOID u_relctrl_ind (MMSREQ_IND *req_info) {RELCTRL_REQ_INFO *ptr; if (mms_debug_sel & MMS_LOG_USR_IND) { indic_info_print (req_info,"Relinquish Control "); ptr = (RELCTRL_REQ_INFO *) req_info->req_info_ptr; print_objname (&(ptr->sem_name)); printf ("\n Named Token : "); if (ptr->named_token_pres) printf ("%s",ptr->named_token); else printf ("Not Present"); } mp_relctrl_resp (req_info); /* send the response */ indic_info_wait (); /* allow user to see indic info */ }#endif/************************************************************************//* REPORT SEMAPHORE STATUS *//************************************************************************/#if MMS_REP_SEMSTAT_EN & RESP_ENST_VOID u_rsstat_ind (MMSREQ_IND *req_info) {RSSTAT_REQ_INFO *ptr;RSSTAT_RESP_INFO rsp_info; if (mms_debug_sel & MMS_LOG_USR_IND) { indic_info_print (req_info,"Report Semaphore Status "); ptr = (RSSTAT_REQ_INFO *) req_info->req_info_ptr; print_objname (&(ptr->sem_name)); } rsp_info.mms_deletable = SD_TRUE; /* create a default response */ rsp_info.tclass = 0; rsp_info.num_of_tokens = 5; rsp_info.num_of_owned = 6; rsp_info.num_of_hung = 7; if (mms_debug_sel & MMS_LOG_USR_IND) { printf ("\n\n Enter MMS Deletable (y/n) : (default = SD_TRUE) "); tbuf[0] = 'y'; if (strget (tbuf)) { if (tbuf[0] == 'n' || tbuf[0] == 'N') rsp_info.mms_deletable = SD_FALSE; } printf (" (0-Token, 1-Pool)"); printf ("\n Enter class : (default = 0) "); rsp_info.tclass = 0; if (intget (&num)) { if (num == 1) rsp_info.tclass = 1; } printf (" Enter number of tokens : (default 0) "); rsp_info.num_of_tokens = 0; if (intget (&num)) rsp_info.num_of_tokens = (unsigned) num; printf (" Enter number of owned tokens : (default 0) "); rsp_info.num_of_owned = 0; if (intget (&num)) rsp_info.num_of_owned = (unsigned) num; printf (" Enter number of hung tokens : (default 0) "); rsp_info.num_of_hung = 0; if (intget (&num)) rsp_info.num_of_hung = (unsigned) num; } mp_rsstat_resp (req_info, &rsp_info); /* send the response */ indic_info_wait (); /* allow user to see indic info */ }#endif/************************************************************************//* REPORT POOL SEMAPHORE STATUS *//************************************************************************/#if MMS_REP_SEMPOOL_EN & RESP_ENST_VOID u_rspool_ind (MMSREQ_IND *req_info) {RSPOOL_REQ_INFO *ptr;RSPOOL_RESP_INFO *rsp_info;TOKEN_ID *tid_ptr; if (mms_debug_sel & MMS_LOG_USR_IND) { indic_info_print (req_info,"Report Pool Semaphore Status "); ptr = (RSPOOL_REQ_INFO *) req_info->req_info_ptr; print_objname (&(ptr->sem_name)); printf ("\n Application to Start After : "); if (ptr->start_after_pres) printf ("%s",ptr->start_after); else printf ("Not Present"); } /* create a default response */ rsp_info = (RSPOOL_RESP_INFO *) dest_buffer; tid_ptr = (TOKEN_ID *) (rsp_info + 1); rsp_info->num_of_tokens = 3; rsp_info->more_follows = SD_TRUE; tid_ptr->token_tag = 0; strcpy (tid_ptr->named_token, "free_token"); tid_ptr++; tid_ptr->token_tag = 1; strcpy (tid_ptr->named_token, "owned_token"); tid_ptr++; tid_ptr->token_tag = 2; strcpy (tid_ptr->named_token, "hung_token"); if (mms_debug_sel & MMS_LOG_USR_IND) { tid_ptr = (TOKEN_ID *) (rsp_info + 1); /* reinitialize */ rsp_info->num_of_tokens = 0; rsp_info->more_follows = SD_FALSE; done = SD_FALSE; printf ("\n\n"); while (!done) { done = SD_TRUE; /* set exit condition */ printf (" (0-Free, 1-Owned, 2-Hung)"); printf ("\n Enter Named Token Type : "); if (intget (&num)) { if (num == 0 || num == 1 || num == 2) { printf (" Enter Named Token : (R) "); if (strget (tbuf)) { tbuf [MAX_IDENT_LEN] = '\x00'; rsp_info->num_of_tokens++; tid_ptr->token_tag = num; strcpy (tid_ptr->named_token, tbuf); tid_ptr++; done = SD_FALSE; } } } } rsp_info->more_follows = (ST_BOOLEAN) ask (" Enter more follows (y/n) : (default = FALSE) ",0); } mp_rspool_resp (req_info, rsp_info); /* send the response */ indic_info_wait (); /* allow user to see indic info */ }#endif/************************************************************************//* REPORT SEMAPHORE ENTRY STATUS *//************************************************************************//* Hardcode the application reference to be used */ST_UCHAR app_ref[] = "\x30\x03\x80\x01\x02";#if MMS_REP_SEMENTRY_EN & RESP_ENST_VOID u_rsentry_ind (MMSREQ_IND *req_info) {RSENTRY_REQ_INFO *ptr;RSENTRY_RESP_INFO *rsp_info;SEMAPHORE_ENTRY *se_ptr;ST_CHAR *ent_id; if (mms_debug_sel & MMS_LOG_USR_IND) { indic_info_print (req_info,"Report Semaphore Entry Status "); ptr = (RSENTRY_REQ_INFO *) req_info->req_info_ptr; print_objname (&(ptr->sem_name)); printf ("\n Semaphore State : "); if (ptr->state == 0) printf ("Queued "); else if (ptr->state == 1) printf ("Owner "); else if (ptr->state == 2) printf ("Hung "); printf ("\n Entry Id to Start After : "); if (ptr->start_after_pres) list_bytes (ptr->start_after, ptr->sa_len); else printf ("Not Present"); } rsp_info = (RSENTRY_RESP_INFO *) dest_buffer; se_ptr = (SEMAPHORE_ENTRY *) (rsp_info + 1); ent_id = dest_buffer + 2048; rsp_info->num_of_sent = 2; /* create a default response */ rsp_info->more_follows = SD_TRUE; strcpy (ent_id, "entry id 1 "); se_ptr->entry_id = (ST_UCHAR *)ent_id; se_ptr->ei_len = strlen (ent_id); se_ptr->entry_class = 0; se_ptr->app_ref_len = 5; se_ptr->app_ref = app_ref; se_ptr->named_token_pres = SD_TRUE; strcpy (se_ptr->named_token, "named token 1 "); se_ptr->priority = 64; /* always the default */ se_ptr->rem_timeout_pres = SD_TRUE; se_ptr->rem_timeout = 128; se_ptr->abrt_on_timeout_pres = SD_TRUE; se_ptr->abrt_on_timeout = SD_TRUE; se_ptr->rel_conn_lost = SD_TRUE; ent_id += strlen (ent_id) + 1; se_ptr++; strcpy (ent_id, "entry id 2 "); se_ptr->entry_id = (ST_UCHAR *)ent_id; se_ptr->ei_len = strlen (ent_id); se_ptr->entry_class = 0; se_ptr->app_ref_len = 5; se_ptr->app_ref = app_ref; se_ptr->named_token_pres = SD_TRUE; strcpy (se_ptr->named_token, "named token 2 "); se_ptr->priority = 64; /* always the default */ se_ptr->rem_timeout_pres = SD_TRUE; se_ptr->rem_timeout = 256; se_ptr->abrt_on_timeout_pres = SD_TRUE; se_ptr->abrt_on_timeout = SD_FALSE; se_ptr->rel_conn_lost = SD_FALSE; if (mms_debug_sel & MMS_LOG_USR_IND) { se_ptr = (SEMAPHORE_ENTRY *) (rsp_info + 1); /* reinitialize */ ent_id = dest_buffer + 2048; tot_len = 0; rsp_info->num_of_sent = 0; done = SD_FALSE; printf ("\n\n"); while (!done) { printf (" Enter Semaphore Entry Id : "); if (strget (ent_id)) { rsp_info->num_of_sent++; se_ptr->ei_len = strlen (ent_id); se_ptr->entry_id = (ST_UCHAR *)ent_id; ent_id += strlen (ent_id) + 1; if (ask (" Entry Class Simple ?",1)) se_ptr->entry_class = 0; else se_ptr->entry_class = 1; se_ptr->app_ref_len = 5; se_ptr->app_ref = app_ref; printf (" Enter Named Token : (O) "); if (strget (tbuf)) { tbuf [MAX_IDENT_LEN] = '\x00'; se_ptr->named_token_pres = SD_TRUE; strcpy (se_ptr->named_token, tbuf); } else se_ptr->named_token_pres = SD_FALSE; se_ptr->priority = 64; printf (" Enter Remaining Timeout : (O) "); if (longget (&lnum)) { se_ptr->rem_timeout_pres = SD_TRUE; se_ptr->rem_timeout = (ST_UINT) lnum; } else se_ptr->rem_timeout_pres = SD_FALSE; if (ask ("\n Relinquish if Connection Lost (y/n) : (default = SD_TRUE) ",1)) se_ptr->rel_conn_lost = SD_TRUE; else se_ptr->rel_conn_lost = SD_FALSE; if (ask ("\n Send Abort On Timeout? ",0)) { se_ptr->abrt_on_timeout_pres = SD_TRUE; if (ask ("\n Abort On Timeout True? ",1)) se_ptr->abrt_on_timeout = SD_TRUE; else se_ptr->abrt_on_timeout = SD_FALSE; } else se_ptr->abrt_on_timeout_pres = SD_FALSE; se_ptr++; /* get another sem entry */ } else done = SD_TRUE; } printf (" Enter more follows (y/n) : (default = SD_TRUE) "); tbuf[0] = 'y'; if (strget (tbuf)) { if (tbuf[0] == 'n' || tbuf[0] == 'N') rsp_info->more_follows = SD_FALSE; } } mp_rsentry_resp (req_info, rsp_info); /* send the response */ indic_info_wait (); /* allow user to see indic info */ }#endif/************************************************************************//* DEFINE SEMAPHORE *//************************************************************************/#if MMS_DEFINE_SEM_EN & RESP_ENST_VOID u_defsem_ind (MMSREQ_IND *req_info) {DEFSEM_REQ_INFO *ptr; if (mms_debug_sel & MMS_LOG_USR_IND) { indic_info_print (req_info,"Define Semaphore "); ptr = (DEFSEM_REQ_INFO *) req_info->req_info_ptr; print_objname (&(ptr->sem_name)); printf ("\n Number of Tokens : %u",ptr->num_of_tokens); } mp_defsem_resp (req_info); /* send the response */ indic_info_wait (); /* allow user to see indic info */ }#endif/************************************************************************//* DELETE SEMAPHORE *//************************************************************************/#if MMS_DELETE_SEM_EN & RESP_ENST_VOID u_delsem_ind (MMSREQ_IND *req_info) {DELSEM_REQ_INFO *ptr; if (mms_debug_sel & MMS_LOG_USR_IND) { indic_info_print (req_info,"Delete Semaphore "); ptr = (DELSEM_REQ_INFO *) req_info->req_info_ptr; print_objname (&(ptr->sem_name)); } mp_delsem_resp (req_info); /* send the response */ indic_info_wait (); /* allow user to see indic info */ }#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -