⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 u_isem.c

📁 ICCP Toolkit 是在 Tru64下开发Tase.2通信协议的开发包
💻 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 + -