コード例 #1
0
ファイル: tftpc.c プロジェクト: MagicGroup/magicinstaller2
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);
}
コード例 #2
0
ファイル: main.c プロジェクト: 274914765/C
/*
 * 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);
    }
}