00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 static int tcl_dccsend STDVAR
00024 {
00025 char s[10], *sys, *nfn;
00026 int i;
00027
00028 BADARGS(3, 3, " filename ircnick");
00029
00030 if (!file_readable(argv[1])) {
00031 Tcl_AppendResult(irp, "3", NULL);
00032 return TCL_OK;
00033 }
00034 nfn = strrchr(argv[1], '/');
00035
00036 if (nfn == NULL)
00037 nfn = argv[1];
00038 else
00039 nfn++;
00040 if (at_limit(argv[2])) {
00041 if (nfn == argv[1])
00042 queue_file("*", nfn, "(script)", argv[2]);
00043 else {
00044 nfn--;
00045 *nfn = 0;
00046 nfn++;
00047 sys = nmalloc(strlen(argv[1]) + 2);
00048 sprintf(sys, "*%s", argv[1]);
00049 queue_file(sys, nfn, "(script)", argv[2]);
00050 nfree(sys);
00051 }
00052 Tcl_AppendResult(irp, "4", NULL);
00053 return TCL_OK;
00054 }
00055 if (copy_to_tmp) {
00056 sys = nmalloc(strlen(tempdir) + strlen(nfn) + 1);
00057 sprintf(sys, "%s%s", tempdir, nfn);
00058 if (file_readable(sys)) {
00059 Tcl_AppendResult(irp, "5", NULL);
00060 return TCL_OK;
00061 }
00062 copyfile(argv[1], sys);
00063 } else {
00064 sys = nmalloc(strlen(argv[1]) + 1);
00065 strcpy(sys, argv[1]);
00066 }
00067 i = raw_dcc_send(sys, argv[2], "*", argv[1]);
00068 if (i > 0)
00069 wipe_tmp_filename(sys, -1);
00070 egg_snprintf(s, sizeof s, "%d", i);
00071 Tcl_AppendResult(irp, s, NULL);
00072 nfree(sys);
00073 return TCL_OK;
00074 }
00075
00076 static int tcl_getfileq STDVAR
00077 {
00078 char *s = NULL;
00079 fileq_t *q;
00080
00081 BADARGS(2, 2, " handle");
00082
00083 for (q = fileq; q; q = q->next) {
00084 if (!egg_strcasecmp(q->nick, argv[1])) {
00085 s = nrealloc(s, strlen(q->to) + strlen(q->dir) + strlen(q->file) + 4);
00086 if (q->dir[0] == '*')
00087 sprintf(s, "%s %s/%s", q->to, &q->dir[1], q->file);
00088 else
00089 sprintf(s, "%s /%s%s%s", q->to, q->dir, q->dir[0] ? "/" : "", q->file);
00090 Tcl_AppendElement(irp, s);
00091 }
00092 }
00093 if (s)
00094 nfree(s);
00095 return TCL_OK;
00096 }
00097
00098 static int tcl_getfilesendtime STDVAR
00099 {
00100 int sock, i;
00101 char s[15];
00102
00103 BADARGS(2, 2, " idx");
00104
00105 sock = atoi(argv[1]);
00106 for (i = 0; i < dcc_total; i++) {
00107 if (dcc[i].sock == sock) {
00108 if (dcc[i].type == &DCC_SEND || dcc[i].type == &DCC_GET) {
00109 egg_snprintf(s, sizeof s, "%lu", dcc[i].u.xfer->start_time);
00110 Tcl_AppendResult(irp, s, NULL);
00111 } else
00112 Tcl_AppendResult(irp, "-2", NULL);
00113 return TCL_OK;
00114 }
00115 }
00116 Tcl_AppendResult(irp, "-1", NULL);
00117 return TCL_OK;
00118 }
00119
00120 static tcl_cmds mytcls[] = {
00121 {"dccsend", tcl_dccsend},
00122 {"getfileq", tcl_getfileq},
00123 {"getfilesendtime", tcl_getfilesendtime},
00124 {NULL, NULL}
00125 };