void put_serv(char *str, t_serv clt) { int size; int fd; char *name; name = getname(str); printf("Trying to recieve file : %s \n", name); write(clt.cs, "ok\0", 3); size = get_fsize(clt); printf("%d\n", size); if (size == -1) { printf("ERROR\n"); return ; } fd = open(name, O_CREAT | O_RDWR, 0777); get_fdata(clt, size, fd); close(fd); printf("SUCCES\n"); }
int main(int argc, char **argv) { modulation mod = AM; int genwav = 0; int test = 0; int chat = 0; static struct option long_options[] = { {"modulation", required_argument, 0, 'm'}, {"genwav", no_argument, 0, 'g'}, {"test", no_argument, 0, 't'}, {"chat", no_argument, 0, 'c'}, {0, 0, 0, 0} }; int c; int option_index = 0; do { c = getopt_long (argc, argv, "m:gt", long_options, &option_index); switch (c) { case 0: break; case 'm': if (strcmp(optarg, "AM") == 0) { mod = AM; break; } if (strcmp(optarg, "FM") == 0) { mod = FM; break; } fprintf(stderr, "Error: Invalid modulation\n"); return 1; case 't': test = 1; break; case 'g': genwav = 1; break; case 'c': chat = 1; break; case -1: break; default: return 1; break; } } while (c != -1); if (!(test || chat || genwav)) { fprintf(stderr, "Error: You must suply an action\n"); return 1; } int *vbuf; frame *msg; int i; if (genwav || test) { vbuf = get_fdata(PING_STR, strlen(PING_STR), mod); if (chk_wav_data(vbuf, &msg, mod)) printf("Info: PCM data is ok.\n"); else { fprintf(stderr, "Error: PCM data can not be read\n"); for (i = 0; i < FRAME_SIZE; i++) fprintf(stderr, "%hhx", ((char *) msg)[i]); fprintf(stderr, "\n"); } } if (genwav) { FILE *am = fopen("am.wav", "w"); if (am == NULL) { printf("could not open files\n"); exit(1); } write_wav(am, FRAME_BUFFER, vbuf); printf("Info: WAV ready\n"); } if (!chat) return 0; char *mg = (char *) malloc(65536); int j; pa_simple *ch = get_ch(); pa_simple *pl = get_pl(); int err = 0; int *buf = (int *) malloc(sizeof(int) * SAMPLE_BUFFER); sbf = (int *) calloc(sizeof(int), FRAME_BUFFER); int *pbf; fd_set set; int rv; struct timeval tv; printf("Info: Starting soundwave chat.\n"); while (1) { if (pa_simple_read(ch, buf, sizeof(int) * SAMPLE_BUFFER, &err)) fprintf(stderr, "Error: %s\n", pa_strerror(err)); //filter_frq(buf, SAMPLE_BUFFER); mmpush(sbf, FRAME_BUFFER * sizeof(int), buf, SAMPLE_BUFFER * sizeof(int)); msg = get_msg(sbf, mod); if (chk_frm(msg)) { printf("M: %.*s", 61, msg->data); flushfb(); } free(msg); FD_ZERO(&set); FD_SET(STDIN_FILENO, &set); tv.tv_sec = 0; tv.tv_usec = 0; rv = select(STDIN_FILENO + 1, &set, NULL, NULL, &tv); if ((rv != 0) && (rv != -1)) { rv = read(STDIN_FILENO, mg, 65536); for (i = 0; i < rv; i += 61) { j = ((i + 61) <= rv) ? 61 : (rv - i); pbf = get_fdata(mg + i, j, mod); if (pa_simple_write(pl, pbf, FRAME_BUFFER * sizeof(int), &err)) printf("error: %s\n", pa_strerror(err)); free(pbf); } } fflush(stdin); fflush(stdout); fflush(stderr); } printf("\n"); pa_simple_free(ch); pa_simple_free(pl); return 0; }