📄 dce_client.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 + -