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; }
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); }
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); }
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; }
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); }