summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/bio/bss_sock.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/bio/bss_sock.c')
-rw-r--r--src/lib/libcrypto/bio/bss_sock.c194
1 files changed, 98 insertions, 96 deletions
diff --git a/src/lib/libcrypto/bio/bss_sock.c b/src/lib/libcrypto/bio/bss_sock.c
index eb2965970c..f6d3bf7365 100644
--- a/src/lib/libcrypto/bio/bss_sock.c
+++ b/src/lib/libcrypto/bio/bss_sock.c
@@ -79,8 +79,7 @@ static int sock_new(BIO *h);
79static int sock_free(BIO *data); 79static int sock_free(BIO *data);
80int BIO_sock_should_retry(int s); 80int BIO_sock_should_retry(int s);
81 81
82static BIO_METHOD methods_sockp= 82static BIO_METHOD methods_sockp = {
83 {
84 BIO_TYPE_SOCKET, 83 BIO_TYPE_SOCKET,
85 "socket", 84 "socket",
86 sock_write, 85 sock_write,
@@ -91,152 +90,155 @@ static BIO_METHOD methods_sockp=
91 sock_new, 90 sock_new,
92 sock_free, 91 sock_free,
93 NULL, 92 NULL,
94 }; 93};
95 94
96BIO_METHOD *BIO_s_socket(void) 95BIO_METHOD
97 { 96*BIO_s_socket(void)
98 return(&methods_sockp); 97{
99 } 98 return (&methods_sockp);
99}
100 100
101BIO *BIO_new_socket(int fd, int close_flag) 101BIO
102 { 102*BIO_new_socket(int fd, int close_flag)
103{
103 BIO *ret; 104 BIO *ret;
104 105
105 ret=BIO_new(BIO_s_socket()); 106 ret = BIO_new(BIO_s_socket());
106 if (ret == NULL) return(NULL); 107 if (ret == NULL)
107 BIO_set_fd(ret,fd,close_flag); 108 return (NULL);
108 return(ret); 109 BIO_set_fd(ret, fd, close_flag);
109 } 110 return (ret);
111}
110 112
111static int sock_new(BIO *bi) 113static int
112 { 114sock_new(BIO *bi)
113 bi->init=0; 115{
114 bi->num=0; 116 bi->init = 0;
115 bi->ptr=NULL; 117 bi->num = 0;
116 bi->flags=0; 118 bi->ptr = NULL;
117 return(1); 119 bi->flags = 0;
118 } 120 return (1);
121}
119 122
120static int sock_free(BIO *a) 123static int
121 { 124sock_free(BIO *a)
122 if (a == NULL) return(0); 125{
123 if (a->shutdown) 126 if (a == NULL)
124 { 127 return (0);
125 if (a->init) 128 if (a->shutdown) {
126 { 129 if (a->init) {
127 shutdown(a->num, SHUT_RDWR); 130 shutdown(a->num, SHUT_RDWR);
128 close(a->num); 131 close(a->num);
129 }
130 a->init=0;
131 a->flags=0;
132 } 132 }
133 return(1); 133 a->init = 0;
134 a->flags = 0;
134 } 135 }
135 136 return (1);
136static int sock_read(BIO *b, char *out, int outl) 137}
137 {
138 int ret=0;
139 138
140 if (out != NULL) 139static int
141 { 140sock_read(BIO *b, char *out, int outl)
141{
142 int ret = 0;
143
144 if (out != NULL) {
142 errno = 0; 145 errno = 0;
143 ret=read(b->num,out,outl); 146 ret = read(b->num, out, outl);
144 BIO_clear_retry_flags(b); 147 BIO_clear_retry_flags(b);
145 if (ret <= 0) 148 if (ret <= 0) {
146 {
147 if (BIO_sock_should_retry(ret)) 149 if (BIO_sock_should_retry(ret))
148 BIO_set_retry_read(b); 150 BIO_set_retry_read(b);
149 }
150 } 151 }
151 return(ret);
152 } 152 }
153 return (ret);
154}
153 155
154static int sock_write(BIO *b, const char *in, int inl) 156static int
155 { 157sock_write(BIO *b, const char *in, int inl)
158{
156 int ret; 159 int ret;
157 160
158 errno = 0; 161 errno = 0;
159 ret=write(b->num,in,inl); 162 ret = write(b->num, in, inl);
160 BIO_clear_retry_flags(b); 163 BIO_clear_retry_flags(b);
161 if (ret <= 0) 164 if (ret <= 0) {
162 {
163 if (BIO_sock_should_retry(ret)) 165 if (BIO_sock_should_retry(ret))
164 BIO_set_retry_write(b); 166 BIO_set_retry_write(b);
165 }
166 return(ret);
167 } 167 }
168 return (ret);
169}
168 170
169static long sock_ctrl(BIO *b, int cmd, long num, void *ptr) 171static long
170 { 172sock_ctrl(BIO *b, int cmd, long num, void *ptr)
171 long ret=1; 173{
174 long ret = 1;
172 int *ip; 175 int *ip;
173 176
174 switch (cmd) 177 switch (cmd) {
175 {
176 case BIO_C_SET_FD: 178 case BIO_C_SET_FD:
177 sock_free(b); 179 sock_free(b);
178 b->num= *((int *)ptr); 180 b->num= *((int *)ptr);
179 b->shutdown=(int)num; 181 b->shutdown = (int)num;
180 b->init=1; 182 b->init = 1;
181 break; 183 break;
182 case BIO_C_GET_FD: 184 case BIO_C_GET_FD:
183 if (b->init) 185 if (b->init) {
184 { 186 ip = (int *)ptr;
185 ip=(int *)ptr; 187 if (ip != NULL)
186 if (ip != NULL) *ip=b->num; 188 *ip = b->num;
187 ret=b->num; 189 ret = b->num;
188 } 190 } else
189 else 191 ret = -1;
190 ret= -1;
191 break; 192 break;
192 case BIO_CTRL_GET_CLOSE: 193 case BIO_CTRL_GET_CLOSE:
193 ret=b->shutdown; 194 ret = b->shutdown;
194 break; 195 break;
195 case BIO_CTRL_SET_CLOSE: 196 case BIO_CTRL_SET_CLOSE:
196 b->shutdown=(int)num; 197 b->shutdown = (int)num;
197 break; 198 break;
198 case BIO_CTRL_DUP: 199 case BIO_CTRL_DUP:
199 case BIO_CTRL_FLUSH: 200 case BIO_CTRL_FLUSH:
200 ret=1; 201 ret = 1;
201 break; 202 break;
202 default: 203 default:
203 ret=0; 204 ret = 0;
204 break; 205 break;
205 }
206 return(ret);
207 } 206 }
207 return (ret);
208}
208 209
209static int sock_puts(BIO *bp, const char *str) 210static int
210 { 211sock_puts(BIO *bp, const char *str)
211 int n,ret; 212{
213 int n, ret;
212 214
213 n=strlen(str); 215 n = strlen(str);
214 ret=sock_write(bp,str,n); 216 ret = sock_write(bp, str, n);
215 return(ret); 217 return (ret);
216 } 218}
217 219
218int BIO_sock_should_retry(int i) 220int
219 { 221BIO_sock_should_retry(int i)
222{
220 int err; 223 int err;
221 224
222 if ((i == 0) || (i == -1)) 225 if ((i == 0) || (i == -1)) {
223 { 226 err = errno;
224 err=errno;
225 227
226#if defined(OPENSSL_SYS_WINDOWS) && 0 /* more microsoft stupidity? perhaps not? Ben 4/1/99 */ 228#if defined(OPENSSL_SYS_WINDOWS) && 0 /* more microsoft stupidity? perhaps not? Ben 4/1/99 */
227 if ((i == -1) && (err == 0)) 229 if ((i == -1) && (err == 0))
228 return(1); 230 return (1);
229#endif 231#endif
230 232
231 return(BIO_sock_non_fatal_error(err)); 233 return (BIO_sock_non_fatal_error(err));
232 }
233 return(0);
234 } 234 }
235 return (0);
236}
235 237
236int BIO_sock_non_fatal_error(int err) 238int
237 { 239BIO_sock_non_fatal_error(int err)
238 switch (err) 240{
239 { 241 switch (err) {
240#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_NETWARE) 242#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_NETWARE)
241# if defined(WSAEWOULDBLOCK) 243# if defined(WSAEWOULDBLOCK)
242 case WSAEWOULDBLOCK: 244 case WSAEWOULDBLOCK:
@@ -284,12 +286,12 @@ int BIO_sock_non_fatal_error(int err)
284#ifdef EALREADY 286#ifdef EALREADY
285 case EALREADY: 287 case EALREADY:
286#endif 288#endif
287 return(1); 289 return (1);
288 /* break; */ 290 /* break; */
289 default: 291 default:
290 break; 292 break;
291 }
292 return(0);
293 } 293 }
294 return (0);
295}
294 296
295#endif /* #ifndef OPENSSL_NO_SOCK */ 297#endif /* #ifndef OPENSSL_NO_SOCK */