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

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

?? tcp.c

?? Linux下的飛鴿傳書
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* *  Copyright (C) 2006 Takeharu KATO * * 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. */#include <stdio.h>#include <signal.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/socket.h>#include <sys/ioctl.h> #include <netinet/in.h>#include <netinet/tcp.h> #include <netdb.h>#include <errno.h>#include <glib.h>#include <unistd.h>#include <glib.h>#include <libgnomevfs/gnome-vfs.h>#include "common.h"static intdestroy_tcp_connection(tcp_con_t *con) {  dbg_out("Here\n");  if (!con)    return -EINVAL;  if (con->self)    freeaddrinfo(con->self);  con->self=NULL;  close(con->soc);  return 0;}static intparse_request(request_msg_t *req,const char *request_string){  size_t len;  long int_val;  char *sp=NULL;  char *ep=NULL;  char *buffer;  ssize_t remains;  gboolean has_offset=FALSE;  int rc=0;  if  ( (!request_string) || (!req) )    return -EINVAL;  dbg_out("Here:%s\n",request_string);  buffer=g_strdup(request_string);  if (!buffer)    return -ENOMEM;  len=strlen(request_string);  _assert(len>0);  remains=len;  /*   * パケット番號   */  sp=buffer;  ep=memchr(sp, ':', remains);  if (!ep) {    rc=-EINVAL;    goto err_out;  }  *ep='\0';  remains =len - ((unsigned long)ep-(unsigned long)buffer);  if (remains<=0) {    rc=-EINVAL;    goto err_out;  }  ++ep;  int_val=strtol(sp, (char **)NULL, 16);  req->pkt_no=int_val;  dbg_out("pktno:%ld\n",req->pkt_no);  sp=ep;  /*   * ファイルID   */  ep=memchr(sp, ':', remains);  if (ep) {    has_offset=TRUE;    *ep='\0';    remains =len - ((unsigned long)ep-(unsigned long)buffer);    if (remains<=0) {      rc=-EINVAL;      goto err_out;    }    ++ep;  }  int_val=strtol(sp, (char **)NULL, 16);  req->fileid=int_val;  dbg_out("fileid:%d(%x)\n",req->fileid,req->fileid);  sp=ep;  /*   * オフセット   */  if (has_offset)    int_val=strtol(sp, (char **)NULL, 16);  else    int_val=0; /* 仮に0にする */  req->offset=int_val;  dbg_out("offset:%d(%x)\n",req->offset,req->offset);err_out:  g_free(buffer);  return rc;}static inttcp_ipmsg_finalize_connection(tcp_con_t *con){  int rc=0;  char dummy[1];  g_assert(con);  sock_set_buffer(con->soc);  dbg_out("Wait for closing by peer.\n");  sock_set_recv_timeout(con->soc,TCP_CLOSE_WAIT_SEC);  rc=wait_socket(con->soc,WAIT_FOR_READ,TCP_SELECT_SEC);  if (rc<0) {    dbg_out("OK timeout select :%s(%d)\n",strerror(errno),errno);    return -errno;  }  memset(dummy, 0, sizeof(dummy));  rc=recv(con->soc, dummy,sizeof(dummy),0); /* 相手のクローズ検出 */  if (rc<0)    dbg_out("OK timeout:%s(%d)\n",strerror(errno),errno);  else    rc=0;  return rc;}static inttcp_transfer_file(tcp_con_t *con,const char *path,const size_t size,off_t offset){  int fd;  int rc;  char buff[TCP_FILE_BUFSIZ];  ssize_t read_len;  ssize_t file_remains;  ssize_t soc_remains;  ssize_t write_len;  size_t total_write;  char *wp;  struct sigaction saved_act;  if ( (!con) || (!path) )    return -EINVAL;  fd=open(path,O_RDONLY);  if (fd<0)    return -errno;  rc=lseek(fd, offset, SEEK_SET);  if (rc<0) {    rc=-errno;    goto close_out;  }  total_write=0;  file_remains=size;  while(file_remains>0) {    read_len=read(fd,buff,TCP_FILE_BUFSIZ);    if (read_len<0) {      rc=-errno;      err_out("Can not read file %s %d\n",strerror(errno),errno);      goto close_out;    }    file_remains -= read_len;    soc_remains=read_len;    wp=buff;    if (wait_socket(con->soc,WAIT_FOR_WRITE,TCP_SELECT_SEC)<0) {      err_out("Can not send socket\n");      goto close_out;    }    dbg_out("sock remains:%d\n",soc_remains);    while(soc_remains>0) {      disable_pipe_signal(&saved_act);      write_len=send(con->soc,wp,soc_remains,0);      enable_pipe_signal(&saved_act);      if (write_len<0) {	if (errno==EINTR)	  continue;	err_out("Can not send %s %d\n",strerror(errno),errno);	goto close_out;      }      dbg_out("write len :%d\n",write_len);      wp += write_len;      total_write += write_len;      soc_remains -= write_len;    }    dbg_out("transfer %s %d/%d(%d)\n",path,total_write,size,file_remains);  }  rc=0; close_out:  close(fd);  if (rc<0)    dbg_out("Can not send file:%s %s %d\n",path,strerror(errno),errno);  return rc;}static intcreate_response(unsigned long type,const char *name,const size_t size,const char *dir,char **response){  int rc=0;  char *buff=NULL;  size_t act_len;  gchar *res;  size_t local_size;  int msg_fid;  char *local_name_p;  dbg_out("here:\n");  if ( ( (!name) && (type != IPMSG_FILE_RETPARENT) ) || (!dir) || (!response) )    return -EINVAL;  if (type != IPMSG_FILE_RETPARENT)    dbg_out("file:%s size:%d(%x)\n",	  name,size,size);  else    dbg_out("Return to parent.\n");  switch(type)    {    case IPMSG_FILE_REGULAR:      msg_fid=1;      local_size=size;      local_name_p=(char *)name;      break;    case IPMSG_FILE_DIR:      msg_fid=2;      local_size=0;      local_name_p=(char *)name;      break;    case IPMSG_FILE_RETPARENT:      msg_fid=3;      local_size=0;      local_name_p=".";      break;    default:      dbg_out("Invalid type:%d\n",type);      return -EINVAL;      break;  }  /*   *メッセージ形成   */  buff=g_malloc(IPMSG_BUFSIZ);  if (!buff)    return -ENOMEM;  snprintf(buff,IPMSG_BUFSIZ-1,"xxxx:%s:%x:%d:",	   local_name_p,local_size,msg_fid); /* 仮の長さを算出  */  buff[IPMSG_BUFSIZ-1]='\0';  act_len=strlen(buff);  snprintf(buff,IPMSG_BUFSIZ-1,"%04x:%s:%x:%d:",	   act_len,local_name_p,local_size,msg_fid); /* メッセージ作成  */  buff[IPMSG_BUFSIZ-1]='\0';  rc=-ENOSPC;  if (act_len != strlen(buff)) {    err_out("Message too long:%s\n",buff);    goto error_out;  }  rc=convert_string_ipmsg_proto(buff,(const gchar **)&res);  if (rc<0) {    err_out("Can not convert code set:%s\n",buff);    rc=-EINVAL;    goto error_out;  }  *response=res;  rc=0; error_out:  if (buff)    g_free(buff);  return rc;}static intsend_header(tcp_con_t *con,const char *response){  int rc;  size_t soc_remains;  ssize_t send_len;  char *wp;  int buff_len;  struct sigaction saved_act;  if ( (!con) || (!response) )    return -EINVAL;  soc_remains=strlen(response);  if (wait_socket(con->soc,WAIT_FOR_WRITE,TCP_SELECT_SEC)<0) {    err_out("Can not send socket\n");    goto error_out;  }  wp=(char *)response;  dbg_out("Send:%s(%d, %x)\n",wp,soc_remains,soc_remains);  while(soc_remains>0) {    disable_pipe_signal(&saved_act);    send_len=send(con->soc,wp,soc_remains,0);    enable_pipe_signal(&saved_act);    if (send_len<0) {      if (errno == EINTR)	continue;      rc=-errno;      err_out("Error:%s (%d)\n",strerror(errno),errno);      goto error_out;    }    wp += send_len;    soc_remains -= send_len;    dbg_out("soc remains:%d\n",soc_remains);  }  rc=0; error_out:  return rc; }static intread_directory_files(tcp_con_t *con,const char *parent,GnomeVFSFileInfo *info) {  int rc;  char *rel_path;  char *full_path;  char *res_message;  if ( (!con) || (!parent) || (!info) )    return -EINVAL;  if ( (!strcmp("..",info->name)) || (!strcmp(".",info->name) ) )    return -EINVAL;  if (info->type==GNOME_VFS_FILE_TYPE_REGULAR) {    rc=create_response(IPMSG_FILE_REGULAR,info->name,info->size,parent,&res_message);    if (rc<0)      return rc;    dbg_out("Send file:%s\n",res_message);    rc=send_header(con,res_message);    g_free(res_message);    if (rc<0)      return rc;  }  rc=-ENOMEM;  full_path=g_build_filename(parent,info->name,NULL);  if (!full_path)     return rc;  /* send file */  tcp_transfer_file(con,full_path,info->size,0);  g_free(full_path);  return 0;}static intsend_directory(tcp_con_t *con,const char *top_dir,const char *basename,GnomeVFSFileInfo *info){  int rc;  char *uri;  GnomeVFSResult res;  GnomeVFSDirectoryHandle *handle;  char *next_dir;  char *res_message;  if ( (!top_dir) || (!info) || (!basename) )    return -EINVAL;  rc=create_response(IPMSG_FILE_DIR,info->name,info->size,top_dir,&res_message);    if (rc<0)    return rc;  dbg_out("Send dir:%s (%s)\n",res_message,top_dir);  rc=send_header(con,res_message);  g_free(res_message);  if (rc<0)    return rc;        uri=gnome_vfs_get_uri_from_local_path(top_dir);  if (!uri)    return -ENOMEM;  /*   *ファイルを送付   */  res=gnome_vfs_directory_open(&handle,uri,GNOME_VFS_FILE_INFO_FOLLOW_LINKS);  res=gnome_vfs_directory_read_next(handle,info);  while (res==GNOME_VFS_OK) {    read_directory_files(con,top_dir,info);    res=gnome_vfs_directory_read_next(handle,info);  }  gnome_vfs_directory_close(handle);   /*   *ディレクトリを送付   */  res=gnome_vfs_directory_open(&handle,uri,GNOME_VFS_FILE_INFO_FOLLOW_LINKS);  if (res!=GNOME_VFS_OK) {    err_out("Can not open dir:%s %s (%d)\n",	    top_dir,	    gnome_vfs_result_to_string(res),	    res);    goto error_out;  }  res=gnome_vfs_directory_read_next(handle,info);  if (res!=GNOME_VFS_OK) {    if (res != GNOME_VFS_ERROR_EOF)      err_out("Can not read next dir:%s %s (%d)\n",	      top_dir,	      gnome_vfs_result_to_string(res),	      res);    goto error_out;  }  while (res==GNOME_VFS_OK) {    if ( (info->type==GNOME_VFS_FILE_TYPE_DIRECTORY) &&	 ( (strcmp(info->name,"..")) && (strcmp(info->name,"."))) ){      dbg_out("dir:%s\n",info->name);      next_dir=g_build_filename(top_dir,info->name,NULL);      if (!next_dir)	goto error_out;      rc=send_directory(con,next_dir,info->name,info);      g_free(next_dir);      if (rc<0)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产视频一区二区三区在线观看| 精油按摩中文字幕久久| eeuss鲁一区二区三区| 中文字幕欧美区| av激情成人网| 一区二区成人在线视频| 在线观看日韩国产| 亚洲h精品动漫在线观看| 欧美日韩国产欧美日美国产精品| 午夜伊人狠狠久久| 日韩一区二区在线观看| 国产精品一卡二卡在线观看| 中文字幕一区二区三区蜜月| 欧美亚洲禁片免费| 国内精品久久久久影院薰衣草 | 日韩一区欧美二区| 欧美大胆一级视频| 处破女av一区二区| 亚洲超碰97人人做人人爱| 欧美大片国产精品| 成人av影院在线| 亚洲国产日韩精品| 久久男人中文字幕资源站| 成人午夜看片网址| 亚洲成人自拍偷拍| 国产拍欧美日韩视频二区| 日本韩国一区二区三区| 加勒比av一区二区| 亚洲乱码精品一二三四区日韩在线| 欧美日韩亚洲不卡| 国产suv精品一区二区三区| 日韩美女视频一区| 日韩美女天天操| 91麻豆视频网站| 免费成人在线播放| 国产精品盗摄一区二区三区| 6080日韩午夜伦伦午夜伦| 高清av一区二区| 日本成人在线不卡视频| 国产女人aaa级久久久级 | 日韩欧美成人午夜| 91社区在线播放| 国产综合色在线视频区| 午夜视频久久久久久| 国产精品午夜在线观看| 91精品国产黑色紧身裤美女| 99久久综合狠狠综合久久| 久久国产精品免费| 亚洲国产视频在线| 中文字幕一区二| 欧美精品一区二区三区很污很色的| 一道本成人在线| 国产91精品精华液一区二区三区| 日本欧洲一区二区| 亚洲韩国精品一区| 亚洲婷婷国产精品电影人久久| 精品卡一卡二卡三卡四在线| 欧美男同性恋视频网站| 94-欧美-setu| 久久av资源网| 日韩av不卡一区二区| 一卡二卡欧美日韩| 日韩美女啊v在线免费观看| 99视频在线观看一区三区| 国产精品911| 久久99精品久久久久久国产越南 | 亚洲精品乱码久久久久久久久| 国产校园另类小说区| 日韩欧美久久久| 88在线观看91蜜桃国自产| 欧美午夜精品理论片a级按摩| 91免费精品国自产拍在线不卡| 国产精品自拍一区| 国产精品亚洲第一| 国产盗摄精品一区二区三区在线| 久久99久久精品欧美| 欧美在线高清视频| 色吊一区二区三区| 欧美在线不卡一区| 欧美日韩国产高清一区二区| 精品视频123区在线观看| 欧美性色欧美a在线播放| 欧美日韩在线不卡| 91精品免费观看| 欧美一区二区三区视频| 日韩午夜小视频| 精品国产免费久久| 欧美欧美欧美欧美| 717成人午夜免费福利电影| 欧美日韩久久不卡| 日韩一级视频免费观看在线| 日韩女优视频免费观看| www久久久久| 国产欧美日韩精品一区| 亚洲男人天堂av网| 午夜影院在线观看欧美| 青青国产91久久久久久| 精品一区二区三区在线播放视频| 韩日av一区二区| 成人福利在线看| 在线观看网站黄不卡| 欧美久久免费观看| 久久综合九色综合欧美亚洲| 欧美高清一级片在线观看| 一区二区三区色| 日本亚洲天堂网| 精品一区二区三区欧美| 国产不卡视频一区| 91极品视觉盛宴| 日韩精品专区在线影院重磅| 日本一区二区三区电影| **性色生活片久久毛片| 日韩精品一二三四| 国产精品一区二区免费不卡| 欧洲一区在线观看| 欧美日韩在线播放一区| 精品理论电影在线观看 | 欧美一区二区三区视频| 国产欧美日韩三区| 日日夜夜精品免费视频| 国产成人精品综合在线观看 | 国产精品久久久久四虎| 亚洲一二三区在线观看| 国产一区二区福利视频| 一本色道久久加勒比精品| 日韩久久精品一区| 亚洲最大的成人av| 国产一区二区在线看| 欧美亚洲国产一区在线观看网站| 久久影院视频免费| 一区二区三区国产精品| 国产成人在线电影| 欧美一区二区性放荡片| 一区二区三区在线视频免费| 精品一区二区日韩| 欧美日韩精品二区第二页| 国产精品久久久久久久浪潮网站| 蜜臀久久99精品久久久久久9| 91影视在线播放| 国产日韩视频一区二区三区| 日本人妖一区二区| 欧美日韩国产区一| 一区二区三区日韩精品视频| 成年人午夜久久久| 国产丝袜美腿一区二区三区| 久久精品国产第一区二区三区| 欧美影视一区二区三区| 亚洲人成影院在线观看| 国产精品亚洲专一区二区三区 | 亚洲欧洲色图综合| 国产一区激情在线| 日韩精品中文字幕在线不卡尤物 | 一区二区三区日韩精品视频| av在线不卡观看免费观看| 久久精品这里都是精品| 狠狠网亚洲精品| 欧美成人精品高清在线播放| 日韩中文字幕91| 欧美乱熟臀69xxxxxx| 亚洲电影一区二区三区| 日本福利一区二区| 亚洲乱码国产乱码精品精可以看| 成人免费高清在线| 国产精品午夜在线观看| 成人动漫精品一区二区| 国产精品视频一二| 成人黄页在线观看| 国产精品美女久久久久久久久| 国产成人欧美日韩在线电影| 久久伊人中文字幕| 国产aⅴ综合色| 中文字幕精品—区二区四季| 国产白丝精品91爽爽久久| 久久精品视频网| 成人综合日日夜夜| 国产精品成人免费在线| 一本久久综合亚洲鲁鲁五月天| 亚洲欧美偷拍另类a∨色屁股| 色综合天天天天做夜夜夜夜做| 亚洲视频狠狠干| 91国偷自产一区二区开放时间| 亚洲va国产va欧美va观看| 欧美一级片在线观看| 国内国产精品久久| 日本一区二区久久| 日本韩国一区二区三区视频| 午夜精品在线视频一区| 日韩情涩欧美日韩视频| 激情国产一区二区| 中国av一区二区三区| 欧美亚洲图片小说| 久久精品国产精品亚洲红杏| 欧美国产一区二区| 在线亚洲一区观看| 免费一级欧美片在线观看| 国产午夜精品理论片a级大结局 | 成人免费va视频| 亚洲一级电影视频| 久久夜色精品一区| 色综合天天在线|