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

📄 dce_client.c

📁 Ho Chi Minh City University of Technology Computer Science Department Distributed Computing E
💻 C
字号:
/***************************************Ho Chi Minh City University of Technology    Computer Science Department Distributed Computing Environment (DCE)Written by Nguyen Van Noi -59406114File dce_client.c on Thu Dec 24 03:12:34 1998****************************************/#include <sys/varargs.h>#include "dce_client.h"#define MAXCLIENTARGV  20#define MAXREQUEST 	3#define CLIENTTIMEOUT  5*TIMEOUT_IAMALIVE+1pmatrixdce_service (const char *servicename, pmatrix pm,...){  pmatrix _pm[MAXCLIENTARGV], pt = pm;  ClientDes Client;  MSG msg;  int nParam = 0, nTimes = MAXREQUEST, nTimeOut = CLIENTTIMEOUT, fd;  va_list ap;  static char *_szwho[] =  {"ADMIN", "AGENT", "SERVER", "SERVICE", "CLIENT", "UNKNOWN", NULL};  static int i;  if (!i)    if (!dce_timer_init ())      return NULL;    else      i++;  if (!servicename)    {#ifdef VIEW      fprintf (stderr, "Service name must not be NULL\n");#endif      return NULL;    }  if (strlen (servicename) > MAXSERVICENAMELEN)    {#ifdef VIEW      fprintf (stderr, "Length of Servicename %s very long \n", servicename);#endif      return NULL;    }  Client.Msg.who = CLIENT;  Client.Msg.saddr = getmyaddr ();  Client.Msg.uid = getuid ();  Client.Msg.order = 0;  if (!dce_readconf (&Client.maddr, &Client.mport))    return NULL;  if ((Client.nMSockSend = dce_mcastsocksend ()) < 0)    return NULL;  if ((Client.nSocket = dce_socket (&Client.Msg.sport)) < 0)    return NULL;  /*Client.Msg.eaddr *//*Client.Msg.eport=Client.Msg.sport; */  va_start (ap, pm);  while (pt)    {      _pm[nParam] = pt;      nParam++;      if (nParam > MAXCLIENTARGV)	break;      pt = va_arg (ap, pmatrix);    }  va_end (ap);#ifdef VIEW  fprintf (stderr, "Number of param %d \nUsername %s\n", nParam, ascuserid (Client.Msg.uid));#endif  pt = NULL;  Client.Msg.type = DCE_MSG_CLIENT_REQUEST_AGENT_SERVICE;  Client.Msg.nextra = nParam;  strcpy (Client.Msg.sername, servicename);  while (nTimes--)    {      dce_mcastsendsend (Client.nMSockSend, Client.maddr, Client.mport, (char *) &Client.Msg, sizeof (MSG));      nTimeOut = CLIENTTIMEOUT;      Client.TimerId = dce_settimer (nTimeOut, dce_timerzero, (void *) &nTimeOut);      while (nTimeOut)	{	  if ((fd = dce_socketaccept (Client.nSocket)) < 0)	    continue;	  dce_killtimer (Client.TimerId);	  read (fd, &msg, sizeof (msg));	  switch (msg.type)	    {/************************************************/	    case DCE_MSG_AGENT_REPLY_CLIENT_NOSERVER:#ifdef VIEW	      fprintf (stderr, "Reply from %s %s :No server running on DCE system\n", _szwho[msg.who], ascaddr (msg.saddr));#endif	      close (fd);	      close (Client.nMSockSend);	      close (Client.nSocket);	      return NULL;	      break;/************************************************/	    case DCE_MSG_AGENT_REPLY_CLIENT_USERNOTFOUND:#ifdef VIEW	      fprintf (stderr, "Reply from %s %s :User %s not allowed on  DCE system\n", _szwho[msg.who], ascaddr (msg.saddr), ascuserid (Client.Msg.uid));#endif	      close (fd);	      close (Client.nMSockSend);	      close (Client.nSocket);	      return NULL;	      break;/************************************************/	    case DCE_MSG_AGENT_REPLY_CLIENT_NOSERVICE:#ifdef VIEW	      fprintf (stderr, "Reply from %s %s :Service : %s  not found on  DCE system\n", _szwho[msg.who], ascaddr (msg.saddr), servicename);#endif	      close (fd);	      close (Client.nMSockSend);	      close (Client.nSocket);	      return NULL;	      break;/************************************************/	    case DCE_MSG_ALL_REPLY_CLIENT_ERROR:#ifdef VIEW	      fprintf (stderr, "Reply from %s %s :Error in data transfered to service : %s\n", _szwho[msg.who], ascaddr (msg.saddr), servicename);#endif	      close (fd);	      close (Client.nMSockSend);	      close (Client.nSocket);	      return NULL;	      break;/************************************************/	    case DCE_MSG_ALL_REPLY_CLIENT_PLEASEWAIT:#ifdef VIEW	      fprintf (stderr, "Reply from %s %s :Please wait the result of : %s\n", _szwho[msg.who], ascaddr (msg.saddr), servicename);#endif	      break;/************************************************/	    case DCE_MSG_SERVICE_REQUEST_CLIENT_DATA:#ifdef VIEW	      fprintf (stderr, "Request from %s %s : Transfer data : matrix %d\n", _szwho[msg.who], ascaddr (msg.saddr), msg.sport);#endif	      writematrix (fd, _pm[msg.sport]);	      break;/************************************************/	    case DCE_MSG_SERVICE_REPLY_CLIENT_DATA:	      sleep (1);	      pt = readmatrix (fd);#ifdef VIEW	      fprintf (stderr, "Reply from %s %s : Receive result matrix ....", _szwho[msg.who], ascaddr (msg.saddr));	      if (pt)		fprintf (stderr, "Successfully\n");	      else		fprintf (stderr, "Error with failure!\n");#endif	      close (fd);	      close (Client.nMSockSend);	      close (Client.nSocket);	      return pt;	      break;	    }	  close (fd);	  nTimeOut = CLIENTTIMEOUT;	  Client.TimerId = dce_settimer (nTimeOut, dce_timerzero, (void *) &nTimeOut);	}#ifdef VIEW      fprintf (stderr, "Request timeout .Retry !\n");#endif    }#ifdef VIEW  fprintf (stderr, "End of request with failure !\n");#endif  close (Client.nMSockSend);  close (Client.nSocket);  return NULL;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -