pop_get_subcommand.c
上传用户:dayuan858
上传日期:2007-01-04
资源大小:194k
文件大小:2k
源码类别:

网络编程

开发平台:

Unix_Linux

  1. /*
  2.  * Copyright (c) 1989 Regents of the University of California.
  3.  * All rights reserved.  The Berkeley software License Agreement
  4.  * specifies the terms and conditions for redistribution.
  5.  */
  6. /*
  7.  * Copyright (c) 1997 by Qualcomm Incorporated.
  8.  */
  9. #include <config.h>
  10. #include <stdio.h>
  11. #include <sys/types.h>
  12. #include <string.h>
  13. #if HAVE_STRINGS_H
  14. #include <strings.h>
  15. #endif
  16. #include <popper.h>
  17. /* 
  18.  *  get_subcommand: Extract a POP XTND subcommand from a client input line
  19.  */
  20. static xtnd_table subcommands[] = {
  21.         "xmit",     0,  0,  pop_xmit,
  22. "xlst",     1,  2,  pop_xlst,
  23.         NULL
  24. };
  25. xtnd_table *pop_get_subcommand(p)
  26. POP     *   p;
  27. {
  28.     xtnd_table      *   s;
  29.     /*  Search for the POP command in the command/state table */
  30.     for (s = subcommands; s->subcommand; s++) {
  31.         if (strcmp(s->subcommand,p->pop_subcommand) == 0) {
  32.             /*  Were too few parameters passed to the subcommand? */
  33.             if ((p->parm_count-1) < s->min_parms) {
  34.                 pop_msg(p,POP_FAILURE,
  35.                     "Too few arguments for the %.128s %.128s command.",
  36.                         p->pop_command,p->pop_subcommand);
  37.                 return((xtnd_table *)0);
  38.             }
  39.             
  40.             /*  Were too many parameters passed to the subcommand? */
  41.             if ((p->parm_count-1) > s->max_parms) {
  42.                 pop_msg(p,POP_FAILURE,
  43.                     "Too many arguments for the %.128s %.128s command.",
  44.                         p->pop_command,p->pop_subcommand);
  45.                 return((xtnd_table *)0);
  46.             }
  47.             
  48.             /*  Return a pointer to the entry for this subcommand 
  49.                 in the XTND command table */
  50.             return (s);
  51.         }
  52.     }
  53.     /*  The client subcommand was not located in the XTND command table */
  54.     pop_msg(p,POP_FAILURE,
  55.             "Unknown command: "%.128s %.128s".",p->pop_command,p->pop_subcommand);
  56.     return((xtnd_table *)0);
  57. }