예제 #1
0
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');
}
예제 #2
0
void
df_abort(void)
{
	df_disconnect();
}
예제 #3
0
파일: tests.c 프로젝트: tombooth/libdigifi
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);
}