コード例 #1
0
static int make_r8a66597_device(struct r8a66597 *r8a66597,
				struct urb *urb, u8 addr)
{
	struct r8a66597_device *dev;
	int usb_address = urb->setup_packet[2];	/* urb->pipe is address 0 */

	dev = kzalloc(sizeof(struct r8a66597_device), GFP_ATOMIC);
	if (dev == NULL)
		return -ENOMEM;

	dev_set_drvdata(&urb->dev->dev, dev);
	dev->udev = urb->dev;
	dev->address = addr;
	dev->usb_address = usb_address;
	dev->state = USB_STATE_ADDRESS;
	dev->ep_in_toggle = 0;
	dev->ep_out_toggle = 0;
	INIT_LIST_HEAD(&dev->device_list);
	list_add_tail(&dev->device_list, &r8a66597->child_device);

	get_port_number(r8a66597, urb->dev->devpath,
			&dev->root_port, &dev->hub_port);
	if (!is_child_device(urb->dev->devpath))
		r8a66597->root_hub[dev->root_port].dev = dev;

	set_devadd_reg(r8a66597, dev->address,
		       get_r8a66597_usb_speed(urb->dev->speed),
		       get_parent_r8a66597_address(r8a66597, urb->dev),
		       dev->hub_port, dev->root_port);

	return 0;
}
コード例 #2
0
ファイル: myserver.c プロジェクト: tywtyw2002/cmput379assn2
int main(int argc, char *argv[])
{
        struct sockaddr_in master, from;
        char *ep, ip[INET_ADDRSTRLEN];
        int i, port_number, sock, fromlength;
        u_short port;

        /* if the number of args aren't as expected, print usage info */
        check_number_of_args(argc);

        /* safe to do this */
        port = get_port_number(argv[1]);

        /* Check file and logs */
        check_file_directory(argv[2]);
        check_log_file(argv[3]);

        /* time to set up and listen on the socket */
        memset(&master, 0, sizeof(master));
        master.sin_family = AF_INET;
        master.sin_addr.s_addr = htonl(INADDR_ANY);
        master.sin_port = htons(port);
        sock = socket(AF_INET, SOCK_STREAM, 0);
        if (sock < 0) {
                fprintf(stderr, "Server: cannot open master socket\n");
                exit(1);
        }

        /* Bind to the socket */
        if (bind(sock, (struct sockaddr*) &master, sizeof(master))){
                fprintf(stderr, "Server: cannot open master socket\n");
                exit(1);
        }
        
        /* We are now bound and listing to connections on sock
         * to a connected client
         */
        if (listen(sock, 5) == -1){
                fprintf(stderr, "listen failed\n");
        }

	    printf("Server up and listening for connections on port %u\n", port);
        while(1){
                int fromsd;
                fromlength = sizeof(from);
                fromsd = accept(sock, (struct sockaddr *) &from, &fromlength);
                if (fromsd == -1){
                        fprintf(stderr, "accept failed\n");
                }
                /* get the ip of the request to be used in logging later */
                inet_ntop(AF_INET, &(from.sin_addr), ip, INET_ADDRSTRLEN);
                
                /* Now ready to service the new request */
                service_request(fromsd, ip);
        }
        return(0);
}
コード例 #3
0
ファイル: lib.init.c プロジェクト: ReiAyanamiQH/jhlava
int
ls_initrex(int num, int options)
{
    struct servent *sv;

    if (geteuid() == 0)
       rootuid_ = TRUE;

    if (initenv_(NULL, NULL)<0) {
        if (rootuid_ && !(options & KEEPUID))
            lsfSetUid(getuid());
        return(-1);
    }

    inithostsock_();
    lsQueueInit_(&requestQ, lsReqCmp_, NULL);
    if (requestQ == NULL) {
        lserrno = LSE_MALLOC;
        return(-1);
    }

    res_addr_.sin_family = AF_INET;

    if (genParams_[LSF_RES_PORT].paramValue) {
        if ((res_addr_.sin_port = atoi(genParams_[LSF_RES_PORT].paramValue))
            != 0)
            res_addr_.sin_port = htons(res_addr_.sin_port);
        else
            goto res_init_fail;
    } else if (genParams_[LSF_RES_DEBUG].paramValue) {
        res_addr_.sin_port = htons(RES_PORT);
    } else {
#  if defined(_COMPANY_X_)
        if ((res_addr_.sin_port =
                 get_port_number(RES_SERVICE,(char *)NULL)) == -1) {
#  else
        if ((sv = getservbyname("res", "tcp")) != NULL)
            res_addr_.sin_port = sv->s_port;
        else {
#  endif
res_init_fail:
            lserrno = LSE_RES_NREG;
            if (rootuid_ && !(options & KEEPUID))
                lsfSetUid(getuid());
            return (-1);
        }
    }

    initconntbl_();
    FD_ZERO(&connection_ok_);

    if ((rootuid_) && (genParams_[LSF_AUTH].paramValue == NULL)) {
        int i;
        i = opensocks_(num);
        if (!(options & KEEPUID))
            lsfSetUid(getuid());
        return (i);
    } else {
        return (num);
    }
}

int
opensocks_(int num)
{
    static char fname[] = "opensocks_";
    int s;
    int nextdescr;
    int i;

    totsockets_ = (num <= 0 || num > MAXCONNECT) ? LSF_DEFAULT_SOCKS : num;

    if (logclass & LC_COMM)
       ls_syslog(LOG_DEBUG,"%s: try to allocate num <%d> of socks",fname,num);

    nextdescr = FIRST_RES_SOCK;
    for (i = 0; i < totsockets_; i++) {
        if ((s = CreateSock_(SOCK_STREAM)) < 0) {
            if (logclass & LC_COMM)
                ls_syslog(LOG_DEBUG,
                   "%s: CreateSock_ failed, iter:<%d> %s",
                    fname,i,strerror(errno));
            totsockets_ = i;
            if (i > 0) {
                break;
            } else {
               return(-1);
            }
        }

        if (s != nextdescr) {
            if (dup2(s,nextdescr) < 0) {
                if (logclass & LC_COMM)
                    ls_syslog(LOG_DEBUG,
                    "%s: dup2() failed, old:<%d>, new<%d>, iter:<%d>  %s",
                               fname,s,nextdescr,i,strerror(errno));
                close(s);
                lserrno = LSE_SOCK_SYS;
                totsockets_ = i;
                if (i > 0)
                   break;
                else
                   return (-1);
            }

#if defined(FD_CLOEXEC)
            fcntl(nextdescr, F_SETFD, (fcntl(nextdescr, F_GETFD)
                       | FD_CLOEXEC)) ;
#else
#if defined(FIOCLEX)
            (void)ioctl(nextdescr, FIOCLEX, (char *)NULL);
#endif
#endif

            close(s);
        }
        nextdescr++;
    }

    currentsocket_ = FIRST_RES_SOCK;

    if (logclass & LC_COMM)
       ls_syslog(LOG_DEBUG,"%s: returning num=<%d>",fname,totsockets_);

    return (totsockets_);

}

/* ls_fdbusy()
 */
int
ls_fdbusy(int fd)
{
    sTab   hashSearchPtr;
    hEnt   *hEntPtr;

    if (fd == chanSock_(limchans_[PRIMARY])
        || fd == chanSock_(limchans_[MASTER])
        || fd == chanSock_(limchans_[UNBOUND]))
        return TRUE;

    if (fd == cli_nios_fd[0])
        return TRUE;

    hEntPtr = h_firstEnt_(&conn_table, &hashSearchPtr);
    while (hEntPtr) {
        int   *pfd;

        pfd = hEntPtr->hData;
        if (fd == pfd[0]
            || fd == pfd[1])
            return (TRUE);

        hEntPtr = h_nextEnt_(&hashSearchPtr);
    }

    if (rootuid_
        && fd >= currentsocket_
        && fd < FIRST_RES_SOCK + totsockets_)
        return TRUE;

    return FALSE;
}
コード例 #4
0
int main(int argc, char *argv[])
{
        struct sockaddr_in master, from;
        char *ep, ip[INET_ADDRSTRLEN];
        int i, port_number, sock, fromlength;
        u_short port;

        /* for pthread stuff */
        pthread_t threads[NUM_THREADS];
        pthread_attr_t attr;
        struct request_info thread_data[NUM_THREADS];
        int rc, t;
        void *status;

        /* if the number of args aren't as expected, print usage info */
        check_number_of_args(argc);

        /* safe to do this */
        port = get_port_number(argv[1]);

        /* Check file and logs */
        check_file_directory(argv[2]);
        check_log_file(argv[3]);

    	/* don't daemonize if we compile with -DDEBUG */
	    if (daemon(1, 0) == -1)
		        err(1, "daemon() failed");

        /* time to set up and listen on the socket */
        memset(&master, 0, sizeof(master));
        master.sin_family = AF_INET;
        master.sin_addr.s_addr = htonl(INADDR_ANY);
        master.sin_port = htons(port);
        sock = socket(AF_INET, SOCK_STREAM, 0);
        if (sock < 0) {
                fprintf(stderr, "Server: cannot open master socket\n");
                exit(1);
        }

        /* Bind to the socket */
        if (bind(sock, (struct sockaddr*) &master, sizeof(master))){
                fprintf(stderr, "Server: cannot open master socket\n");
                exit(1);
        }
        
        /* We are now bound and listing to connections on sock
         * to a connected client
         */
        if (listen(sock, 5) == -1){
                fprintf(stderr, "listen failed\n");
        }

        /* init and set thread detached attributes */ 
        pthread_attr_init(&attr);
        pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);

        /* initialize mutex lock */
        if (pthread_mutex_init(&mutex, NULL) != 0){
                fprintf(stderr, "Init of mutex lock failed\n");
                exit(1);
        }

        t = 0;
        while(1){
                int fromsd;
                fromlength = sizeof(from);
                fromsd = accept(sock, (struct sockaddr *) &from, &fromlength);
                if (fromsd == -1){
                        fprintf(stderr, "accept failed\n");
                }
                /* get the ip of the request to be used in logging later */
                inet_ntop(AF_INET, &(from.sin_addr), ip, INET_ADDRSTRLEN);
                
                /* initialize thread data for this thread */
                thread_data[t].fromsd = fromsd;
                thread_data[t].ip = ip;

                if (t == NUM_THREADS){
                        t = 0;
                }
                /* Now ready to service the new request */
                rc = pthread_create(&threads[t], NULL, service_request,
                    (void *)&thread_data[t]);
                t++;
                if (rc){
                        fprintf(stderr, "Error; return code from "
                            "pthread_create is: %d\n", rc);
                        exit(1);
                }
        }
        pthread_exit(NULL);
        return(0);
}
コード例 #5
0
ファイル: mcserv.c プロジェクト: sfionov/mc-dev
int
main (int argc, char *argv[])
{
    const char *result;
    int c;

    while ((c = getopt (argc, argv, "fdiqp:v")) != -1) {
	switch (c) {
	case 'd':
	    isDaemon = 1;
	    verbose = 0;
	    break;

	case 'v':
	    verbose = 1;
	    break;

	case 'f':
	    ftp = 1;
	    break;

	case 'q':
	    verbose = 0;
	    break;

	case 'p':
	    portnum = atoi (optarg);
	    break;

	case 'i':
	    inetd_started = 1;
	    break;

	case 'r':
	    r_auth = 1;
	    break;

	default:
	    fprintf (stderr,
		     "Usage is: mcserv [options] [-p portnum]\n\n"
		     "options are:\n" "-d  become a daemon (sets -q)\n"
		     "-q  quiet mode\n"
		     /*    "-r  use rhost based authentication\n" */
#ifndef HAVE_PAM
		     "-f  force ftp authentication\n"
#endif
		     "-v  verbose mode\n"
		     "-p  to specify a port number to listen\n");
	    exit (0);

	}
    }

    if (isDaemon && fork ())
	exit (0);

    if (portnum == 0)
	portnum = get_port_number ();

    if (portnum != -1) {
	register_port (portnum, 0);
	if (verbose)
	    printf ("Using port %d\n", portnum);
	if ((result = get_client (portnum)))
	    perror (result);
#ifdef HAVE_PMAP_SET
	if (!isDaemon)
	    pmap_unset (RPC_PROGNUM, RPC_PROGVER);
#endif
    }
    exit (return_code);
}