home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 200-299 / ff294.lzh / DNet / amiga / dnet / ipc.c < prev    next >
C/C++ Source or Header  |  1989-12-11  |  4KB  |  275 lines

  1.  
  2. /*
  3.  *  IPC.C
  4.  *
  5.  *  Handle IPC messages
  6.  *
  7.  *  NOTE:   Only an explicit disconnect command will drop DTR, or when
  8.  *        the serial.device is closed.
  9.  */
  10.  
  11. static int dummy;
  12.  
  13. #ifdef NOTDEF
  14.  
  15. #include "dnet.h"
  16. #include <local/ipc.h>
  17.  
  18. #define IPCMDS struct _IPCMDS
  19.  
  20. void do_online(), do_offline(), do_stat(), do_quit(), do_disconnect();
  21. void do_state();
  22. void do_recvon(), do_recvoff(), do_serialon(), do_serialoff();
  23. void do_baud();
  24. void do_getidle(), do_getconnect(), do_setidlealert(), do_setconnectalert();
  25. void do_lessconnect(), do_resetconnect(), do_resetidle();
  26.  
  27. IPCMDS {
  28.     short args;
  29.     char *name;
  30.     void (*func)();
  31. };
  32.  
  33. IPCMDS IPCmds[] = {
  34.     0, "online" , do_online,
  35.     0, "offline", do_offline,
  36.     0, "stat", do_stat,
  37.     0, "quit", do_quit,
  38.     0, "disconnect", do_disconnect,
  39.     0, "state", do_state,
  40.     0, "recvon", do_recvon,
  41.     0, "recvoff", do_recvoff,
  42.     0, "serialon", do_serialon,
  43.     0, "serialoff", do_serialoff,
  44.     1, "baud", do_baud,
  45.  
  46.     0, "getidle", do_getidle,
  47.     0, "getconn", do_getconnect,
  48.     2, "setidlealert", do_setidlealert,
  49.     2, "setconnalert", do_setconnectalert,
  50.     1, "lessconn", do_lessconnect,
  51.     0, "resetconn", do_resetconnect,
  52.     0, "resetidle", do_resetidle
  53. };
  54.  
  55. handle_ipc()
  56. {
  57.     IPCMSG *msg;
  58.     char *ptr;
  59.  
  60.     while (msg = GetMsg(IPCPort)) {
  61.     long error = IF_ERROR;
  62.     char **av = NULL;
  63.     short ac = 0;
  64.     short i;
  65.     char *buf = NULL;
  66.     long len = 0;
  67.  
  68.     if (ptr = (char *)msg->TBuf) {
  69.         short networknum = atoi(ptr);
  70.         if (networknum == NetworkNum) {
  71.         while (*ptr++);
  72.         ac = ParseCmd(ptr, &av, NULL, NULL, &error, NULL);
  73.         } else {
  74.         error = IF_NOTFND;
  75.         }
  76.     }
  77.     for (i = 0; i < ac;) {
  78.         IPCMDS *cmds;
  79.  
  80.         for (cmds = IPCmds; cmds != ARYEND(IPCmds); ++cmds) {
  81.         if (strcmp(av[i], cmds->name) == 0)
  82.             break;
  83.         }
  84.         if (cmds == ARYEND(IPCmds)) {
  85.         error = IF_ERROR;
  86.         break;
  87.         }
  88.         if (i + cmds->args >= ac) {
  89.         error = IF_ERROR;
  90.         break;
  91.         }
  92.         error = 0;
  93.         (*cmds->func)(av + i, &buf, &len);
  94.         i += cmds->args + 1;
  95.     }
  96.     if (av)
  97.         FreeParseCmd(av);
  98.     ReplyIPC(msg, buf, len, error);
  99.     }
  100. }
  101.  
  102. void
  103. do_online()
  104. {
  105.     OnLine = 1;
  106. }
  107.  
  108. void
  109. do_offline()
  110. {
  111.     OnLine = 0;     /*    Take DNet off line  */
  112. }
  113.  
  114. void
  115. do_disconnect()
  116. {
  117.     OnLine = 0;     /*    Take DNet off line  */
  118.     DropDTR();      /*  and (temp) drop DTR */
  119. }
  120.  
  121. void
  122. do_quit()
  123. {
  124.     Quit = 1;        /*    Quit out of dnet    */
  125. }
  126.  
  127. void
  128. do_stat(av, pbuf, plen)
  129. char **pbuf;
  130. long *plen;
  131. {
  132.     char buf[256];
  133.     char *ptr = buf;
  134.  
  135.     sprintf(ptr, "         Bytes  Packets   Errors\n");
  136.     ptr += strlen(ptr);
  137.     sprintf(ptr, "OUT:  %8ld %8ld %8ld\n", BytesOut, PacketsOut, PacketsResent);
  138.     ptr += strlen(ptr);
  139.     sprintf(ptr, "IN :  %8ld %8ld %8ld\n", BytesIn, PacketsIn, PacketsNakd);
  140.     ptr += strlen(ptr);
  141.     sprintf(ptr, "Garbage Bytes In: %ld\n", GarbageIn);
  142.     ptr += strlen(ptr);
  143.     if (ptr - buf > sizeof(buf))
  144.     dneterror("do_stat: buffer overrun");
  145.     AllocAppend(pbuf, plen, buf, strlen(buf)+1);
  146. }
  147.  
  148. /*
  149.  *  Return machine state (ascii)
  150.  *
  151.  *  s iiii:ii oooo:oo        (s = 0/1 1=protrunning
  152.  *                 i = idle time hrs:min
  153.  *                 o = online time hrs:min
  154.  */
  155.  
  156. void
  157. do_state()
  158. {
  159.  
  160. }
  161.  
  162. AllocAppend(pbuf, plen, buf, len)
  163. char **pbuf;
  164. long *plen;
  165. char *buf;
  166. long len;
  167. {
  168.     char *new;
  169.     if (*pbuf) {
  170.     new = malloc(*plen + len);
  171.     BMov(*pbuf, new, *plen);
  172.     free(*pbuf);
  173.     *pbuf = new;
  174.     new += *plen;
  175.     } else {
  176.     *pbuf = new = malloc(len);
  177.     }
  178.     BMov(buf, new, len);
  179.     *plen += len;
  180. }
  181.  
  182. void
  183. do_recvon()
  184. {
  185.     NetRecvOn();
  186. }
  187.  
  188. void
  189. do_recvoff()
  190. {
  191.     NetRecvOff();
  192. }
  193.  
  194. void
  195. do_serialon()
  196. {
  197.     NetSerialOn();
  198. }
  199.  
  200. void
  201. do_serialoff()
  202. {
  203.     NetSerialOff();
  204. }
  205.  
  206. void
  207. do_baud(av)
  208. char **av;
  209. {
  210.     long baud = atoi(av[1]);
  211.     if (baud) {
  212.     Baud = baud;
  213.     SetBaudRate(baud);
  214.     }
  215. }
  216.  
  217. void
  218. do_getidle(av, pbuf, plen)
  219. char **av;
  220. char **pbuf;
  221. long *plen;
  222. {
  223.     char buf[32];
  224.     sprintf(buf, "%ld", GetIdle());
  225.     AllocAppend(pbuf, plen, buf, strlen(buf)+1);
  226. }
  227.  
  228. void
  229. do_getconnect(av, pbuf, plen)
  230. char **av;
  231. char **pbuf;
  232. long *plen;
  233. {
  234.     char buf[32];
  235.     sprintf(buf, "%ld", GetConnect());
  236.     AllocAppend(pbuf, plen, buf, strlen(buf)+1);
  237. }
  238.  
  239. void
  240. do_setidlealert(av)
  241. char **av;
  242. {
  243.     SetIdleAlert(atoi(av[1]), av[2]);
  244. }
  245.  
  246. void
  247. do_setconnectalert(av)
  248. char **av;
  249. {
  250.     SetConnectAlert(atoi(av[1]), av[2]);
  251. }
  252.  
  253. void
  254. do_lessconnect(av)
  255. char **av;
  256. {
  257.     LessConnect(atoi(av[1]));
  258. }
  259.  
  260. void
  261. do_resetconnect()
  262. {
  263.     ResetConnect();
  264. }
  265.  
  266. void
  267. do_resetidle()
  268. {
  269.     ResetIdle();
  270. }
  271.  
  272. #endif
  273.  
  274.  
  275.