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

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

?? webclient.c

?? uip(uip 0.9 and uip 1.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一区二区三区免费野_久草精品视频
国产亚洲成年网址在线观看| 日韩视频一区在线观看| 精品一区二区日韩| 婷婷久久综合九色综合伊人色| 亚洲精品国产无套在线观| 国产精品妹子av| 国产精品国产三级国产普通话蜜臀| 久久久影视传媒| 国产精品国产三级国产有无不卡| 国产精品美女视频| 亚洲欧美日韩国产成人精品影院| 国产精品久久福利| 亚洲美女精品一区| 亚洲成a人v欧美综合天堂下载 | 日韩精品欧美精品| 午夜精品久久久| 日韩电影在线免费| 黄网站免费久久| 国产精品99久久不卡二区| 国产成人aaa| 成人aa视频在线观看| 在线这里只有精品| 欧美一区二区三区在线| 精品动漫一区二区三区在线观看| 久久精品在线免费观看| 日韩美女视频一区二区| 视频一区在线播放| 国产精品亚洲一区二区三区妖精| 国产精品99久| 欧美午夜精品久久久久久超碰 | 不卡av在线免费观看| av男人天堂一区| 欧美群妇大交群中文字幕| 日韩欧美亚洲国产另类| 国产精品久久久久影院色老大| 亚洲影院久久精品| 国产一区二区三区视频在线播放| 99久久精品国产麻豆演员表| 4438成人网| 国产精品成人一区二区艾草| 天天爽夜夜爽夜夜爽精品视频 | 亚洲国产岛国毛片在线| 亚洲裸体xxx| 激情欧美日韩一区二区| 91福利在线播放| 久久久不卡网国产精品一区| 亚洲成人手机在线| 成人少妇影院yyyy| 日韩一区国产二区欧美三区| 中文字幕日本乱码精品影院| 美女尤物国产一区| 欧美影院午夜播放| 中文字幕不卡的av| 精品亚洲成a人| 欧美精品第1页| 亚洲视频免费在线| 国产成人在线免费观看| 欧美一级精品大片| 亚洲午夜激情网页| 91蝌蚪porny| 国产精品你懂的在线欣赏| 激情综合色综合久久| 欧美一级久久久| 日韩经典中文字幕一区| 91美女在线看| 亚洲丝袜制服诱惑| 91网页版在线| 中文字幕亚洲在| 成人短视频下载| 国产亚洲美州欧州综合国| 看电影不卡的网站| 欧美一级久久久| 美女免费视频一区二区| 日韩欧美一区二区在线视频| 丝袜美腿亚洲综合| 欧美日韩免费在线视频| 伊人夜夜躁av伊人久久| 色婷婷综合久久久中文一区二区| 国产精品美女一区二区三区| 成人午夜精品一区二区三区| 久久精品视频免费| 国产电影一区二区三区| 国产视频一区在线观看| 国产尤物一区二区| 国产欧美日韩在线看| 床上的激情91.| √…a在线天堂一区| 99国产精品一区| 亚洲乱码中文字幕| 欧美色图激情小说| 日韩影视精彩在线| 日韩一区二区三区四区五区六区| 久久精品国产999大香线蕉| 欧美本精品男人aⅴ天堂| 国产一区二区视频在线播放| 中文字幕第一区二区| 91香蕉视频污| 日韩电影一区二区三区| 欧美变态tickle挠乳网站| 国产精品一级片| 亚洲柠檬福利资源导航| 欧美一区永久视频免费观看| 麻豆久久久久久| 国产精品国产三级国产| 欧美亚洲国产bt| 久久精品国产**网站演员| 国产欧美精品区一区二区三区 | 欧美美女黄视频| 久久99久久99小草精品免视看| 中文字幕精品—区二区四季| 欧洲人成人精品| 免费人成在线不卡| 日韩伦理av电影| 日韩欧美国产系列| 91女人视频在线观看| 久久精品99国产精品日本| 日韩毛片精品高清免费| 日韩免费一区二区三区在线播放| 国精品**一区二区三区在线蜜桃| 一区精品在线播放| 日韩限制级电影在线观看| 成人免费高清在线| 欧美aⅴ一区二区三区视频| 中文字幕不卡三区| 精品免费一区二区三区| 日本韩国精品在线| 成人亚洲精品久久久久软件| 国产盗摄视频一区二区三区| 亚洲女与黑人做爰| 国产欧美一区二区精品秋霞影院| 欧美精品777| 色综合天天视频在线观看| 国产成人精品一区二| 免费在线看成人av| 亚洲1区2区3区4区| 亚洲激情综合网| 欧美激情一区不卡| 欧美videos大乳护士334| 欧美亚洲图片小说| 色综合色综合色综合| 成人午夜免费电影| 成人自拍视频在线观看| 精品无码三级在线观看视频| 污片在线观看一区二区| 亚洲男人都懂的| 最新久久zyz资源站| 国产精品视频你懂的| 久久一留热品黄| 精品剧情v国产在线观看在线| 欧美伦理电影网| 欧美午夜不卡视频| 国产欧美日本一区视频| 精品久久人人做人人爽| 色狠狠色噜噜噜综合网| caoporn国产精品| 7777精品伊人久久久大香线蕉超级流畅 | 久久精品av麻豆的观看方式| 国产一区在线精品| 91黄色激情网站| 精品国产伦一区二区三区观看体验| 国产精品免费人成网站| 日日摸夜夜添夜夜添精品视频| 国产精品一二三区| 欧美日韩国产影片| 中文字幕第一区综合| 日本三级亚洲精品| 91美女片黄在线| 久久久久久久久久久久久久久99 | www.在线欧美| 欧美一区二区三区四区视频| 亚洲欧美在线视频观看| 久久精品国产成人一区二区三区| 色视频成人在线观看免| 国产亚洲成aⅴ人片在线观看| 午夜视频一区二区三区| 99久久精品免费看| 国产日韩欧美麻豆| 麻豆成人久久精品二区三区小说| 色综合一个色综合| 国产精品久久久久久久久免费樱桃 | 亚洲第一搞黄网站| www.99精品| 久久综合成人精品亚洲另类欧美 | 久久久久久久久久电影| 午夜影院在线观看欧美| 色综合色狠狠天天综合色| 国产日韩三级在线| 久久国产婷婷国产香蕉| 欧美日韩免费视频| 亚洲资源在线观看| 91欧美一区二区| 亚洲欧美在线视频观看| 国产91高潮流白浆在线麻豆| 日韩视频在线一区二区| 日韩高清不卡一区二区三区| 欧美亚洲动漫另类| 亚洲成人免费观看| 在线观看91精品国产入口| 亚洲夂夂婷婷色拍ww47| 99re成人在线|