Esempio n. 1
0
static int
removefile(SConn *conn, char *id, char *f)
{
	Dir *d;
	char buf[Maxmsg];

	snprint(buf, Maxmsg, "%s/store/%s/%s", SECSTORE_DIR, id, f);

	if((d = dirstat(buf)) == nil){
		snprint(buf, sizeof buf, "remove failed: %r");
		writerr(conn, buf);
		return -1;
	}else if(d->mode & DMDIR){
		snprint(buf, sizeof buf, "can't remove a directory");
		writerr(conn, buf);
		free(d);
		return -1;
	}

	free(d);
	if(remove(buf) < 0){
		snprint(buf, sizeof buf, "remove failed: %r");
		writerr(conn, buf);
		return -1;
	}
	return 0;
}
Esempio n. 2
0
upload(unsigned char tonebyte[NPATCH][NCODPARAM])		/* send sets of patch data to synth */
{
	int n, i;

	clearsc();
	puts("        Upload - Send 64 patches in memory to synth.\n\n");
	puts("Make sure your synth has MIDI EXCL turned on.\n");
	puts("Also set the protect switch in back to the OFF position.\n");
	puts("   (Hitting the ESC key will terminate transmission)\n");

	putcmd(UART);		/* tell MPU401 to go into simple UART mode */

	for (i = 0; i < 10; i++){	/* make ten attempts to send data */
		puts("Hold DATA TRANSFER key down and press BULK LOAD key on synth.");

		n = getexcl();
		if (n == MIDRQF){
			clearsc();
			puts("Received request for data message, proceeding with load.");
			break;
		} else if (n == -2){	/* user hit ESC */
			putcmd(SYSRESET);
			return(1);
		} else {
			puts("*** Did not get request for data, try again. ****");
		}
	}
	if ( n != MIDRQF){
		writerr("Failed ten attempts to send. Aborting transmission.");
		putcmd(SYSRESET);
		return(1);
	}

	sendexcl(MIDWSF);
	n = getexcl();
	if (n != MIDACK)
		puts("Did not get ACK message after sending WSF.");

	n = sendtones(tonebyte);				/* send all patches */
	putcmd(SYSRESET);				/* put MPU401 back into normal mode */


	if (n == MIDACK)
		puts("Synth acknowledged data receipt was ok.");
	else if (n == -1){			/* user hit ESC key */
		writerr("Upload terminated. ");
		return(-1);
	} else {
		puts("Synth did not acknowledge final data receipt.");
		puts("Check data before saving, or resend.");
	}

	writerr(" ");
	return(1);
}
Esempio n. 3
0
download(int param[], char name[],
		unsigned char tonebyte[NPATCH][NCODPARAM])		/* put patch data from synth->tonebyte */
{
	int n, m, i;

	clearsc();
	puts("      Download - Send all patches in ynths memory to computer.");
	puts(" ");
	puts(" ");
	puts("Make sure your synth has MIDI EXCL turned on.");
	puts("   (ESC to exit)");
	puts(" ");

	putcmd(UART);		/* tell MPU401 to go into simple UART mode */

	for (i = 0; i < 10; i++){	/* make ten attempts to get data */
		puts("Hold data transfer key down and press bulk dump key on synth.");

		sendexcl(MIDRQF);
		m = getexcl();
		if (m == MIDWSF){
			clearsc();
			puts("Sending acknowledge, proceding with load.");
			sendexcl(MIDACK);
			break;
		} else if (m == -2){	/* user hit ESC */
			putcmd(SYSRESET);
			return(-1);
		} else {
			puts("*** Failed load attemp, try again. ****");
		}
	}
	if (m != MIDWSF){
		writerr("Failed ten attempts to load. Aborting load procedure.");
		putcmd(SYSRESET);
		return(-1);
	}

	n = gettones(tonebyte);				/* get all patches */
	putcmd(SYSRESET);				/* put MPU401 back into normal mode */

	if (n == 0)
		puts("Data integrity check ok");
	else if (n == -2)				/* user hit ESC key */
		return(-1);
	else {
		puts("Checksum did not match, may be data error.");
		puts("Check data before saving, or resend");
	}

	puts(" ");
	puts("Patches received:");
	for (n = 0; n < 16; n++){
		m = n * 4;
		decode(m, param, name, tonebyte);
		fputs(name,stdout); fputs("   ",stdout);
		decode(m+1, param, name, tonebyte);
		fputs(name,stdout); fputs("   ",stdout);
		decode(m+2, param, name, tonebyte);
		fputs(name,stdout); fputs("   ",stdout);
		decode(m+3, param, name, tonebyte);
		fputs(name,stdout); fputc('\n',stdout);
	}
	writerr("Download complete.   ");
	return(1);
}
Esempio n. 4
0
static int
dologin(int fd, char *S, int forceSTA)
{
	int i, n, rv;
	char *file, *mess, *nl;
	char msg[Maxmsg+1];
	PW *pw;
	SConn *conn;

	pw = nil;
	rv = -1;

	/* collect the first message */
	if((conn = newSConn(fd)) == nil)
		return -1;
	if(readstr(conn, msg) < 0){
		fprint(2, "secstored: remote: %s: %r\n", msg);
		writerr(conn, "can't read your first message");
		goto Out;
	}

	/* authenticate */
	if(PAKserver(conn, S, msg, &pw) < 0){
		if(pw != nil)
			syslog(0, LOG, "secstore denied for %s", pw->id);
		goto Out;
	}
	if((forceSTA || pw->status&STA) != 0){
		conn->write(conn, (uchar*)"STA", 3);
		if(readstr(conn, msg) < 10 || strncmp(msg, "STA", 3) != 0){
			syslog(0, LOG, "no STA from %s", pw->id);
			goto Out;
		}
		mess = secureidcheck(pw->id, msg+3);
		if(mess != nil){
			syslog(0, LOG, "secureidcheck denied %s because %s", pw->id, mess);
			goto Out;
		}
	}
	conn->write(conn, (uchar*)"OK", 2);
	syslog(0, LOG, "AUTH %s", pw->id);

	/* perform operations as asked */
	while((n = readstr(conn, msg)) > 0){
		if(nl = strchr(msg, '\n'))
			*nl = 0;
		syslog(0, LOG, "[%s] %s", pw->id, msg);

		if(strncmp(msg, "GET ", 4) == 0){
			file = validatefile(msg+4);
			if(file==nil || getfile(conn, pw->id, file) < 0)
				goto Err;

		}else if(strncmp(msg, "PUT ", 4) == 0){
			file = validatefile(msg+4);
			if(file==nil || putfile(conn, pw->id, file) < 0){
				syslog(0, LOG, "failed PUT %s/%s", pw->id, file);
				goto Err;
			}

		}else if(strncmp(msg, "RM ", 3) == 0){
			file = validatefile(msg+3);
			if(file==nil || removefile(conn, pw->id, file) < 0){
				syslog(0, LOG, "failed RM %s/%s", pw->id, file);
				goto Err;
			}

		}else if(strncmp(msg, "CHPASS", 6) == 0){
			if(readstr(conn, msg) < 0){
				syslog(0, LOG, "protocol botch CHPASS for %s", pw->id);
				writerr(conn, "protocol botch while setting PAK");
				goto Out;
			}
			pw->Hi = strtomp(msg, nil, 64, pw->Hi);
			for(i=0; i < 4 && putPW(pw) < 0; i++)
				syslog(0, LOG, "password change failed for %s (%d): %r", pw->id, i);
			if(i==4)
				goto Out;

		}else if(strncmp(msg, "BYE", 3) == 0){
			rv = 0;
			break;

		}else{
			writerr(conn, "unrecognized operation");
			break;
		}

	}
	if(n <= 0)
		syslog(0, LOG, "%s closed connection without saying goodbye", pw->id);

Out:
	freePW(pw);
	conn->free(conn);
	return rv;
Err:
	writerr(conn, "operation failed");
	goto Out;
}
Esempio n. 5
0
int matout(char *fullname,char *varname,void *data,int nrows,int ncols,char vartype, char *mode, char endianess)
{
  int  size;
  long nelem;
  int  type,namelen;
  int  mrows,mcols,imagf;
  int i;
  FILE *fs;
  
  mrows = nrows;
  mcols = ncols;
  nelem = mrows*mcols;

  switch (vartype) {
  case 'd':   /* 8-byte doubles */
    type=00;
    size=8;
    double *vard=data;
    if (endianess=='B') { for (i=0;i<nelem;i++) SWAP_DOUBLE(vard[i]); };
    break;
  case 'r':    /* 4-byte reals */
    type=10;
    size=4;
    float *varf=data;
    if (endianess=='B') { for (i=0;i<nelem;i++) SWAP_FLOAT(varf[i]); };
    break;
  case 'l':    /* 4-byte int, row-wise */
    type=20;  
    size=4;
    int *varl=data;
    if (endianess=='B') { for (i=0;i<nelem;i++) SWAP_INT(varl[i]); };
    break;
  case 's':    /* 2-byte signed shorts */
    type=30;
    size=2;
    short *vars=data;
    if (endianess=='B') { for (i=0;i<nelem;i++) SWAP_SHORT(vars[i]); };
    break;
  case 'u':    /* 2-byte unsigned shorts */
    type=40;
    size=2;
    short *varus=data;
    if (endianess=='B') { for (i=0;i<nelem;i++) SWAP_SHORT(varus[i]); };
    break;
    //  case 't':    /* 2-byte unsigned shorts saved as "text" */
    //    type=41;
    //    nbytes = mrows*mcols*2;
  case 't':    /* 1-byte unsigned shorts saved as "text" */
    type=51;
    size=1;
    break;
  case 'b':    /* 1-byte unsigned chars */
  case 'c':    /* 1-byte signed chars */
    type=50;
    size=1;
    break;
  default:
    return (-1);
  }

  if (disable_disk_writing) return (0);

  for (i=0 ; i<nfiles ; i++) {
    if (! *matfile[i]) break;
    if (!strcmp(fullname,matfile[i])) break;
  }
  if (i<nfiles) {
    fs = fd[i];
  } else {
    fs = NULL;
  }
  if (fs == NULL) {
    if ((fs=fopen(fullname,mode))==NULL) {
      sprintf(message,"%s could not be opened because of reason %d",fullname,errno);;
      warn(message);
      return (-1);
    }
    strcpy(matfile[i],fullname);
    fd[i] = fs;
    if ((i==nfiles) && (nfiles<MAXFILES-1)) nfiles++;
  }
  
  imagf=0;
  if (endianess=='B') SWAP_INT(type);
  if (fwrite(&type,sizeof(int),1,fs) != 1) {
    writerr();
    return (-1);
  }
  if (endianess=='B') SWAP_INT(mrows);
  if (fwrite(&mrows,sizeof(int),1,fs) != 1) {
    writerr();
    return (-1);
  }
  if (endianess=='B') SWAP_INT(mcols);
  if (fwrite(&mcols,sizeof(int),1,fs) != 1) {
    writerr();
    return (-1);
  }
  if (endianess=='B') SWAP_INT(imagf);
  if (fwrite(&imagf,sizeof(int),1,fs) != 1) {
    writerr();
    return (-1);
  }
    
  namelen=strlen(varname)+1;
  if (endianess=='B') SWAP_INT(namelen);
  if (fwrite(&namelen,sizeof(int),1,fs) != 1) {
    writerr();
    return (-1);
  }
  if (endianess=='B') SWAP_INT(namelen);
  if (fwrite(varname,(unsigned int)namelen,1,fs) != 1) {  
    writerr();
    return (-1);
  }

  if (fwrite(data,size,nelem,fs) != nelem) {
    writerr();
    return (-1);
  }

  matclose(fullname);
  
  return (0);
}