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

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

?? downloads.c

?? Linux下的飛鴿傳書
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* *  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. */#ifdef HAVE_CONFIG_H#  include <config.h>#endif#include <gnome.h>#include <glib.h>#include <gconf/gconf-client.h>#include "callbacks.h"#include "interface.h"#include "support.h"#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>#include <sys/socket.h>#include <netinet/in.h>#include <sys/time.h>#include <errno.h>#include <libgnomevfs/gnome-vfs.h>#include <libgnomevfs/gnome-vfs-utils.h>#include <libgnomevfs/gnome-vfs-mime-handlers.h>#include "common.h"/* static */static intrelease_dir_info_contents(dir_request_t *info){  if (info->filename)    g_free(info->filename);  return 0;}static intparse_dir_request(const char *message,dir_request_t *ret,size_t max_len){  int rc;  char *buff;  char *token;  long int_val;  char *sp=NULL;  char *ep=NULL;  char *basename;  char *filename;  ssize_t remains;  if ( (!message) || (!ret) || (!max_len) )    return -EINVAL;    buff=g_malloc(max_len+1); /* 最終パケットは\0終端されていないことに注意 */  if (!buff)    return -ENOMEM;  memset(ret,0,sizeof(dir_request_t)); /*  念のため */  memcpy(buff,message,max_len);  buff[max_len]='\0';  dbg_out("buff(len:%d):%s\n",strlen(buff),buff);  remains=max_len;  /*書式: header-size:filename:file-size:fileattr:*/    /*   * ヘッダサイズ   */  sp=buff;  ep=memchr(sp, ':', remains);  if (!ep) {    rc=-EINVAL;    goto error_out;  }  *ep='\0';  remains =max_len - ((unsigned long)ep-(unsigned long)buff);  if (remains<=0) {    rc=-EINVAL;    goto error_out;  }  ++ep;  int_val=strtol(sp, (char **)NULL, 16);  ret->header_size=int_val;  dbg_out("header size:%d(%x)\n",ret->header_size,ret->header_size);  sp=ep;  /*   * ファイル名   */  ep=memchr(sp, ':', remains);  if (!ep) {    rc=-EINVAL;    goto error_out;  }  *ep='\0';  remains =max_len - ((unsigned long)ep-(unsigned long)buff);  if (remains<=0) {    rc=-EINVAL;    goto error_out;  }  ++ep;  rc=-ENOMEM;  basename=g_path_get_basename(sp);  if  (!basename)    goto error_out;  rc=convert_string_internal(basename,(const gchar **)&filename);  if (rc<0) {    err_out("Can not convert this request:%s\n",sp);    err_out("Can not convert file name:%s\n",basename);    g_free(basename);    goto error_out;  }    g_free(basename);  ret->filename=filename;  dbg_out("filename:%s\n",ret->filename);  sp=ep;  /*   * ファイルサイズ   */  ep=memchr(sp, ':', remains);  if (!ep) {    rc=-EINVAL;    goto error_out;  }  *ep='\0';  remains =max_len - ((unsigned long)ep-(unsigned long)buff);  if (remains<=0) {    rc=-EINVAL;    goto error_out;  }  ++ep;  int_val=strtol(sp, (char **)NULL, 16);  ret->file_size=int_val;  dbg_out("file size:%d(%x)\n",ret->file_size,ret->file_size);  sp=ep;  /*   * ファイル種別   */  ep=memchr(sp, ':', remains);  if (!ep) {    rc=-EINVAL;    goto error_out;  }  *ep='\0';  remains =max_len - ((unsigned long)ep-(unsigned long)buff);  if (remains<=0) {    rc=-EINVAL;    goto error_out;  }  ++ep;  int_val=strtol(sp, (char **)NULL, 16);  ret->ipmsg_fattr=int_val;  dbg_out("ipmsg file attr:%d(%x)\n",ret->ipmsg_fattr,ret->ipmsg_fattr);  sp=ep;  if (download_base_cmd(ret->ipmsg_fattr) != IPMSG_FILE_RETPARENT) {    rc=-EPERM;    if (!strcmp(G_DIR_SEPARATOR_S,basename)) {      g_free(basename);      goto error_out;    }    if (!strcmp(basename,"..")){      g_free(basename); /* 上位への移動は禁止 */      goto error_out;    }    if (!strcmp(basename,".")){      g_free(basename); /* コマンド以外でのカレントへの移動は禁止 */      goto error_out;    }  }  rc=0; error_out:  g_free(buff);  return rc;}static intemulate_chdir(const char *current_dir,char *subdir,char **new_dir){  int rc;  char *buff;  gchar *dir_uri;  GnomeVFSResult result;  if ( (!current_dir) || (!subdir) || (!new_dir) )     return -EINVAL;  if (!strcmp(subdir,".."))    return -EINVAL; /* コマンド以外で上位には移動しない  */  if (!strcmp(subdir,"."))    return -EINVAL; /* コマンド以外でカレントには移動しない  */  if (!g_path_is_absolute(current_dir))    return -EINVAL;  buff=g_build_filename(current_dir,subdir,NULL);  if (!buff)    return -ENOMEM;  rc=-ENOMEM;  dir_uri=gnome_vfs_get_uri_from_local_path(buff);  if (!dir_uri)     goto error_out;  result=gnome_vfs_make_directory(dir_uri,GNOME_VFS_PERM_USER_ALL);  if ( (result != GNOME_VFS_OK) && (result != GNOME_VFS_ERROR_FILE_EXISTS) ) {    err_out("Can not create directory:%s\n",gnome_vfs_result_to_string(result));    rc=-result;    goto error_out;  }  if ( (result == GNOME_VFS_ERROR_FILE_EXISTS) &&       (download_overwrite_confirm_generic(buff)) ) {    rc=-result;    goto error_out;  }  *new_dir=buff;  return 0; error_out:  g_free(buff);  return rc;}static intcreate_parent_dir(const char *current_dir,char **parent){  int rc;  char *buff;  char *new_dir;  gchar *ep;  if ( (!current_dir) || (!parent) )    return -EINVAL;  buff=g_strdup(current_dir);  if (!buff)    return -ENOMEM;  rc=-ENOENT;  ep=g_strrstr(buff,G_DIR_SEPARATOR_S);  if ( (!ep) || (buff == ep) )    goto error_out;  *ep='\0';  rc=-ENOMEM;  new_dir=g_strdup(buff);  if (!new_dir)    goto error_out;  *parent=new_dir;  rc=0; error_out:  g_free(buff);  return rc;}static intcheck_end_condition(const char *top_dir,const char *current_dir,gboolean *is_cont){  size_t top_len;  size_t dir_len;    if ( (!top_dir) || (!current_dir) || (!is_cont) )    return -EINVAL;  *is_cont=TRUE;  top_len=strlen(top_dir);  dir_len=strlen(current_dir);  if (top_len >= dir_len)    *is_cont=FALSE;  return 0;}static intupdate_file_display(unsigned long filetype,const char *filename,size_t size,GtkTreeModel *model,GtkTreeIter *iter){  if ( (!filename) || (!model) || (!iter) )    return -EINVAL;  if (!GTK_IS_LIST_STORE (model)) {      war_out("Download window is destroyed.\n");      return -EFAULT; /*  仮にEFAULTを返す  */  }  gtk_list_store_set(GTK_LIST_STORE(model), iter, 		     1, filename, 		     2, 0,		     3, size,		     4, 0,		     5, filetype,		     6, get_file_type_name(filetype),		     -1);  ipmsg_update_ui();  return 0;}intdo_download(GtkTreeModel *model,	       GtkTreePath *path,	       GtkTreeIter *iter,	       gpointer data){  int rc;  tcp_con_t con;  GtkWidget *window;  GtkWidget *entry;  GtkWidget *all_check;  ipmsg_recvmsg_private_t *sender_info;  ipmsg_private_data_t *priv;  long pkt_no;  int fileid;  size_t total_write;  size_t may_read;  char filepath[PATH_MAX];  char *filename;  char *dirname;  char *req_message=NULL;  int is_retry;  int ftype;  gboolean is_interactive;  char *basename;    window=GTK_WIDGET(data);  if (!GTK_IS_WINDOW(window))    return -EFAULT;   entry=lookup_widget(GTK_WIDGET(window),"DownLoadDirectoryEntry");  if (!GTK_IS_ENTRY(entry))    return -EFAULT;   all_check=lookup_widget(GTK_WIDGET(window),"DownLoadAllCheckBtn");  if (!GTK_IS_CHECK_BUTTON(all_check))    return -EFAULT;   priv=(ipmsg_private_data_t *)lookup_widget(GTK_WIDGET(window),"senderInfo");  g_assert(priv);  sender_info=priv->data;   g_assert(sender_info->ipaddr);  pkt_no=sender_info->pktno;  gtk_tree_model_get (model, iter, 		      0, &fileid,		      1, &filename,		      3, &may_read,		      5, &ftype,		      -1);  basename=g_path_get_basename(filename);  g_free(filename);  if (!basename) {    return -ENOMEM;  }  dirname=(char *)gtk_entry_get_text(GTK_ENTRY(entry));  snprintf(filepath,PATH_MAX-1,"%s/%s",dirname,basename);  filepath[PATH_MAX-1]='\0';  g_free(basename);  dbg_out("download %d th element of %ld from %s into %s\n",fileid,pkt_no,sender_info->ipaddr,filepath); retry_this_file:  memset(&con,0,sizeof(tcp_con_t));  rc=tcp_setup_client(hostinfo_get_ipmsg_system_addr_family(),sender_info->ipaddr,hostinfo_refer_ipmsg_port(),&con);  if (rc<0) {    rc=-errno;    goto error_out;  }  /*    * ロックアップ対策のためのタイムアウト設定   */  rc=sock_recv_time_out(con.soc,TCP_CLIENT_TMOUT_MS);   if (rc<0) {    rc=-errno;    goto error_out;  }  /*  リクエスト送信  */  send_download_request(&con, ftype,pkt_no,fileid);  is_interactive=    ((gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(all_check)))?     (FALSE):(TRUE) );  switch(download_base_cmd(ftype)) {  case IPMSG_FILE_DIR:       /*  階層ディレクトリ受信  */      ipmsg_update_ui();      dbg_out("This is directory ignored.\n");      rc=do_download_directory(&con, dirname,model,iter);      if ( (!rc) && (is_interactive) )	rc=download_dir_open_operation(dirname);      break;  case IPMSG_FILE_REGULAR:   /*  通常ファイル受信  */    rc=do_download_regular_file(&con,filepath,may_read,&total_write,model,iter);    dbg_out("Retry:rc=%d file:%s write:%d expected read :%d dir:%s\n",	    rc,filepath,total_write,may_read,dirname);    is_retry=post_download_operation(rc,				   filepath,				   total_write,				   may_read,				   dirname,				   is_interactive);		       if ( (rc) && (is_retry == -EAGAIN) ) {      /* 0リセット */      gtk_list_store_set(GTK_LIST_STORE(model), iter, 			 2, 0,			 -1);      ipmsg_update_ui();      close(con.soc);      goto retry_this_file;    }    break;  default:    err_out("Unknown file type:%d\n",ftype);    break;  }  close(con.soc); /* 端點のクローズは, 受信側で行うのがipmsgの仕様  */ error_out:  return rc;}static voidprogress_cell_data_func(GtkTreeViewColumn *col,                    GtkCellRenderer   *renderer,                    GtkTreeModel      *model,                    GtkTreeIter       *iter,                    gpointer           user_data){  GtkTreeView *view;  GtkEntry *entry;  GtkWidget *window;  int   fd;  gint  sent;  gint  size;  int   fattr_num;  gint  persent;  gchar size_string[32];  gchar path_string[PATH_MAX];  gchar *filename;  gboolean is_exist=FALSE;  g_assert(user_data);  view=(GtkTreeView *)user_data;  window=lookup_widget(GTK_WIDGET(view),"downloadWindow");  g_assert(window);  entry=GTK_ENTRY(lookup_widget(GTK_WIDGET(view),"DownLoadDirectoryEntry"));  g_assert(entry);  gtk_tree_model_get(model, iter, 		     DOWNLOAD_FILENAME_NUM, &filename,		     DOWNLOAD_RECVSIZE_NUM, &sent,		     DOWNLOAD_FILESIZE_NUM, &size,		     DOWNLOAD_FILEATTR_NUM, &fattr_num,		     -1);  snprintf(path_string,PATH_MAX-1,"%s/%s",gtk_entry_get_text(GTK_ENTRY(entry)),filename);  path_string[PATH_MAX-1]='\0';  dbg_out("Check path:%s\n",path_string);/*   if ( (fattr_num != IPMSG_FILE_REGULAR) && (!size) ) *//*     return; */  switch(fattr_num) {  default:  case IPMSG_FILE_REGULAR:    break;  case IPMSG_FILE_DIR:    /* ディレクトリのダウンロードが完了したら     * 親ディレクトリへの復帰になるはずなので     * 0として扱う.     */       persent=0;    goto output_out;    break;  case IPMSG_FILE_RETPARENT:    /* ディレクトリの完了通知なので, 100%とみなす.     * 厳密にいえば手抜きだが,      * 中途のディレクトリも同様にあつかう         */       persent=100;    goto output_out;        break;  }  if (size>0)    persent=(gint)((sent/(double)size)*100);  else { /* 0バイトファイル対策  */    persent=0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美一区二区在线观看| 亚洲三级久久久| 色哟哟国产精品| 成人自拍视频在线观看| 国产精品18久久久久久久网站| 日本欧美一区二区三区| 美腿丝袜一区二区三区| 久久99精品国产.久久久久| 日本强好片久久久久久aaa| 裸体在线国模精品偷拍| 韩国av一区二区三区| 国产乱码字幕精品高清av | 欧美午夜理伦三级在线观看| 91麻豆免费看| 欧美中文字幕一二三区视频| 欧美一区二区三区日韩视频| 精品理论电影在线| 国产精品理论在线观看| 亚洲靠逼com| 日本午夜精品一区二区三区电影| 激情久久五月天| 一本一道久久a久久精品综合蜜臀| 91激情在线视频| 欧美一区二区三区免费观看视频| 精品久久人人做人人爽| 亚洲欧美怡红院| 日韩成人av影视| 成人h动漫精品一区二| 欧洲国产伦久久久久久久| 欧美一区二区三区四区在线观看| 精品国产91洋老外米糕| 中文字幕人成不卡一区| 五月激情六月综合| 国产91丝袜在线播放0| 成人av网址在线| 欧美精品一区二区三区视频| 国产一区二区三区av电影| 欧美图区在线视频| 日韩精品一区二区三区三区免费 | 日本久久电影网| 欧美日本在线一区| 久久精品夜色噜噜亚洲aⅴ| 亚洲欧洲日韩一区二区三区| 日韩电影网1区2区| av激情综合网| 91精品福利在线一区二区三区| 26uuu精品一区二区在线观看| 一区二区三区国产| 国产精选一区二区三区| 欧美另类高清zo欧美| 国产精品乱码妇女bbbb| 首页亚洲欧美制服丝腿| av午夜一区麻豆| 精品国产亚洲在线| 日韩专区在线视频| 91黄色免费版| 国产精品色眯眯| 国产主播一区二区| 678五月天丁香亚洲综合网| 亚洲同性同志一二三专区| 韩日精品视频一区| 在线综合亚洲欧美在线视频| 亚洲成人777| 91福利社在线观看| 国产精品久久久久久久岛一牛影视 | 国产成人在线电影| 欧美一区二区三区视频免费| 经典三级在线一区| 欧美日韩高清在线| 一区二区三区资源| 91理论电影在线观看| 国产日韩影视精品| 高清不卡一二三区| 国产午夜亚洲精品不卡| 国产资源精品在线观看| 天天综合日日夜夜精品| 亚洲国产综合在线| 中文字幕一区在线| 成人永久aaa| 久久久久久久久久久久久女国产乱| 午夜精品视频一区| 777精品伊人久久久久大香线蕉| 亚洲激情在线播放| 91国偷自产一区二区开放时间 | 久久 天天综合| 日韩免费观看高清完整版| 日本vs亚洲vs韩国一区三区二区 | 国产成人av自拍| 国产精品麻豆99久久久久久| 成人精品国产免费网站| wwwwww.欧美系列| 91麻豆免费视频| 日韩女优毛片在线| 国产传媒日韩欧美成人| 久久网站最新地址| 99久久精品国产毛片| 一区二区三区在线看| 91精品国产欧美日韩| 紧缚捆绑精品一区二区| 国产亚洲欧美日韩在线一区| 97久久人人超碰| 亚洲电影第三页| 精品99一区二区| eeuss影院一区二区三区| 亚洲乱码日产精品bd| 91精品国产乱码久久蜜臀| 国产呦萝稀缺另类资源| 国产精品剧情在线亚洲| 91精品国产综合久久久久久| 国产精品亚洲视频| 五月天丁香久久| 欧美高清在线精品一区| 精品国内片67194| 色综合视频在线观看| 亚洲成人精品一区二区| 亚洲va韩国va欧美va| 亚洲欧洲精品天堂一级 | 天天av天天翘天天综合网色鬼国产| 欧美日韩卡一卡二| 国产精品一区二区无线| 亚洲一卡二卡三卡四卡 | 成人国产在线观看| 日韩影院精彩在线| 中文字幕一区二区日韩精品绯色| 欧美日韩aaaaaa| 91麻豆文化传媒在线观看| 日韩精品1区2区3区| 亚洲欧洲精品一区二区精品久久久 | 久久综合精品国产一区二区三区| 色噜噜夜夜夜综合网| 免费高清在线视频一区·| 亚洲国产精品一区二区www| 国产成人高清在线| 日韩精品1区2区3区| 亚洲制服丝袜在线| 国产精品少妇自拍| 久久久久久久综合狠狠综合| 555夜色666亚洲国产免| 欧美亚洲一区三区| 欧美综合久久久| 成人国产亚洲欧美成人综合网| 国产麻豆精品一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎| 夜夜嗨av一区二区三区网页| 国产精品久久久久精k8| 欧美精品一区二区三区四区| 欧美亚洲尤物久久| 欧美午夜视频网站| 欧美三级日韩三级| 欧美日韩视频一区二区| 欧美在线一区二区三区| 欧美午夜免费电影| 欧美日韩在线不卡| 欧美精品色一区二区三区| 717成人午夜免费福利电影| 欧美日韩视频在线一区二区| 久久久亚洲综合| 一区二区三区在线高清| 1区2区3区欧美| 久久久99免费| 国产精品免费视频网站| 中文字幕av在线一区二区三区| 国产精品视频麻豆| 中文字幕亚洲区| 中文字幕免费一区| 亚洲欧美电影一区二区| 亚洲成人资源网| 日日摸夜夜添夜夜添精品视频| 日韩中文字幕亚洲一区二区va在线 | 奇米精品一区二区三区在线观看一| 亚洲一区二区三区四区在线免费观看 | 精品精品国产高清一毛片一天堂| 精品成人免费观看| 欧美一区二区三区在线观看 | 国产一区二区三区日韩 | 欧美激情一区二区三区| 国产精品福利影院| 亚洲色图.com| 亚洲午夜电影在线观看| 久久精品国产精品亚洲精品| 国产不卡视频一区| 色综合av在线| 欧美男人的天堂一二区| 日韩免费高清av| 亚洲人成网站在线| 免费av成人在线| 国产一区二区三区四区五区入口| 99久久久久久99| 国产精品乱码一区二三区小蝌蚪| 亚洲黄网站在线观看| 日本成人在线看| 91亚洲资源网| 欧美一区二区福利在线| 中文字幕一区二区三| 天天色天天爱天天射综合| 床上的激情91.| 日韩一区二区三区免费观看| 亚洲国产精品高清| 蜜臀av一区二区三区| 91在线免费看|