tw_cli_webclnt.c.svn-base
上传用户:hujq123
上传日期:2016-04-10
资源大小:153k
文件大小:5k
源码类别:

Telnet服务器

开发平台:

Unix_Linux

  1. /* 
  2.  * Copyright (C) 2002 Koninklijke Philips Electronics N.V., 
  3.  * All Rights Reserved. 
  4.  *
  5.  * This source code and any compilation or derivative thereof is the 
  6.  * proprietary information of Koninklijke Philips Electronics N.V. 
  7.  * and is confidential in nature. 
  8.  * Under no circumstances is this software to be exposed to or placed 
  9.  * under an Open Source License of any type without the expressed 
  10.  * written permission of Koninklijke Philips Electronics N.V. 
  11.  * 
  12.  *###########################################################
  13.  */ 
  14. /*! 
  15.  *      file           tw_cli_webclnt.c 
  16.  * 
  17.  *      brief          - 
  18.  * 
  19.  */ 
  20. /*-----------------------------------------------------------*
  21.  * 
  22.  *      %version:       3 % 
  23.  *      instance:       DS_5 
  24.  *      %date_created:  Fri Feb 21 08:04:47 2003 % 
  25.  *
  26.  *###########################################################
  27.  */ 
  28. /* tw_cli_webclnt.c
  29.    web client command line
  30.    wget and wput
  31. */
  32. #include <stdio.h>
  33. #include <stdarg.h>
  34. #include <string.h>
  35. #include <psos.h>
  36. #include <sys_conf.h>
  37. #include <tw_defs.h>
  38. #include <tw_cli.h>
  39. #include <ctype.h>
  40. #include <stdlib.h>
  41. #include <ops/custom_ops.h>
  42. #include <tw_cycles.h>
  43. #include <socket_app.h>
  44. #include <netdb.h>
  45. #include <inet.h>
  46. #include <web_client.h>
  47. /* local definitions */
  48. #define MAX_WGET_ARGS  7
  49. #define MAX_URL_LEN    256
  50. #define MAX_NAME_LEN   128
  51. #define MAX_BUF_LEN    1024
  52. /* Structures needed for cli */
  53. static int CliCoProc_Wget(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr);
  54. Cli_CmdStruct_t  CliRco_Wget = 
  55.     "wget",
  56.     ALL_ACCESS_MODE | ALL_PRODUCT_TYPE,
  57.     NULL,
  58.     "usage: wget [-q] <url> [filename]",
  59.     NULL,
  60.     NULL,
  61.     CliCoProc_Wget,
  62. };
  63. /* get_args
  64.    take a command line string and build a list of parameters
  65.    so that I can more easily port code from Linux
  66.  */
  67. int
  68. get_args(char *str, char **argv)
  69. {
  70.     int argc;
  71.     char *p;
  72.     argc = 0;
  73.     for(p = str; *p != '';)
  74.     {
  75.         argv[argc] = p;
  76.         while(!isspace(*p) && (*p != ''))
  77.         {
  78.             p++;
  79.         }
  80.         argc++;
  81.         if(argc == MAX_WGET_ARGS)
  82.         {
  83.             return -1;
  84.         }
  85.         if(*p != '')
  86.         {
  87.             /* NULL terminate the string */
  88.             *p = '';
  89.             p++;
  90.         }
  91.         while(isspace(*p) && (*p != ''))
  92.         {
  93.             p++;
  94.         }
  95.     }
  96.     return argc;
  97. }
  98. int
  99. put_args(char **argv, int argc)
  100. {
  101.     int i;
  102.     char *p;
  103.     /* set every argv value but the last one to
  104.        have a space instead of the NULL termination
  105.     */
  106.     for(i=0; i<(argc-1); i++)
  107.     {
  108.         p = argv[i];
  109.         while(*p != '') p++;
  110.         *p = ' ';
  111.     }
  112.     return 0;
  113. }
  114. static int
  115. CliCoProc_Wget(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr)
  116. {
  117.     int argc, i, s;
  118.     char *argv[MAX_WGET_ARGS];
  119.     char uri[MAX_URL_LEN];
  120.     char name[MAX_NAME_LEN];
  121.     char buf[MAX_BUF_LEN];
  122.     int proto = 0;
  123.     int quiet = 0, sts, err;
  124.     int len;
  125.     int loops;
  126.     int bytes;
  127.     unsigned start_cycles ;
  128.     float bandwidth, secs;
  129.     memset(uri, 0, sizeof(uri));
  130.     memset(name, 0, sizeof(name));
  131.     memset(buf, 0, sizeof(buf));
  132.     argc = get_args(CmdStr, argv);
  133.     if(argc < 0)
  134.     {
  135.         Cli_Printf(pSess,"wget: too many argumentsn");
  136.         return 0;
  137.     }
  138.     for(i=1; i<argc; i++)
  139.     {
  140.         switch(argv[i][0])
  141.         {
  142.         case '-':
  143.             switch(argv[i][1])
  144.             {
  145.             case 'q':
  146.                 quiet = 1;
  147.                 break;
  148.             }
  149.             break;
  150.         default:
  151.             proto = parse_url(argv[i], name, uri);
  152.             break;
  153.         }
  154.     }
  155.     put_args(argv, argc);
  156.     switch(proto)
  157.     {
  158.     case HTTP_PROTO:
  159. /*        s = webclnt_open(name, HTTP_DEFAULT_PORT);*/
  160.         s = webclnt_open(name, 6454);
  161.         if(s < 0)
  162.         {
  163.             Cli_Printf(pSess, "wget: couldn't open %sn", name);
  164.             return 0;
  165.         }
  166.         len = webclnt_get(s, name, uri);
  167.         if(len < 0)
  168.         {
  169.             Cli_Printf(pSess, "wget: get failed %sn", uri);
  170.         }
  171.         Cli_Printf(pSess,"wget: %s %s %dn", name, uri, len);
  172. /*        while(len > 0)*/
  173.         bytes = 0 ;
  174.         loops = 0 ;
  175.         start_cycles = cycles() ;
  176.         while (TRUE)
  177.         {
  178.             printf("bytes %08x loops %08x cycles %08xn",
  179.                    bytes, loops, cycles()-start_cycles) ;
  180.             sts = webclnt_read(s, buf, sizeof(buf));
  181.             if(sts < 0)
  182.             {
  183.                 Cli_Printf(pSess, "wget: recv failed from servern");
  184.                 break;
  185.             }
  186. /*            len -= sts;*/
  187.             len -= sts ;
  188.             bytes += sts ;
  189.             loops++ ;
  190.             if(!quiet)
  191.                 printf("%s", buf);
  192.         }
  193.         printf("donen") ;
  194.         webclnt_close(s);
  195.         break;
  196.     default:
  197.         Cli_Printf(pSess, "Unsupported protocoln");
  198.         break;        
  199.     }
  200.     return 0;
  201. }