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

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

?? tftp.c

?? linux下tftp客氣端的源碼實現
?? C
字號:
/* * Copyright (c) 1983, 1993 *	The Regents of the University of California.  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. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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. */#ifndef lintstatic char     sccsid[] = "@(#)tftp.c	8.1 (Berkeley) 6/6/93";#endif /* not lint *//* Many bug fixes are from Jim Guyton <guyton@rand-unix> *//* * TFTP User Program -- Protocol Machines */#ifdef HAVE_CONFIG_H#include <config.h>#endif#include <sys/types.h>#include <sys/socket.h>#ifdef TIME_WITH_SYS_TIME# include <sys/time.h># include <time.h>#else# ifdef HAVE_SYS_TIME_H#  include <sys/time.h># else#  include <time.h># endif#endif#include <netinet/in.h>#include <arpa/tftp.h>#include <errno.h>#include <setjmp.h>#include <signal.h>#include <stdio.h>#include <string.h>#include <unistd.h>#include "extern.h"#include "tftpsubs.h"extern struct sockaddr_in peeraddr;	/* filled in by main */extern int      f;		/* the opened socket */extern int      trace;extern int      verbose;extern int      rexmtval;extern int      maxtimeout;#define PKTSIZE    SEGSIZE+4char            ackbuf[PKTSIZE];int             timeout;jmp_buf         timeoutbuf;static void nak (int);static int makerequest (int, const char *, struct tftphdr *, const char *);static void printstats (const char *, unsigned long);static void startclock (void);static void stopclock (void);static void timer (int);static void tpacket (const char *, struct tftphdr *, int);/* * Send the requested file. */voidsend_file (int fd, char *name, char *mode){  register struct tftphdr *ap;	/* data and ack packets */  struct tftphdr *r_init (), *dp;  register int    n;  volatile int    block, size, convert;  volatile unsigned long amount;  struct sockaddr_in from;  int             fromlen;  FILE           *file;  startclock ();		/* start stat's clock */  dp = r_init ();		/* reset fillbuf/read-ahead code */  ap = (struct tftphdr *) ackbuf;  file = fdopen (fd, "r");  convert = !strcmp (mode, "netascii");  block = 0;  amount = 0;  signal (SIGALRM, timer);  do    {      if (block == 0)	size = makerequest (WRQ, name, dp, mode) - 4;      else	{	  /*      size = read(fd, dp->th_data, SEGSIZE);   */	  size = readit (file, &dp, convert);	  if (size < 0)	    {	      nak (errno + 100);	      break;	    }	  dp->th_opcode = htons ((u_short) DATA);	  dp->th_block = htons ((u_short) block);	}      timeout = 0;      setjmp (timeoutbuf);          send_data:      if (trace)	tpacket ("sent", dp, size + 4);      n = sendto (f, (const char *) dp, size + 4, 0,		  (struct sockaddr *) &peeraddr, sizeof (peeraddr));      if (n != size + 4)	{	  perror ("tftp: sendto");	  goto abort;	}      read_ahead (file, convert);            for (;;)	{	  alarm (rexmtval);	  do	    {	      fromlen = sizeof (from);	      n = recvfrom (f, ackbuf, sizeof (ackbuf), 0,			    (struct sockaddr *) &from, &fromlen);	    }	  while (n <= 0);	  alarm (0);	  if (n < 0)	    {	      perror ("tftp: recvfrom");	      goto abort;	    }	  peeraddr.sin_port = from.sin_port;	/* added */	  if (trace)	    tpacket ("received", ap, n);	  /* should verify packet came from server */	  ap->th_opcode = ntohs (ap->th_opcode);	  ap->th_block = ntohs (ap->th_block);	  if (ap->th_opcode == ERROR)	    {	      printf ("Error code %d: %s\n", ap->th_code, ap->th_msg);	      goto abort;	    }	  if (ap->th_opcode == ACK)	    {	      int j;	      if (ap->th_block == block)		break;	      /* On an error, try to synchronize	       * both sides.	       */	      j = synchnet (f);	      if (j && trace)		printf ("discarded %d packets\n", j);	      if (ap->th_block == (block - 1))		goto send_data;	    }	}      if (block > 0)	amount += size;      block++;    }  while (size == SEGSIZE || block == 1);  abort:  fclose (file);  stopclock ();  if (amount > 0)    printstats ("Sent", amount);}/* * Receive a file. */voidrecvfile (int fd, char *name, char *mode){  register struct tftphdr *ap;  struct tftphdr *dp, *w_init ();  register int    n;  volatile int    block, size, firsttrip;  volatile unsigned long amount;  struct sockaddr_in from;  int             fromlen;  FILE           *file;  volatile int    convert;	/* true if converting crlf -> lf */  startclock ();  dp = w_init ();  ap = (struct tftphdr *) ackbuf;  file = fdopen (fd, "w");  convert = !strcmp (mode, "netascii");  block = 1;  firsttrip = 1;  amount = 0;  signal (SIGALRM, timer);  do    {      if (firsttrip)	{	  size = makerequest (RRQ, name, ap, mode);	  firsttrip = 0;	}      else	{	  ap->th_opcode = htons ((u_short) ACK);	  ap->th_block = htons ((u_short) (block));	  size = 4;	  block++;	}      timeout = 0;      setjmp (timeoutbuf);          send_ack:      if (trace)	tpacket ("sent", ap, size);      if (sendto (f, ackbuf, size, 0, (struct sockaddr *) &peeraddr,		  sizeof (peeraddr)) != size)	{	  alarm (0);	  perror ("tftp: sendto");	  goto abort;	}      write_behind (file, convert);            for (;;)	{	  alarm (rexmtval);	  do	    {	      fromlen = sizeof (from);	      n = recvfrom (f, (char *) dp, PKTSIZE, 0,			    (struct sockaddr *) &from, &fromlen);	    }	  while (n <= 0);	  	  alarm (0);	  if (n < 0)	    {	      perror ("tftp: recvfrom");	      goto abort;	    }	  peeraddr.sin_port = from.sin_port;	/* added */	  if (trace)	    tpacket ("received", dp, n);	  /* should verify client address */	  dp->th_opcode = ntohs (dp->th_opcode);	  dp->th_block = ntohs (dp->th_block);	  if (dp->th_opcode == ERROR)	    {	      printf ("Error code %d: %s\n", dp->th_code, dp->th_msg);	      goto abort;	    }	  if (dp->th_opcode == DATA)	    {	      int j;	      if (dp->th_block == block)		break;	/* have next packet */	      /* On an error, try to synchronize	       * both sides.	       */	      j = synchnet (f);	      if (j && trace)		printf ("discarded %d packets\n", j);	      if (dp->th_block == (block - 1))		goto send_ack;	/* resend ack */	    }	}      /*      size = write(fd, dp->th_data, n - 4); */      size = writeit (file, &dp, n - 4, convert);      if (size < 0)	{	  nak (errno + 100);	  break;	}      amount += size;    }  while (size == SEGSIZE);  abort:				/* ok to ack, since user */  ap->th_opcode = htons ((u_short) ACK);	/* has seen err msg */  ap->th_block = htons ((u_short) block);  sendto (f, ackbuf, 4, 0, (struct sockaddr *) &peeraddr,	  sizeof (peeraddr));  write_behind (file, convert);	/* flush last buffer */  fclose (file);  stopclock ();  if (amount > 0)    printstats ("Received", amount);}static intmakerequest (int request, const char *name, struct tftphdr *tp,	     const char *mode){  register char  *cp;  tp->th_opcode = htons ((u_short) request);  cp = tp->th_stuff;  strcpy (cp, name);  cp += strlen (name);  *cp++ = '\0';  strcpy (cp, mode);  cp += strlen (mode);  *cp++ = '\0';  return cp - (char *) tp;}struct errmsg{  int             e_code;  const char     *e_msg;}errmsgs[] ={  { EUNDEF, "Undefined error code"},  { ENOTFOUND, "File not found"},  { EACCESS, "Access violation"},  { ENOSPACE, "Disk full or allocation exceeded"},  { EBADOP, "Illegal TFTP operation"},  { EBADID, "Unknown transfer ID"},  { EEXISTS, "File already exists"},  { ENOUSER, "No such user"},  { -1, 0}};/* * Send a nak packet (error message). * Error code passed in is one of the * standard TFTP codes, or a UNIX errno * offset by 100. */static voidnak (int error){  register struct errmsg *pe;  register struct tftphdr *tp;  int length;  tp = (struct tftphdr *) ackbuf;  tp->th_opcode = htons ((u_short) ERROR);  tp->th_code = htons ((u_short) error);  for (pe = errmsgs; pe->e_code >= 0; pe++)    if (pe->e_code == error)      break;    if (pe->e_code < 0)    {      pe->e_msg = strerror (error - 100);      tp->th_code = EUNDEF;    }  strcpy (tp->th_msg, pe->e_msg);  length = strlen (pe->e_msg) + 4;  if (trace)    tpacket ("sent", tp, length);  if (sendto (f, ackbuf, length, 0, (struct sockaddr *) &peeraddr,	      sizeof (peeraddr)) != length)    perror ("nak");}static voidtpacket (const char *s, struct tftphdr *tp, int n){  static char    *opcodes[] = { "#0", "RRQ", "WRQ", "DATA", "ACK", "ERROR" };  register char  *cp, *file;  u_short op = ntohs (tp->th_opcode);  if (op < RRQ || op > ERROR)    printf ("%s opcode=%x ", s, op);  else    printf ("%s %s ", s, opcodes[op]);  switch (op)    {    case RRQ:    case WRQ:      n -= 2;      file = cp = tp->th_stuff;      cp = strchr (cp, '\0');      printf ("<file=%s, mode=%s>\n", file, cp + 1);      break;    case DATA:      printf ("<block=%d, %d bytes>\n", ntohs (tp->th_block), n - 4);      break;    case ACK:      printf ("<block=%d>\n", ntohs (tp->th_block));      break;    case ERROR:      printf ("<code=%d, msg=%s>\n", ntohs (tp->th_code), tp->th_msg);      break;    }}struct timeval  tstart;struct timeval  tstop;static voidstartclock (){  gettimeofday (&tstart, NULL);}static voidstopclock (){  gettimeofday (&tstop, NULL);}static voidprintstats (const char *direction, unsigned long amount){  double delta;  /* compute delta in 1/10's second units */  delta = ((tstop.tv_sec * 10.) + (tstop.tv_usec / 100000)) -           ((tstart.tv_sec * 10.) + (tstart.tv_usec / 100000));  delta = delta / 10.;		/* back to seconds */  printf ("%s %d bytes in %.1f seconds", direction, amount, delta);  if (verbose)    printf (" [%.0f bits/sec]", (amount * 8.) / delta);  putchar ('\n');}static voidtimer (int sig){  timeout += rexmtval;  if (timeout >= maxtimeout)    {      printf ("Transfer timed out.\n");      longjmp (toplevel, -1);    }  longjmp (timeoutbuf, 1);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合久久88色综合天天6| 午夜欧美电影在线观看| 7799精品视频| 色综合天天综合网国产成人综合天| 国产寡妇亲子伦一区二区| 午夜精品国产更新| 丝袜a∨在线一区二区三区不卡| 玉米视频成人免费看| 亚洲免费观看在线视频| 亚洲女人的天堂| 亚洲女与黑人做爰| 亚洲最大成人网4388xx| 亚洲国产视频网站| 天天av天天翘天天综合网色鬼国产 | 成人国产精品视频| 成人av动漫网站| 色综合久久99| 欧美乱熟臀69xxxxxx| 这里只有精品电影| 精品999久久久| 久久精品亚洲乱码伦伦中文| 精品国产sm最大网站免费看| 久久日韩粉嫩一区二区三区| 国产精品丝袜一区| 亚洲尤物视频在线| 麻豆成人免费电影| 国产高清精品久久久久| 91麻豆swag| 欧美一区二区性放荡片| 国产校园另类小说区| 亚洲天堂av老司机| 天堂一区二区在线| 国产精品一区专区| 欧美性视频一区二区三区| 欧美一级黄色大片| 国产精品水嫩水嫩| 五月婷婷久久综合| 大白屁股一区二区视频| 在线观看91精品国产入口| 欧美一区二区三区免费视频| 欧美国产精品久久| 天堂午夜影视日韩欧美一区二区| 国产在线视频不卡二| 日本福利一区二区| 337p粉嫩大胆色噜噜噜噜亚洲| 国产精品护士白丝一区av| 亚洲成av人片一区二区三区| 国产成人午夜电影网| 欧美日韩午夜影院| 国产精品福利影院| 精品一区二区在线看| 欧美亚一区二区| 中文字幕欧美国产| 久久99久久久久| 色哦色哦哦色天天综合| 国产精品一区专区| 国产成人三级在线观看| 国产成人精品网址| 日韩一区和二区| 一区二区三区.www| 国产**成人网毛片九色| 欧美一区日本一区韩国一区| 国产精品国产三级国产普通话蜜臀| 亚洲成人综合网站| 日本高清视频一区二区| 久久精品人人爽人人爽| 日韩精品亚洲一区| 欧美色窝79yyyycom| 国产精品狼人久久影院观看方式| 久久精品国产在热久久| 欧美精品 日韩| 亚洲电影中文字幕在线观看| 97久久人人超碰| 国产精品久线在线观看| 国产成人日日夜夜| 国产日韩欧美综合在线| 国产一区二区中文字幕| 欧美精品一区二区三区在线 | 精品一区二区精品| 3atv一区二区三区| 青青青爽久久午夜综合久久午夜| 欧美天天综合网| 亚洲国产成人高清精品| 欧美午夜片在线看| 婷婷六月综合网| 欧美人妖巨大在线| 日韩国产一二三区| 日韩精品一区二区三区蜜臀| 蜜桃久久久久久| 精品国一区二区三区| 韩国在线一区二区| 日本一区二区三级电影在线观看| 国产成人精品亚洲午夜麻豆| 国产精品免费观看视频| 一本色道综合亚洲| 亚洲国产精品一区二区久久恐怖片| 在线观看91精品国产入口| 亚洲国产精品综合小说图片区| 欧美日韩一区不卡| 黄网站免费久久| 欧美国产日韩亚洲一区| 色婷婷久久久综合中文字幕 | 色诱视频网站一区| 天天综合网天天综合色| 日韩欧美成人午夜| 成人avav影音| 亚洲成av人影院在线观看网| 日韩欧美电影一二三| 成人免费不卡视频| 午夜精品福利一区二区三区蜜桃| 日韩欧美精品在线视频| 国产乱色国产精品免费视频| 亚洲天堂免费看| 在线综合视频播放| 不卡的看片网站| 天天综合天天综合色| 国产精品国产三级国产普通话蜜臀 | 日韩专区一卡二卡| 日韩一区中文字幕| 在线观看日产精品| 激情综合网激情| 亚洲午夜免费电影| 国产日产亚洲精品系列| 欧美精品在线观看播放| 风间由美一区二区av101| 亚洲成人精品一区| 国产精品美女久久久久久2018 | 欧美撒尿777hd撒尿| 国产不卡视频在线观看| 亚洲成av人片一区二区梦乃| 中文字幕成人av| 欧美一区二区三区视频免费| 91丨九色丨尤物| 国产精品亚洲午夜一区二区三区| 亚洲成人免费电影| 综合久久综合久久| 欧美国产成人在线| 精品国产一区二区国模嫣然| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 久久机这里只有精品| 亚洲高清一区二区三区| 亚洲日本在线天堂| 国产欧美精品一区二区色综合朱莉 | 久久国产精品99久久人人澡| 亚洲一区二区三区四区不卡| 久久精品亚洲麻豆av一区二区| 91精品国产色综合久久不卡蜜臀| 色综合色综合色综合色综合色综合| 国产精品一区二区免费不卡 | 国模大尺度一区二区三区| 婷婷激情综合网| 一区二区在线观看av| 日韩码欧中文字| 中文字幕一区二区三区在线观看| 国产女人18水真多18精品一级做| 日韩亚洲欧美一区二区三区| 欧美精品丝袜中出| 在线综合+亚洲+欧美中文字幕| 欧美色偷偷大香| 欧美色手机在线观看| 欧美精品vⅰdeose4hd| 91精品国产综合久久久蜜臀图片| 69精品人人人人| 7777精品久久久大香线蕉| 在线综合视频播放| 精品1区2区在线观看| 精品国产一区二区精华| 国产欧美精品一区二区三区四区 | 波多野结衣在线aⅴ中文字幕不卡| 国产成人亚洲精品青草天美| 国产福利视频一区二区三区| 成人福利视频网站| 91激情五月电影| 欧美日韩专区在线| 欧美一区二区三区视频免费播放| 精品国产乱码久久久久久夜甘婷婷 | 成人三级伦理片| 91亚洲午夜精品久久久久久| 一道本成人在线| 在线播放欧美女士性生活| 日韩一级大片在线| 亚洲国产高清在线| 亚洲美女淫视频| 青青草97国产精品免费观看| 国产自产视频一区二区三区| 成人av电影在线播放| 欧美网站大全在线观看| 精品国偷自产国产一区| 亚洲欧洲一区二区在线播放| 亚洲v精品v日韩v欧美v专区| 久久99精品久久久久久| 成人黄色免费短视频| 欧美剧情片在线观看| 国产亚洲精品中文字幕| 亚洲香肠在线观看| 国产精品一区二区久久精品爱涩| 一本大道久久a久久精二百 | 国产高清不卡一区二区| 欧美性生活一区| 欧美激情资源网|