Version:
~ [ 0.6-2.3.46 ] ~
Architecture:
~ [ um ] ~
** Warning: Cannot open xref database.
1 #include <stdio.h>
2 #include <unistd.h>
3 #include <sys/stat.h>
4 #include <fcntl.h>
5 #include <errno.h>
6 #include <sched.h>
7 #include <signal.h>
8 #include <termios.h>
9 #include "ssl.h"
10 #include "user_util.h"
11 #include "user.h"
12
13 static int fd_count = 0;
14 static int maxfd = -1;
15 static fd_set read_fds;
16
17 void ssl_add_fd(int fd)
18 {
19 if(fd_count == 0)
20 FD_ZERO(&read_fds);
21 FD_SET(fd, &read_fds);
22 fd_count++;
23 if(fd >= maxfd)
24 maxfd = fd + 1;
25 }
26
27 static int ssl_rcv_proc(void *unused)
28 {
29 fd_set r;
30 int i, n;
31 char ch, dev[] = "/dev/ptyXX";
32
33 set_cmdline("(serial line receive thread)");
34 while(1){
35 while(fd_count == 0) sleep(1);
36 while(fd_count != 0){
37 memcpy(&r, &read_fds, sizeof(r));
38 n = select(maxfd, &r, NULL, NULL, NULL);
39 if(n < 0){
40 printk("ssl_rcv_proc : select failed, errno = %d\n", errno);
41 PROC_UNTESTED();
42 continue;
43 }
44 for(i=0;i<maxfd;i++){
45 if(FD_ISSET(i, &r)){
46 n = read(i, &ch, sizeof(ch));
47 if(n != 1){
48 close(i);
49 n = getmaster(dev);
50 if(dup2(n, i) < 0) panic("ssl couldn't dup");
51 printk("ssl : Line closed, reopened on %s\n", dev);
52 continue;
53 }
54 ssl_receive_char(i, ch);
55 }
56 }
57 }
58 }
59 }
60
61 int ssl_thread(unsigned long sp)
62 {
63 int pid;
64
65 pid = clone(ssl_rcv_proc, (void *) sp,
66 CLONE_VM | CLONE_FILES | CLONE_SIGHAND | SIGCHLD, NULL);
67 register_pid(pid, 0);
68 return(pid);
69 }
70
This page was automatically generated by the
LXR engine.
Visit the LXR main site for more
information.