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

Annotation of /lbbs/src/netio.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.6 - (hide annotations)
Mon Apr 28 03:31:00 2025 UTC (10 months, 2 weeks ago) by sysadm
Branch: MAIN
Changes since 1.5: +115 -120 lines
Content type: text/x-csrc
Update

1 sysadm 1.1 /***************************************************************************
2 sysadm 1.6 netio.c - description
3     -------------------
4     begin : Mon Oct 18 2004
5     copyright : (C) 2004 by Leaflet
6     email : leaflet@leafok.com
7 sysadm 1.1 ***************************************************************************/
8    
9     /***************************************************************************
10     * *
11     * This program is free software; you can redistribute it and/or modify *
12     * it under the terms of the GNU General Public License as published by *
13     * the Free Software Foundation; either version 2 of the License, or *
14     * (at your option) any later version. *
15     * *
16     ***************************************************************************/
17    
18     #include "common.h"
19 sysadm 1.3 #include <string.h>
20     #include <sys/socket.h>
21 sysadm 1.1
22 sysadm 1.6 char s_getc(int socket)
23 sysadm 1.1 {
24 sysadm 1.6 char c;
25     if (recv(socket, &c, 1, 0) > 0)
26     return c;
27     else
28     return '\0';
29 sysadm 1.1 }
30    
31 sysadm 1.6 int s_putc(int socket, char c)
32 sysadm 1.2 {
33 sysadm 1.6 int ret;
34 sysadm 1.4
35 sysadm 1.6 ret = send(socket, &c, 1, 0);
36 sysadm 1.4
37 sysadm 1.6 return ret;
38 sysadm 1.2 }
39    
40 sysadm 1.6 int s_receive(int socket, char *buffer, int buffer_length, char end_str[])
41 sysadm 1.1 {
42 sysadm 1.6 char buf_str[2048];
43     int buf_read, total_read;
44     int buf_len = 2047;
45    
46     if (buf_len + 1 > buffer_length)
47     buf_len = buffer_length - 1;
48    
49     total_read = 0;
50     strcpy(buffer, "");
51     while ((buf_read = recv(socket, buf_str, buf_len, 0)) > 0)
52 sysadm 1.4 {
53 sysadm 1.6 buf_str[buf_read] = '\0';
54     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 sysadm 1.4 }
70 sysadm 1.1
71 sysadm 1.6 return total_read;
72 sysadm 1.1 }
73    
74 sysadm 1.6 int s_send(int socket, const char *in_str)
75 sysadm 1.1 {
76 sysadm 1.6 int ret;
77 sysadm 1.2
78 sysadm 1.6 if (in_str != NULL && strlen(in_str) > 0)
79     {
80     ret = send(socket, in_str, strlen(in_str), 0);
81     }
82 sysadm 1.4
83 sysadm 1.6 return ret;
84 sysadm 1.1 }
85 sysadm 1.5
86     // from Maple-hightman
87     // added by flyriver, 2001.3.3
88 sysadm 1.6 int telnetopt(int fd, char *buf, int max)
89 sysadm 1.5 {
90 sysadm 1.6 unsigned char c, d, e;
91     int pp = 0;
92     unsigned char tmp[30];
93    
94     while (pp < max)
95 sysadm 1.5 {
96 sysadm 1.6 c = buf[pp++];
97     if (c == 255)
98     {
99     d = buf[pp++];
100     e = buf[pp++];
101     iflush();
102     if ((d == 253) && (e == 3 || e == 24))
103     {
104     tmp[0] = 255;
105     tmp[1] = 251;
106     tmp[2] = e;
107     write(fd, tmp, 3);
108     continue;
109     }
110     if ((d == 251 || d == 252) && (e == 1 || e == 3 || e == 24))
111     {
112     tmp[0] = 255;
113     tmp[1] = 253;
114     tmp[2] = e;
115     write(fd, tmp, 3);
116     continue;
117     }
118     if (d == 251 || d == 252)
119     {
120     tmp[0] = 255;
121     tmp[1] = 254;
122     tmp[2] = e;
123     write(fd, tmp, 3);
124     continue;
125     }
126     if (d == 253 || d == 254)
127     {
128     tmp[0] = 255;
129     tmp[1] = 252;
130     tmp[2] = e;
131     write(fd, tmp, 3);
132     continue;
133     }
134     if (d == 250)
135     {
136     while (e != 240 && pp < max)
137     e = buf[pp++];
138     tmp[0] = 255;
139     tmp[1] = 250;
140     tmp[2] = 24;
141     tmp[3] = 0;
142     tmp[4] = 65;
143     tmp[5] = 78;
144     tmp[6] = 83;
145     tmp[7] = 73;
146     tmp[8] = 255;
147     tmp[9] = 240;
148     write(fd, tmp, 10);
149     }
150     }
151     else
152     outc(c);
153 sysadm 1.5 }
154 sysadm 1.6 iflush();
155     return 0;
156 sysadm 1.5 }

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