/[LeafOK_CVS]/lbbs/src/netio.c
ViewVC logotype

Diff of /lbbs/src/netio.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.5 by sysadm, Tue Mar 22 08:59:32 2005 UTC Revision 1.6 by sysadm, Mon Apr 28 03:31:00 2025 UTC
# Line 1  Line 1 
1  /***************************************************************************  /***************************************************************************
2                            netio.c  -  description                                                    netio.c  -  description
3                               -------------------                                                           -------------------
4      begin                : Mon Oct 18 2004          begin                : Mon Oct 18 2004
5      copyright            : (C) 2004 by Leaflet          copyright            : (C) 2004 by Leaflet
6      email                : leaflet@leafok.com          email                : leaflet@leafok.com
7   ***************************************************************************/   ***************************************************************************/
8    
9  /***************************************************************************  /***************************************************************************
# Line 19  Line 19 
19  #include <string.h>  #include <string.h>
20  #include <sys/socket.h>  #include <sys/socket.h>
21    
22  char  char s_getc(int socket)
 s_getc (int socket)  
23  {  {
24    char c;          char c;
25    if (recv (socket, &c, 1, 0) > 0)          if (recv(socket, &c, 1, 0) > 0)
26      return c;                  return c;
27    else          else
28      return '\0';                  return '\0';
29  }  }
30    
31  int  int s_putc(int socket, char c)
 s_putc (int socket, char c)  
32  {  {
33    int ret;          int ret;
34    
35    ret = send (socket, &c, 1, 0);          ret = send(socket, &c, 1, 0);
36    
37    return ret;          return ret;
38  }  }
39    
40  int  int s_receive(int socket, char *buffer, int buffer_length, char end_str[])
 s_receive (int socket, char *buffer, int buffer_length, char end_str[])  
41  {  {
42    char buf_str[2048];          char buf_str[2048];
43    int buf_read, total_read;          int buf_read, total_read;
44    int buf_len = 2047;          int buf_len = 2047;
45    
46    if (buf_len + 1 > buffer_length)          if (buf_len + 1 > buffer_length)
47      buf_len = buffer_length - 1;                  buf_len = buffer_length - 1;
48    
49    total_read = 0;          total_read = 0;
50    strcpy (buffer, "");          strcpy(buffer, "");
51    while ((buf_read = recv (socket, buf_str, buf_len, 0)) > 0)          while ((buf_read = recv(socket, buf_str, buf_len, 0)) > 0)
     {  
       buf_str[buf_read] = '\0';  
       total_read += buf_read;  
       strcat (buffer, buf_str);  
   
       buf_len = buffer_length - total_read - 1;  
       if (buf_len + 1 > buffer_length)  
         buf_len = buffer_length - 1;  
   
       if (strcmp ((buffer + total_read - strlen (end_str)), end_str) == 0)  
         break;  
       //different line-end symbol in different OS  
       if (strcmp (end_str, "\r") == 0)  
52          {          {
53            if (strcmp ((buffer + total_read - 2), "\r\n") == 0)                  buf_str[buf_read] = '\0';
54              break;                  total_read += buf_read;
55                    strcat(buffer, buf_str);
56    
57                    buf_len = buffer_length - total_read - 1;
58                    if (buf_len + 1 > buffer_length)
59                            buf_len = buffer_length - 1;
60    
61                    if (strcmp((buffer + total_read - strlen(end_str)), end_str) == 0)
62                            break;
63                    // different line-end symbol in different OS
64                    if (strcmp(end_str, "\r") == 0)
65                    {
66                            if (strcmp((buffer + total_read - 2), "\r\n") == 0)
67                                    break;
68                    }
69          }          }
     }  
70    
71    return total_read;          return total_read;
72  }  }
73    
74  int  int s_send(int socket, const char *in_str)
 s_send (int socket, const char *in_str)  
75  {  {
76    int ret;          int ret;
77    
78    if (in_str != NULL && strlen (in_str) > 0)          if (in_str != NULL && strlen(in_str) > 0)
79      {          {
80        ret = send (socket, in_str, strlen (in_str), 0);                  ret = send(socket, in_str, strlen(in_str), 0);
81      }          }
82    
83    return ret;          return ret;
84  }  }
85    
86  // from Maple-hightman  // from Maple-hightman
87  // added by flyriver, 2001.3.3  // added by flyriver, 2001.3.3
88  int  int telnetopt(int fd, char *buf, int max)
 telnetopt (int fd, char *buf, int max)  
89  {  {
90    unsigned char c, d, e;          unsigned char c, d, e;
91    int pp = 0;          int pp = 0;
92    unsigned char tmp[30];          unsigned char tmp[30];
93    
94    while (pp < max)          while (pp < max)
     {  
       c = buf[pp++];  
       if (c == 255)  
95          {          {
96            d = buf[pp++];                  c = buf[pp++];
97            e = buf[pp++];                  if (c == 255)
98            iflush ();                  {
99            if ((d == 253) && (e == 3 || e == 24))                          d = buf[pp++];
100              {                          e = buf[pp++];
101                tmp[0] = 255;                          iflush();
102                tmp[1] = 251;                          if ((d == 253) && (e == 3 || e == 24))
103                tmp[2] = e;                          {
104                write (fd, tmp, 3);                                  tmp[0] = 255;
105                continue;                                  tmp[1] = 251;
106              }                                  tmp[2] = e;
107            if ((d == 251 || d == 252) && (e == 1 || e == 3 || e == 24))                                  write(fd, tmp, 3);
108              {                                  continue;
109                tmp[0] = 255;                          }
110                tmp[1] = 253;                          if ((d == 251 || d == 252) && (e == 1 || e == 3 || e == 24))
111                tmp[2] = e;                          {
112                write (fd, tmp, 3);                                  tmp[0] = 255;
113                continue;                                  tmp[1] = 253;
114              }                                  tmp[2] = e;
115            if (d == 251 || d == 252)                                  write(fd, tmp, 3);
116              {                                  continue;
117                tmp[0] = 255;                          }
118                tmp[1] = 254;                          if (d == 251 || d == 252)
119                tmp[2] = e;                          {
120                write (fd, tmp, 3);                                  tmp[0] = 255;
121                continue;                                  tmp[1] = 254;
122              }                                  tmp[2] = e;
123            if (d == 253 || d == 254)                                  write(fd, tmp, 3);
124              {                                  continue;
125                tmp[0] = 255;                          }
126                tmp[1] = 252;                          if (d == 253 || d == 254)
127                tmp[2] = e;                          {
128                write (fd, tmp, 3);                                  tmp[0] = 255;
129                continue;                                  tmp[1] = 252;
130              }                                  tmp[2] = e;
131            if (d == 250)                                  write(fd, tmp, 3);
132              {                                  continue;
133                while (e != 240 && pp < max)                          }
134                  e = buf[pp++];                          if (d == 250)
135                tmp[0] = 255;                          {
136                tmp[1] = 250;                                  while (e != 240 && pp < max)
137                tmp[2] = 24;                                          e = buf[pp++];
138                tmp[3] = 0;                                  tmp[0] = 255;
139                tmp[4] = 65;                                  tmp[1] = 250;
140                tmp[5] = 78;                                  tmp[2] = 24;
141                tmp[6] = 83;                                  tmp[3] = 0;
142                tmp[7] = 73;                                  tmp[4] = 65;
143                tmp[8] = 255;                                  tmp[5] = 78;
144                tmp[9] = 240;                                  tmp[6] = 83;
145                write (fd, tmp, 10);                                  tmp[7] = 73;
146              }                                  tmp[8] = 255;
147                                    tmp[9] = 240;
148                                    write(fd, tmp, 10);
149                            }
150                    }
151                    else
152                            outc(c);
153          }          }
154        else          iflush();
155          outc (c);          return 0;
     }  
   iflush ();  
   return 0;  
156  }  }


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1