/* check permissions and setup the upload transfer */ void upload_start(const char *nick, const char *hostname, const char *hostmask, const char *filename, const char *remoteip, const char *remoteport, const char *bytes, char *token) { upload *ul; char *uploaddir; char *tempstr; off_t len; updatecontext(); len = atoull(bytes); if (invalid_upload(nick, hostmask, len)) return; uploaddir = get_uploaddir(hostmask); if (uploaddir == NULL) { error_upload_start(nick, hostmask, "no uploaddir", "No uploaddir defined."); return; } if (disk_full(uploaddir) != 0) { error_upload_start(nick, hostmask, "disk full", "not enough free space on disk"); return; } if (file_uploading(filename) != 0) { error_upload_start(nick, hostmask, "upload running", "I'm already getting this file"); return; } if (max_uploads_reached() != 0) { error_upload_start(nick, hostmask, "too many uploads", "I'm already getting too many files"); return; } ul = irlist_add(&gdata.uploads, sizeof(upload)); l_initvalues(ul); ul->file = mystrdup(getfilename(filename)); ul->con.family = (strchr(remoteip, ':')) ? AF_INET6 : AF_INET; ul->con.remoteaddr = mystrdup(remoteip); ul->con.remoteport = atoi(remoteport); ul->totalsize = len; ul->nick = mystrdup(nick); ul->hostname = mystrdup(hostname); ul->uploaddir = mystrdup(uploaddir); ul->net = gnetwork->net; qupload_started(gnetwork->net, nick); tempstr = getsendname(ul->file); ioutput(OUT_S|OUT_L|OUT_D, COLOR_YELLOW, "DCC Send Accepted from %s on %s: %s (%" LLPRINTFMT "dkB)", nick, gnetwork->name, tempstr, (ul->totalsize / 1024)); mydelete(tempstr); if (gdata.mirc_dcc64) if (ul->totalsize > 0xFFFFFFFFL) ul->mirc_dcc64 = 1; if (ul->con.remoteport > 0U) { l_establishcon(ul); } else { /* Passive DCC */ l_setup_passive(ul, token); } }
/* try to start a transfer */ void start_fetch_url(const userinput *const u, const char *uploaddir) { char *name; char *url; name = u->arg1; url = u->arg2e; while (*url == ' ') ++url; if (max_uploads_reached() != 0) { fetch_later(u, uploaddir, name, url); } else { fetch_now(u, uploaddir, name, url); } }