static PyObject * tftpc_put(PyTFtpClientObject *obj, PyObject *args) { int localfd; int amount; char *local_file = NULL; char *remote_file = NULL; if (!PyArg_ParseTuple(args, "s|s:put", &local_file, &remote_file)) return NULL; if (!obj->connected) { PyErr_SetString(PyExc_Connect, "Not connected yet."); return NULL; } if (remote_file == NULL) remote_file = local_file; localfd = open(local_file, O_RDONLY); if (localfd < 0) { PyErr_SetFromErrno(PyExc_IOError); return NULL; } obj->peeraddr.sin_port = obj->port; amount = tftp_sendfile(obj->socketfd, &(obj->peeraddr), localfd, remote_file, obj->mode ? "netascii" : "octet"); return Py_BuildValue("i", amount); }
/* * Send file(s). */ void put (int argc, char *argv[]) { int fd; int n; char *cp, *targ; if (argc < 2) { getmoreargs ("send ", "(file) "); makeargv (); argc = margc; argv = margv; } if (argc < 2) { putusage (argv[0]); return; } targ = argv[argc - 1]; if (strchr (argv[argc - 1], ':')) { struct hostent *hp; for (n = 1; n < argc - 1; n++) if (strchr (argv[n], ':')) { putusage (argv[0]); return; } cp = argv[argc - 1]; targ = strchr (cp, ':'); *targ++ = 0; hp = gethostbyname (cp); if (hp == NULL) { fprintf (stderr, "tftp: %s: ", cp); herror ((char *) NULL); return; } bcopy (hp->h_addr, (caddr_t) & peeraddr.sin_addr, hp->h_length); peeraddr.sin_family = hp->h_addrtype; connected = 1; hostname = xstrdup (hp->h_name); } if (!connected) { printf ("No target machine specified.\n"); return; } if (argc < 4) { cp = argc == 2 ? tail (targ) : argv[1]; fd = open (cp, O_RDONLY | mode->m_openflags); if (fd < 0) { fprintf (stderr, "tftp: "); perror (cp); return; } if (verbose) printf ("putting %s to %s:%s [%s]\n", cp, hostname, targ, mode->m_mode); peeraddr.sin_port = port; tftp_sendfile (fd, targ, mode->m_mode); return; } /* this assumes the target is a directory */ /* on a remote unix system. hmmmm. */ cp = strchr (targ, '\0'); *cp++ = '/'; for (n = 1; n < argc - 1; n++) { strcpy (cp, tail (argv[n])); fd = open (argv[n], O_RDONLY | mode->m_openflags); if (fd < 0) { fprintf (stderr, "tftp: "); perror (argv[n]); continue; } if (verbose) printf ("putting %s to %s:%s [%s]\n", argv[n], hostname, targ, mode->m_mode); peeraddr.sin_port = port; tftp_sendfile (fd, targ, mode->m_mode); } }