亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? webclient.c

?? uip1.0原代碼和用戶手冊,適用于單片機嵌入tcp/ip協議棧.
?? C
字號:
/** * \addtogroup apps * @{ *//** * \defgroup webclient Web client * @{ * * This example shows a HTTP client that is able to download web pages * and files from web servers. It requires a number of callback * functions to be implemented by the module that utilizes the code: * webclient_datahandler(), webclient_connected(), * webclient_timedout(), webclient_aborted(), webclient_closed(). *//** * \file * Implementation of the HTTP client. * \author Adam Dunkels <adam@dunkels.com> *//* * Copyright (c) 2002, Adam Dunkels. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above *    copyright notice, this list of conditions and the following *    disclaimer in the documentation and/or other materials provided *    with the distribution. * 3. The name of the author may not be used to endorse or promote *    products derived from this software without specific prior *    written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * This file is part of the uIP TCP/IP stack. * * $Id: webclient.c,v 1.2 2006/06/11 21:46:37 adam Exp $ * */#include "uip.h"#include "uiplib.h"#include "webclient.h"#include "resolv.h"#include <string.h>#define WEBCLIENT_TIMEOUT 100#define WEBCLIENT_STATE_STATUSLINE 0#define WEBCLIENT_STATE_HEADERS    1#define WEBCLIENT_STATE_DATA       2#define WEBCLIENT_STATE_CLOSE      3#define HTTPFLAG_NONE   0#define HTTPFLAG_OK     1#define HTTPFLAG_MOVED  2#define HTTPFLAG_ERROR  3#define ISO_nl       0x0a#define ISO_cr       0x0d#define ISO_space    0x20static struct webclient_state s;/*-----------------------------------------------------------------------------------*/char *webclient_mimetype(void){  return s.mimetype;}/*-----------------------------------------------------------------------------------*/char *webclient_filename(void){  return s.file;}/*-----------------------------------------------------------------------------------*/char *webclient_hostname(void){  return s.host;}/*-----------------------------------------------------------------------------------*/unsigned shortwebclient_port(void){  return s.port;}/*-----------------------------------------------------------------------------------*/voidwebclient_init(void){}/*-----------------------------------------------------------------------------------*/static voidinit_connection(void){  s.state = WEBCLIENT_STATE_STATUSLINE;  s.getrequestleft = sizeof(http_get) - 1 + 1 +    sizeof(http_10) - 1 +    sizeof(http_crnl) - 1 +    sizeof(http_host) - 1 +    sizeof(http_crnl) - 1 +    strlen(http_user_agent_fields) +    strlen(s.file) + strlen(s.host);  s.getrequestptr = 0;  s.httpheaderlineptr = 0;}/*-----------------------------------------------------------------------------------*/voidwebclient_close(void){  s.state = WEBCLIENT_STATE_CLOSE;}/*-----------------------------------------------------------------------------------*/unsigned charwebclient_get(char *host, u16_t port, char *file){  struct uip_conn *conn;  uip_ipaddr_t *ipaddr;  static uip_ipaddr_t addr;    /* First check if the host is an IP address. */  ipaddr = &addr;  if(uiplib_ipaddrconv(host, (unsigned char *)addr) == 0) {    ipaddr = (uip_ipaddr_t *)resolv_lookup(host);        if(ipaddr == NULL) {      return 0;    }  }    conn = uip_connect(ipaddr, htons(port));    if(conn == NULL) {    return 0;  }    s.port = port;  strncpy(s.file, file, sizeof(s.file));  strncpy(s.host, host, sizeof(s.host));    init_connection();  return 1;}/*-----------------------------------------------------------------------------------*/static unsigned char *copy_string(unsigned char *dest,	    const unsigned char *src, unsigned char len){  strncpy(dest, src, len);  return dest + len;}/*-----------------------------------------------------------------------------------*/static voidsenddata(void){  u16_t len;  char *getrequest;  char *cptr;    if(s.getrequestleft > 0) {    cptr = getrequest = (char *)uip_appdata;    cptr = copy_string(cptr, http_get, sizeof(http_get) - 1);    cptr = copy_string(cptr, s.file, strlen(s.file));    *cptr++ = ISO_space;    cptr = copy_string(cptr, http_10, sizeof(http_10) - 1);    cptr = copy_string(cptr, http_crnl, sizeof(http_crnl) - 1);        cptr = copy_string(cptr, http_host, sizeof(http_host) - 1);    cptr = copy_string(cptr, s.host, strlen(s.host));    cptr = copy_string(cptr, http_crnl, sizeof(http_crnl) - 1);    cptr = copy_string(cptr, http_user_agent_fields,		       strlen(http_user_agent_fields));        len = s.getrequestleft > uip_mss()?      uip_mss():      s.getrequestleft;    uip_send(&(getrequest[s.getrequestptr]), len);  }}/*-----------------------------------------------------------------------------------*/static voidacked(void){  u16_t len;    if(s.getrequestleft > 0) {    len = s.getrequestleft > uip_mss()?      uip_mss():      s.getrequestleft;    s.getrequestleft -= len;    s.getrequestptr += len;  }}/*-----------------------------------------------------------------------------------*/static u16_tparse_statusline(u16_t len){  char *cptr;    while(len > 0 && s.httpheaderlineptr < sizeof(s.httpheaderline)) {    s.httpheaderline[s.httpheaderlineptr] = *(char *)uip_appdata;    ++((char *)uip_appdata);    --len;    if(s.httpheaderline[s.httpheaderlineptr] == ISO_nl) {      if((strncmp(s.httpheaderline, http_10,		  sizeof(http_10) - 1) == 0) ||	 (strncmp(s.httpheaderline, http_11,		  sizeof(http_11) - 1) == 0)) {	cptr = &(s.httpheaderline[9]);	s.httpflag = HTTPFLAG_NONE;	if(strncmp(cptr, http_200, sizeof(http_200) - 1) == 0) {	  /* 200 OK */	  s.httpflag = HTTPFLAG_OK;	} else if(strncmp(cptr, http_301, sizeof(http_301) - 1) == 0 ||		  strncmp(cptr, http_302, sizeof(http_302) - 1) == 0) {	  /* 301 Moved permanently or 302 Found. Location: header line	     will contain thw new location. */	  s.httpflag = HTTPFLAG_MOVED;	} else {	  s.httpheaderline[s.httpheaderlineptr - 1] = 0;	}      } else {	uip_abort();	webclient_aborted();	return 0;      }            /* We're done parsing the status line, so we reset the pointer	 and start parsing the HTTP headers.*/      s.httpheaderlineptr = 0;      s.state = WEBCLIENT_STATE_HEADERS;      break;    } else {      ++s.httpheaderlineptr;    }  }  return len;}/*-----------------------------------------------------------------------------------*/static charcasecmp(char *str1, const char *str2, char len){  static char c;    while(len > 0) {    c = *str1;    /* Force lower-case characters. */    if(c & 0x40) {      c |= 0x20;    }    if(*str2 != c) {      return 1;    }    ++str1;    ++str2;    --len;  }  return 0;}/*-----------------------------------------------------------------------------------*/static u16_tparse_headers(u16_t len){  char *cptr;  static unsigned char i;    while(len > 0 && s.httpheaderlineptr < sizeof(s.httpheaderline)) {    s.httpheaderline[s.httpheaderlineptr] = *(char *)uip_appdata;    ++((char *)uip_appdata);    --len;    if(s.httpheaderline[s.httpheaderlineptr] == ISO_nl) {      /* We have an entire HTTP header line in s.httpheaderline, so	 we parse it. */      if(s.httpheaderline[0] == ISO_cr) {	/* This was the last header line (i.e., and empty "\r\n"), so	   we are done with the headers and proceed with the actual	   data. */	s.state = WEBCLIENT_STATE_DATA;	return len;      }      s.httpheaderline[s.httpheaderlineptr - 1] = 0;      /* Check for specific HTTP header fields. */      if(casecmp(s.httpheaderline, http_content_type,		     sizeof(http_content_type) - 1) == 0) {	/* Found Content-type field. */	cptr = strchr(s.httpheaderline, ';');	if(cptr != NULL) {	  *cptr = 0;	}	strncpy(s.mimetype, s.httpheaderline +		sizeof(http_content_type) - 1, sizeof(s.mimetype));      } else if(casecmp(s.httpheaderline, http_location,			    sizeof(http_location) - 1) == 0) {	cptr = s.httpheaderline +	  sizeof(http_location) - 1;		if(strncmp(cptr, http_http, 7) == 0) {	  cptr += 7;	  for(i = 0; i < s.httpheaderlineptr - 7; ++i) {	    if(*cptr == 0 ||	       *cptr == '/' ||	       *cptr == ' ' ||	       *cptr == ':') {	      s.host[i] = 0;	      break;	    }	    s.host[i] = *cptr;	    ++cptr;	  }	}	strncpy(s.file, cptr, sizeof(s.file));	/*	s.file[s.httpheaderlineptr - i] = 0;*/      }      /* We're done parsing, so we reset the pointer and start the	 next line. */      s.httpheaderlineptr = 0;    } else {      ++s.httpheaderlineptr;    }  }  return len;}/*-----------------------------------------------------------------------------------*/static voidnewdata(void){  u16_t len;  len = uip_datalen();  if(s.state == WEBCLIENT_STATE_STATUSLINE) {    len = parse_statusline(len);  }    if(s.state == WEBCLIENT_STATE_HEADERS && len > 0) {    len = parse_headers(len);  }  if(len > 0 && s.state == WEBCLIENT_STATE_DATA &&     s.httpflag != HTTPFLAG_MOVED) {    webclient_datahandler((char *)uip_appdata, len);  }}/*-----------------------------------------------------------------------------------*/voidwebclient_appcall(void){  if(uip_connected()) {    s.timer = 0;    s.state = WEBCLIENT_STATE_STATUSLINE;    senddata();    webclient_connected();    return;  }  if(s.state == WEBCLIENT_STATE_CLOSE) {    webclient_closed();    uip_abort();    return;  }  if(uip_aborted()) {    webclient_aborted();  }  if(uip_timedout()) {    webclient_timedout();  }    if(uip_acked()) {    s.timer = 0;    acked();  }  if(uip_newdata()) {    s.timer = 0;    newdata();  }  if(uip_rexmit() ||     uip_newdata() ||     uip_acked()) {    senddata();  } else if(uip_poll()) {    ++s.timer;    if(s.timer == WEBCLIENT_TIMEOUT) {      webclient_timedout();      uip_abort();      return;    }        /*    senddata();*/  }  if(uip_closed()) {    if(s.httpflag != HTTPFLAG_MOVED) {      /* Send NULL data to signal EOF. */      webclient_datahandler(NULL, 0);    } else {      if(resolv_lookup(s.host) == NULL) {	resolv_query(s.host);      }      webclient_get(s.host, s.port, s.file);    }  }}/*-----------------------------------------------------------------------------------*//** @} *//** @} */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩日日骚| 亚洲激情中文1区| 在线视频综合导航| 91视频在线看| 色婷婷综合久色| 在线视频国内自拍亚洲视频| 色综合久久久久久久久| 色综合一个色综合| 欧美在线视频日韩| 欧美亚洲日本一区| 欧美一区二区三区色| 日韩欧美一区二区视频| 国产三级久久久| 亚洲欧美国产高清| 亚洲福利一区二区三区| 久久成人免费日本黄色| 成人精品亚洲人成在线| 色婷婷精品久久二区二区蜜臀av | 中文字幕一区二区三区不卡在线 | 成人福利视频网站| 97精品超碰一区二区三区| 在线观看网站黄不卡| 91精品国产综合久久蜜臀| 精品久久免费看| 亚洲男人的天堂在线观看| 丝袜美腿成人在线| 久草在线在线精品观看| 成人av免费网站| 宅男在线国产精品| 中文字幕欧美激情| 日日夜夜精品视频免费| 国产乱色国产精品免费视频| 99精品国产99久久久久久白柏| 欧美二区三区的天堂| 国产日韩欧美高清在线| 婷婷亚洲久悠悠色悠在线播放| 国产成人精品影视| 91精品午夜视频| 国产精品久久久久久久久久免费看 | 在线观看亚洲a| 精品国产1区二区| 亚洲国产cao| www.欧美亚洲| 欧美电影免费观看高清完整版在线 | 欧美怡红院视频| 久久久国产综合精品女国产盗摄| 亚洲一区在线观看网站| 国产成a人无v码亚洲福利| 欧美丰满一区二区免费视频| 亚洲同性gay激情无套| 精品伊人久久久久7777人| 在线亚洲高清视频| 国产精品免费人成网站| 国产一区啦啦啦在线观看| 欧美精品一二三区| 亚洲久草在线视频| 国产成人免费9x9x人网站视频| 欧美一区午夜视频在线观看| 亚洲综合无码一区二区| 久久综合丝袜日本网| 亚洲自拍偷拍网站| 成人在线视频一区| 精品国产污网站| 美女网站色91| 91精品国产综合久久久久久 | 精品精品国产高清a毛片牛牛| 一级中文字幕一区二区| 99精品欧美一区二区三区综合在线| 国产三级欧美三级日产三级99| 看片网站欧美日韩| 日韩精品综合一本久道在线视频| 首页国产丝袜综合| 91精品欧美久久久久久动漫| 五月天国产精品| 欧美一级免费观看| 久久99日本精品| 久久综合九色综合97婷婷女人| 久久66热re国产| 国产清纯白嫩初高生在线观看91| 国产成人精品午夜视频免费| 久久久午夜精品理论片中文字幕| 麻豆91精品91久久久的内涵| 精品国产伦一区二区三区观看方式 | 美女在线一区二区| 91精品国产91综合久久蜜臀| 免费看欧美女人艹b| 日韩欧美电影在线| 国产激情精品久久久第一区二区 | 精品久久久久香蕉网| 精品一区在线看| 欧美国产禁国产网站cc| 成人高清免费在线播放| 一区二区三区精密机械公司| 欧美日韩一区不卡| 精品综合久久久久久8888| 国产拍欧美日韩视频二区| 成人av在线资源| 亚洲一区二区偷拍精品| 精品国精品国产| 成人免费视频免费观看| 一区二区三区四区中文字幕| 欧美日本韩国一区二区三区视频| 日本亚洲电影天堂| 欧美国产精品久久| 欧美三级中文字| 国产精品影视天天线| 亚洲乱码国产乱码精品精可以看| 欧美日韩大陆在线| 国产91精品一区二区麻豆网站| 一区二区三区蜜桃网| 欧美一级片在线观看| 成人免费电影视频| 视频一区在线播放| 国产精品水嫩水嫩| 欧美日韩不卡一区| 高清视频一区二区| 午夜亚洲国产au精品一区二区| 久久久国际精品| 91精品视频网| 在线观看精品一区| 成人精品在线视频观看| 蜜臀99久久精品久久久久久软件| 国产精品久久久久久久久快鸭 | 一个色在线综合| 久久精品免费在线观看| 欧美精品在线观看一区二区| 99精品黄色片免费大全| 国产精品一级二级三级| 午夜精品福利一区二区三区av| 国产女主播一区| 精品国产免费一区二区三区四区| 欧美视频中文一区二区三区在线观看| 国产成人av电影在线| 久久国产人妖系列| 爽好多水快深点欧美视频| 一区二区三区中文在线| 国产欧美一区视频| 欧美一区二区三区视频免费播放| 在线观看日韩高清av| 99久久夜色精品国产网站| 国产成人一区在线| 国产一区二区三区精品欧美日韩一区二区三区 | 8x8x8国产精品| 色综合av在线| 91亚洲精品久久久蜜桃| 丰满亚洲少妇av| 国产99久久久国产精品免费看| 国产一区在线观看视频| 激情综合色播五月| 麻豆成人av在线| 狠狠狠色丁香婷婷综合激情 | 色婷婷久久综合| 99久久婷婷国产精品综合| 不卡在线视频中文字幕| 国产69精品一区二区亚洲孕妇| 国产麻豆9l精品三级站| 国产成人午夜片在线观看高清观看| 韩国v欧美v亚洲v日本v| 激情综合色播激情啊| 国产91色综合久久免费分享| 国产成人啪免费观看软件| 成人app下载| 91官网在线观看| 欧美日韩电影在线播放| 欧美成人一区二区三区片免费 | 亚洲精品乱码久久久久久久久| 亚洲男女一区二区三区| 亚洲成a人片在线观看中文| 日韩福利视频网| 国产在线一区观看| 不卡的av在线| 欧美精品xxxxbbbb| 精品黑人一区二区三区久久| 欧美国产日韩在线观看| 亚洲精品自拍动漫在线| 亚洲成年人网站在线观看| 韩国三级电影一区二区| av亚洲精华国产精华| 欧美日韩激情一区二区| 精品国产髙清在线看国产毛片| 欧美高清在线一区二区| 亚洲国产你懂的| 国产揄拍国内精品对白| 日本精品一区二区三区高清| 欧美三级韩国三级日本一级| 久久精品欧美一区二区三区不卡| 亚洲人妖av一区二区| 蜜桃视频免费观看一区| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 精品一区二区三区在线播放视频| 国产麻豆日韩欧美久久| 在线精品视频小说1| 精品理论电影在线观看| 亚洲精品视频一区| 麻豆国产精品777777在线| 日本韩国精品在线| 久久久久99精品一区| 天天操天天综合网| 成人成人成人在线视频| 日韩欧美国产高清|