static int df_dialer(char *num, char *acu, int df03) { int f = FD; struct termios cntrl; int speed = 0; char c = '\0'; tcgetattr(f, &cntrl); cntrl.c_cflag |= HUPCL; tcsetattr(f, TCSANOW, &cntrl); if (setjmp(Sjbuf)) { printf("connection timed out\r\n"); df_disconnect(); return (0); } if (boolean(value(VERBOSE))) printf("\ndialing..."); fflush(stdout); #ifdef TIOCMSET if (df03) { int st = TIOCM_ST; /* secondary Transmit flag */ tcgetattr(f, &cntrl); speed = cfgetospeed(&cntrl); if (speed != B1200) { /* must dial at 1200 baud */ cfsetospeed(&cntrl, B1200); cfsetispeed(&cntrl, B1200); tcsetattr(f, TCSAFLUSH, &cntrl); ioctl(f, TIOCMBIC, &st); /* clear ST for 300 baud */ } else ioctl(f, TIOCMBIS, &st); /* set ST for 1200 baud */ } #endif signal(SIGALRM, alrm_timeout); alarm(5 * strlen(num) + 10); tcflush(f, TCIOFLUSH); write(f, "\001", 1); sleep(1); write(f, "\002", 1); write(f, num, strlen(num)); read(f, &c, 1); #ifdef TIOCMSET if (df03 && speed != B1200) { cfsetospeed(&cntrl, speed); cfsetispeed(&cntrl, speed); tcsetattr(f, TCSAFLUSH, &cntrl); } #endif return (c == 'A'); }
void df_abort(void) { df_disconnect(); }
void main_conn_test(pthread_mutex_t *parent_lock) { printf("Starting connection test...\n"); num_connections = 0; while (1) { // create some connections if (randomise_bool(10, 2) && num_connections != MAX_CONNECTIONS) { DFDEBUG("Connecting to digifi in slot %d", num_connections); test_conns[num_connections] = df_connect("192.168.0.242", 2); num_connections++; } // connect to some rgets if (num_connections > 0) { switch (randomise_int(3)) { case 0: dfrget_trackposition(test_conns[randomise_int(num_connections)], 1, test_trackposition_handler, NULL); break; case 1: dfrget_detailedtrackinfo(test_conns[randomise_int(num_connections)], 1, test_detailedtrack_handler, NULL); break; case 2: dfrget_playerstatus(test_conns[randomise_int(num_connections)], 1, test_playerstatus_handler, NULL); break; case 3: DFDEBUG("Clearing commands for a room"); dfrget_clearcommands(test_conns[randomise_int(num_connections)], 1); break; default: break; } } // execute some calls if (num_connections > 0) { switch (randomise_int(4)) { case 0: //df_GetRooms(test_conns[randomise_int(num_connections)], 0, test_getroom_handler, NULL); //df_GetArtists(test_conns[randomise_int(num_connections)], 0, test_getartists_handler, NULL); break; case 1: //df_GetRooms(test_conns[randomise_int(num_connections)], 0, test_getroom_handler, NULL); //df_GetAlbums(test_conns[randomise_int(num_connections)], "", "", test_getalbums_handler, NULL); break; case 2: //df_GetAlbums(test_conns[randomise_int(num_connections)], "", "", test_getalbums_handler, NULL); //df_GetCurrentPlaylistEx(test_conns[randomise_int(num_connections)], 1, 1, 1, test_getcurrentplaylistex_handler, NULL); break; case 3: //df_GetArtists(test_conns[randomise_int(num_connections)], 0, test_getartists_handler, NULL); //df_GetCurrentPlaylistEx(test_conns[randomise_int(num_connections)], 1, 1, 1, test_getcurrentplaylistex_handler, NULL); break; default: break; } } // disconnect some connections if (randomise_bool(10, 9) && num_connections > 0) { num_connections--; DFDEBUG("Disconnecting digifi in slot %d", num_connections); df_disconnect(test_conns[num_connections]); } sleep(1); } pthread_mutex_unlock(parent_lock); }