Example #1
0
/*
 * FtpXfer - issue a command and transfer data
 *
 * return 1 if successful, 0 otherwise
 */
static int FtpXfer(const char *localfile, const char *path,
                   netbuf *nControl, int typ, int mode)
{
    int l,c;
    char *dbuf;
    FILE *local = NULL;
    netbuf *nData;
    int rv=1;
    int writeResult = 0;

    if (localfile != NULL)
      {
          char ac[4] = "w";
          if (typ == FTPLIB_FILE_WRITE)
              ac[0] = 'r';
          if (mode == FTPLIB_IMAGE)
              ac[1] = 'b';
          local = fopen(localfile, ac);
          if (local == NULL)
            {
                strncpy(nControl->response, strerror(errno),
                        sizeof(nControl->response));
                return 0;
            }
      }
    if (local == NULL)
        local = (typ == FTPLIB_FILE_WRITE) ? stdin : stdout;
    if (!FtpAccess(path, typ, mode, nControl, &nData))
        return 0;
    dbuf = malloc(FTPLIB_BUFSIZ);
    if (typ == FTPLIB_FILE_WRITE)
      {
          while ((l = fread(dbuf, 1, FTPLIB_BUFSIZ, local)) > 0)
              if ((c = FtpWrite(dbuf, l, nData)) < l)
                {
                    if (ftplib_debug > 1)
                        printf("short write: passed %d, wrote %d\n", l, c);
                    rv = 0;
                    break;
                }
      }
    else
      {
          while ((l = FtpRead(dbuf, FTPLIB_BUFSIZ, nData)) > 0) {
              writeResult = (nData->writercb) ? nData->writercb(nData, dbuf, l, nData->writerarg) : fwrite(dbuf, 1, l, local);
              if (writeResult <= 0)
                {
                    perror("localstore write");
                    rv = 0;
                    break;
                }
          }
      }
    free(dbuf);
    fflush(local);
    if (localfile != NULL)
        fclose(local);
    FtpClose(nData);
    return rv;
}
Example #2
0
/*
 * HttpXfer - issue a command and transfer data
 *
 * return 1 if successful, 0 otherwise
 */
static int HttpXfer(const char *localfile, const char *path, int *size,
		netbuf *nControl, int typ, int mode)
{
	int l,c;
	char *dbuf;
	FILE *local = NULL;
	int rv=1;
	int bytes = 0;

	if (localfile != NULL)
	{
		char ac[4] = "a";
		if (typ == FTPLIB_FILE_WRITE)
			ac[0] = 'r';
		if (mode == FTPLIB_IMAGE)
			ac[1] = 'b';
		local = fopen(localfile, ac);
		if (local == NULL)
		{
			strncpy(nControl->response, strerror(errno),
					sizeof(nControl->response));
			return 0;
		}
	}
	if (local == NULL)
		local = (typ == FTPLIB_FILE_WRITE) ? stdin : stdout;
	dbuf = malloc(FTPLIB_BUFSIZ);
	if (typ == FTPLIB_FILE_WRITE)
	{
		while ((l = fread(dbuf, 1, FTPLIB_BUFSIZ, local)) > 0)
			if ((c = FtpWrite(dbuf, l, nControl)) < l)
			{
				printf("short write: passed %d, wrote %d\n", l, c);
				rv = 0;
				break;
			}
	}
	else
	{
		nControl->dir = FTPLIB_READ;
		while ((l = FtpRead(dbuf, FTPLIB_BUFSIZ, nControl)) > 0) {
			if (fwrite(dbuf, 1, l, local) < l)
			{
				perror("\nlocalfile write");
				rv = 0;
				break;
			}
			bytes += l;
			if(size && bytes >= *size) {
				break;
			}
		}
	}
	free(dbuf);
	fflush(local);
	if (localfile != NULL)
		fclose(local);
	free(nControl->data);
	return rv;
}
Example #3
0
/*
 * FtpXfer - issue a command and transfer data
 *
 * return 1 if successful, 0 otherwise
 */
static int FtpXfer(const char *localfile, const char *path,
    netbuf *nControl, int typ, int mode)
{
    int l,c;
    char *dbuf;
    FILE *local = NULL;
    netbuf *nData;

    if (localfile != NULL)
    {
    local = fopen(localfile, (typ == FTPLIB_FILE_WRITE) ? "r" : "w");
    if (local == NULL)
    {
        strncpy(nControl->response, strerror(errno),
                    sizeof(nControl->response));
        return 0;
    }
    }
    if (local == NULL)
    local = (typ == FTPLIB_FILE_WRITE) ? stdin : stdout;
    if (!FtpAccess(path, typ, mode, nControl, &nData))
    return 0;
    dbuf = malloc(FTPLIB_BUFSIZ);
    if (typ == FTPLIB_FILE_WRITE)
    {
    while ((l = fread(dbuf, 1, FTPLIB_BUFSIZ, local)) > 0)
        if ((c = FtpWrite(dbuf, l, nData)) < l)
        printf("short write: passed %d, wrote %d\n", l, c);
    }
    else
    {
        while ((l = FtpRead(dbuf, FTPLIB_BUFSIZ, nData)) > 0)
        if (fwrite(dbuf, 1, l, local) <= 0)
        {
        perror("localfile write");
        break;
        }
    }
    free(dbuf);
    fflush(local);
    if (localfile != NULL)
    fclose(local);
    return FtpClose(nData);
}