Esempio n. 1
0
int bind (int fd, const struct sockaddr *sk, socklen_t sl)
{
	switch (sk->sa_family) {
	case AF_INET: {
		struct sockaddr_in *lsk_in = (struct sockaddr_in *)sk;
#ifdef DEBUG
		char addr_buf[INET_ADDRSTRLEN];
		inet_ntop(AF_INET, &lsk_in->sin_addr, addr_buf, sizeof(addr_buf));
		debug_printf("[libmultid::bind()] IPv4 fd=%d %s:%d\n", fd, addr_buf, ntohs (lsk_in->sin_port));
#endif
		if (change_port (&lsk_in->sin_port))
			BIND_TO_LOCAL4(lsk_in->sin_addr.s_addr);
#ifdef DEBUG
		inet_ntop(AF_INET, &lsk_in->sin_addr, addr_buf, sizeof(addr_buf));
		debug_printf("[libmultid::bind()] IPv4 fd=%d %s:%d\n", fd, addr_buf, ntohs (lsk_in->sin_port));
#endif
		}
		break;
#ifdef D_IPV6
	case AF_INET6: {
		struct sockaddr_in6 *lsk_in6 = (struct sockaddr_in6 *)sk;
#ifdef DEBUG
		char addr_buf[INET6_ADDRSTRLEN];
		inet_ntop(AF_INET6, &lsk_in6->sin6_addr, addr_buf, sizeof(addr_buf));
		debug_printf("[libmultid::bind()] IPv6 fd=%d [%s]:%d\n", fd, addr_buf, ntohs (lsk_in6->sin6_port));
#endif
		if (change_port (&lsk_in6->sin6_port))
			BIND_TO_LOCAL6(lsk_in6->sin6_addr);
#ifdef DEBUG
		inet_ntop(AF_INET6, &lsk_in6->sin6_addr, addr_buf, sizeof(addr_buf));
		debug_printf("[libmultid::bind()] IPv6 fd=%d [%s]:%d\n", fd, addr_buf, ntohs (lsk_in6->sin6_port));
#endif
		}
		break;
#endif
	default:
		debug_printf("[libmultid::bind()] address family unknown af=%d fd=%d\n", sk->sa_family, fd);
		break;
	}
	return real_bind (fd, sk, sl);
}
Esempio n. 2
0
int main(int argc, char** argv)
{
	int fd;
	fd = open(DEVICE_FILE_NAME, 0);

	if (fd < 0) {
		printf("Can't open device file: %s\n", DEVICE_FILE_NAME);
		switch (errno) {
		case EACCES:  printf ("Permission denied. Errno: %d\n", errno); break;
 /*     	case EINVACC: printf ("Invalid access mode.\n"); break; */
		case EMFILE:  printf ("No file handle available. Errno: %d\n", errno); break;
		case ENOENT:  printf ("File or path not found. Errno: %d\n", errno); break;
		default:      printf ("Unknown error. Errno: %d\n", errno); break;
    		}

		exit(-1);
	}

	change_port(fd);
	flush_addresses(fd);

	close(fd);
}
Esempio n. 3
0
ex_midi()
{
    int edit_obj,exit_obj,mstate,done;
    register int i;
    static int filtbox[2]= { FILTBOX0, FILTBOX1 };
    static int thrubox[2]= { THRUBOX0, THRUBOX1 };
    static char *opsysstr[3]= { "", CLAB_MSG, MROS_MSG };
    char *delayptr;

    /* encode into dialog box */
    strcpy(midiaddr[THRUCHAN].ob_spec,chanchar[thruchan+1]);
    strcpy(midiaddr[MIDIPCHN].ob_spec,chanchar[midipchan+1]);
    delayptr= ((TEDINFO*)(midiaddr[MIDIPDLY].ob_spec))->te_ptext;
    itoa(midipdelay,delayptr,3);
    sel_obj(midithru,midiaddr,THRUON);
    for (i=0; i<6; i++)
        if (midi_speed==speedtable[i]) break;
    set_rbutton(midiaddr,MIDIRATE,6,i);
    for (i=0; i<4; i++)
        sel_obj(BITTEST(i,midi_filter),midiaddr,MIDIFILT+i);
    ena_obj(midiplexer,midiaddr,MIDIITHR);
    ena_obj(midiplexer,midiaddr,MIDIOTHR);
    ena_obj(midiplexer,midiaddr,MIDIIPRT);
    ena_obj(midiplexer,midiaddr,MIDIOPRT);
    ena_obj(midiplexer,midiaddr,MIDIPPRT);

    midiaddr[MIDIITHR].ob_spec[0]= 'A' + thru_rport*(midiplexer&1);
    midiaddr[MIDIOTHR].ob_spec[0]= 'A' + thru_tport*(midiplexer&1);
    midiaddr[MIDIIPRT].ob_spec[0]= 'A' + midi_rport*(midiplexer&1);
    midiaddr[MIDIOPRT].ob_spec[0]= 'A' + midi_tport*(midiplexer&1);
    midiaddr[MIDIPPRT].ob_spec[0]= 'A' + midi_pport*(midiplexer&1);

    /* hide options that are irrelevant while running under midi op sys */
    i= midi_opsys>0 ;	/* 0= normal, 1= SoftLink, etc. */
    midiaddr[filtbox[i]].ob_flags &= ~HIDETREE;
    midiaddr[thrubox[i]].ob_flags &= ~HIDETREE;
    midiaddr[filtbox[!i]].ob_flags |= HIDETREE;
    midiaddr[thrubox[!i]].ob_flags |= HIDETREE;
    midiaddr[filtbox[1]].ob_spec= opsysstr[midi_opsys];
    midiaddr[thrubox[1]].ob_spec= opsysstr[midi_opsys];

    done=0;
    putdial(midiaddr,-1,0);
    edit_obj= MIDIPDLY;
    do
    {
        exit_obj= my_form_do(midiaddr,&edit_obj,&mstate,0,&dummy);
        switch (exit_obj)
        {
        case THRUCHAN:
            i= thruchan+mstate;
            if (i<0) i= 15;
            if (i>15) i= 0;
            if (midithru) thru_nts_off();
            thruchan=i;
            strcpy(midiaddr[THRUCHAN].ob_spec,chanchar[thruchan+1]);
            draw_object(midiaddr,exit_obj);
            break;

        case MIDIPCHN:
            i= midipchan+mstate;
            if (i<0) i= 15;
            if (i>15) i= 0;
            midipchan=i;
            strcpy(midiaddr[MIDIPCHN].ob_spec,chanchar[midipchan+1]);
            draw_object(midiaddr,exit_obj);
            break;

        case MIDIITHR:
            change_port(&thru_rport,1,exit_obj,mstate);
            break;

        case MIDIOTHR:
            change_port(&thru_tport,3,exit_obj,mstate);
            break;

        case MIDIIPRT:
            change_port(&midi_rport,1,exit_obj,mstate);
            break;

        case MIDIOPRT:
            change_port(&midi_tport,3,exit_obj,mstate);
            break;

        case MIDIPPRT:
            change_port(&midi_pport,3,exit_obj,mstate);
            break;

        case THRUON:
            midithru= is_obj_sel(midiaddr,THRUON);
            if (!midithru) thru_nts_off();
            break;

        case OKMIDI:
            done=1;
        }
        waitmouse();	/* none of these auto-repeat */
    }
    while (!done);

    /* decode out of dialog box */
    midi_speed= speedtable[ whichbutton(midiaddr,MIDIRATE,6) ];
    midi_filter= 0;
    for (i=0; i<4; i++)
        if (is_obj_sel(midiaddr,MIDIFILT+i))
            BITSET(i,midi_filter);
    i= atoi(delayptr);
    if ((i>=0)&&(i<=255)) midipdelay=i;

    putdial(0L,0,exit_obj);
}	/* end ex_midi() */