亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产精品的网站| 国产精品自产自拍| 成人aaaa免费全部观看| 精品国产乱码久久久久久夜甘婷婷| 一区二区在线免费观看| 91视频在线看| 亚洲最大成人网4388xx| 一本一本大道香蕉久在线精品| 91精品免费观看| 一区二区三区欧美激情| 97精品视频在线观看自产线路二 | 日韩精品亚洲专区| 久久午夜国产精品| 韩国三级电影一区二区| 精品88久久久久88久久久 | 粉嫩欧美一区二区三区高清影视| 精品国产一区二区国模嫣然| 韩国毛片一区二区三区| 国产欧美一区二区精品仙草咪| 国产乱色国产精品免费视频| 国产精品你懂的在线欣赏| av激情综合网| 亚洲第一精品在线| 久久一区二区三区四区| 99re视频精品| 日韩国产精品久久久久久亚洲| 欧美一级欧美三级在线观看| 国产sm精品调教视频网站| 亚洲精品成人少妇| 欧美成人在线直播| 欧洲另类一二三四区| 久久丁香综合五月国产三级网站| 国产精品免费视频一区| 67194成人在线观看| 成人免费av在线| 麻豆成人91精品二区三区| 亚洲天堂a在线| 久久婷婷综合激情| 欧美日本韩国一区二区三区视频| 丁香婷婷深情五月亚洲| 久久成人免费日本黄色| 午夜久久久久久久久久一区二区| 国产日韩欧美高清在线| 91精品婷婷国产综合久久| av影院午夜一区| 国产成人精品免费看| 天天影视涩香欲综合网| 亚洲欧美偷拍三级| 亚洲人成网站在线| 欧美岛国在线观看| 91激情五月电影| 一本到不卡精品视频在线观看| 国产一区二区三区精品视频| 麻豆成人免费电影| 久久国产精品72免费观看| 奇米影视7777精品一区二区| 午夜精品123| 日本不卡一区二区三区高清视频| 亚洲va韩国va欧美va| 亚洲午夜激情网页| 亚洲精品日韩一| 亚洲愉拍自拍另类高清精品| 亚洲视频免费看| 亚洲电影视频在线| 麻豆精品在线播放| 波多野结衣亚洲一区| 一本色道**综合亚洲精品蜜桃冫| 在线观看av一区二区| 欧美美女一区二区| 精品粉嫩aⅴ一区二区三区四区| 日韩欧美国产精品| 中文字幕一区二区三区不卡| 亚洲一区二区三区四区的| 免费在线观看成人| 99久久精品国产网站| 欧美日韩精品一区二区天天拍小说| 欧美一级二级三级蜜桃| 国产精品人妖ts系列视频| 亚洲一卡二卡三卡四卡五卡| 国内一区二区在线| 欧美性受xxxx| 国产精品无人区| 日本美女一区二区三区| 91浏览器打开| 久久精品一区蜜桃臀影院| 亚洲午夜精品在线| 成人精品一区二区三区四区| 99视频精品全部免费在线| 欧美性色综合网| 欧美激情在线观看视频免费| 日韩二区在线观看| 欧美色视频在线| 亚洲综合在线观看视频| 成人黄色777网| 日本一区二区三区视频视频| 久久国产精品第一页| 日韩一区二区麻豆国产| 午夜激情综合网| 精品污污网站免费看| 亚洲福利视频一区| 欧美美女黄视频| 免费国产亚洲视频| 日韩精品一区在线观看| 国内欧美视频一区二区| 久久综合久色欧美综合狠狠| 国产在线播放一区三区四| 欧美特级限制片免费在线观看| 国产精品久久久一本精品| 成人动漫一区二区三区| 中文字幕制服丝袜一区二区三区 | 91免费看`日韩一区二区| 亚洲免费成人av| 欧美日韩中文另类| 久久精品国产亚洲aⅴ| 国产日韩欧美不卡在线| 99久久精品免费看国产免费软件| 亚洲精品国产无套在线观| 欧美挠脚心视频网站| 精品一区二区三区在线观看| 国产日韩欧美高清| 欧美主播一区二区三区| 欧美bbbbb| 中文字幕一区二区三区在线不卡 | 色综合久久中文综合久久牛| 中文字幕免费不卡在线| 欧美三级在线视频| 国产精品羞羞答答xxdd| 亚洲精品午夜久久久| 日韩三级视频在线看| 成人av网站在线| 久久99精品久久久久婷婷| 中文字幕av一区二区三区免费看 | 亚洲人成在线播放网站岛国| 欧美一区二区三区爱爱| 大美女一区二区三区| 麻豆精品久久久| 亚洲一区免费观看| 国产精品免费看片| 日韩免费观看2025年上映的电影| 91一区二区在线观看| 久久精品国内一区二区三区| 天堂精品中文字幕在线| 亚洲视频 欧洲视频| 国产日韩一级二级三级| 日韩女优av电影| 欧美日韩国产另类不卡| 欧美亚洲综合色| 91国偷自产一区二区使用方法| 国产九色精品成人porny| 精品综合久久久久久8888| 免费在线观看一区二区三区| 日韩av电影天堂| 强制捆绑调教一区二区| 免费观看在线综合色| 日韩福利电影在线| 精品一区二区三区av| 国产高清精品网站| 色视频成人在线观看免| 欧美性生活一区| 精品日韩av一区二区| 国产日韩高清在线| 亚洲精品成人精品456| 日韩电影在线观看一区| 老司机精品视频导航| 粉嫩蜜臀av国产精品网站| 97精品久久久久中文字幕 | 久久这里只有精品首页| 中文字幕一区日韩精品欧美| 亚洲制服欧美中文字幕中文字幕| 日韩福利电影在线| 国产精品91一区二区| 欧美在线观看一区二区| 精品国产乱码久久久久久久| 国产精品久久三区| 日韩av中文字幕一区二区| av不卡免费电影| 精品日韩在线观看| 亚洲欧洲国产日本综合| 美女性感视频久久| 欧美色综合网站| 久久只精品国产| 久久爱www久久做| 欧美日韩国产一二三| 亚洲欧洲日韩在线| 韩国三级电影一区二区| 欧美一级日韩免费不卡| 亚洲免费在线播放| av在线一区二区| 国产亚洲精品免费| 麻豆成人91精品二区三区| 欧美三级中文字幕在线观看| 中文字幕一区不卡| 成人网在线播放| 久久久高清一区二区三区| 日本一区中文字幕| 欧美成人一区二区三区| 七七婷婷婷婷精品国产| 欧美一区二区人人喊爽| 日韩电影在线观看电影| 欧美一区日本一区韩国一区|