Check-in [4579316443]
Bounty program for improvements to Tcl and certain Tcl packages.
Overview
Comment:Cleaned up more things
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | wip-fix-io-layer
Files: files | file ages | folders
SHA1: 4579316443ead0f83eb3d01a2924e31873856330
User & Date: rkeene on 2016-12-13 03:35:25
Other Links: branch diff | manifest | tags
Context
2016-12-13
03:40
Fixed uninitialized use of variable check-in: 942e844672 user: rkeene tags: wip-fix-io-layer
03:35
Cleaned up more things check-in: 4579316443 user: rkeene tags: wip-fix-io-layer
03:27
Silence warnings about ignoring this return value by explicitly ignoring it check-in: 41f972bfbf user: rkeene tags: wip-fix-io-layer
Changes

Modified tlsIO.c from [0f85acc9f6] to [f15c16a7e8].

156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176



177
178
179
180
181
182
183
 *	0 if successful, the value of Tcl_GetErrno() if failed.
 *
 * Side effects:
 *	Closes the socket of the channel.
 *
 *-------------------------------------------------------------------
 */
static int
TlsCloseProc(ClientData instanceData,	/* The socket to close. */
             Tcl_Interp *interp)	/* For error reporting - unused. */
{
    State *statePtr = (State *) instanceData;

    dprintf("TlsCloseProc(%p)", (void *) statePtr);

    Tls_Clean(statePtr);
    Tcl_EventuallyFree((ClientData)statePtr, Tls_Free);

    dprintf("Returning TCL_OK");

    return TCL_OK;



}

/*
 *-------------------------------------------------------------------
 *
 * TlsInputProc --
 *






<
|
<
<









|
>
>
>







156
157
158
159
160
161
162

163


164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
 *	0 if successful, the value of Tcl_GetErrno() if failed.
 *
 * Side effects:
 *	Closes the socket of the channel.
 *
 *-------------------------------------------------------------------
 */

static int TlsCloseProc(ClientData instanceData, Tcl_Interp *interp) {


    State *statePtr = (State *) instanceData;

    dprintf("TlsCloseProc(%p)", (void *) statePtr);

    Tls_Clean(statePtr);
    Tcl_EventuallyFree((ClientData)statePtr, Tls_Free);

    dprintf("Returning TCL_OK");

	return(TCL_OK);

	/* Interp is unused. */
	interp = interp;
}

/*
 *-------------------------------------------------------------------
 *
 * TlsInputProc --
 *
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
			break;
		case SSL_ERROR_SYSCALL:
			dprintf("I/O error reading, treating it as EOF");
			*errorCodePtr = 0;
			bytesRead = 0;
			break;
	}
input:
	dprintf("Input(%d) -> %d [%d]", bufSize, bytesRead, *errorCodePtr);
	return bytesRead;
}

/*
 *-------------------------------------------------------------------
 *






|







263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
			break;
		case SSL_ERROR_SYSCALL:
			dprintf("I/O error reading, treating it as EOF");
			*errorCodePtr = 0;
			bytesRead = 0;
			break;
	}

	dprintf("Input(%d) -> %d [%d]", bufSize, bytesRead, *errorCodePtr);
	return bytesRead;
}

/*
 *-------------------------------------------------------------------
 *
312
313
314
315
316
317
318
319









320
321
322
323
324
325
326
		dprintf("Tls_WaitForConnect returned %i (err = %i)", written, *errorCodePtr);

		return(-1);
	}

	if (toWrite == 0) {
		dprintf("zero-write");
		BIO_flush(statePtr->bio);









		written = 0;
		*errorCodePtr = 0;
		return(0);
	}

	/*
	 * We need to clear the SSL error stack now because we sometimes reach






|
>
>
>
>
>
>
>
>
>







312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
		dprintf("Tls_WaitForConnect returned %i (err = %i)", written, *errorCodePtr);

		return(-1);
	}

	if (toWrite == 0) {
		dprintf("zero-write");
		err = BIO_flush(statePtr->bio);

		if (err <= 0) {
			dprintf("Flushing failed");

			*errorCodePtr = EIO;
			written = 0;
			return(-1);
		}

		written = 0;
		*errorCodePtr = 0;
		return(0);
	}

	/*
	 * We need to clear the SSL error stack now because we sometimes reach
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
			*errorCodePtr = ECONNABORTED;
			written = -1;
			break;
		default:
			dprintf(" unknown err: %d", err);
			break;
	}
output:
	dprintf("Output(%d) -> %d", toWrite, written);
	return(written);
}

/*
 *-------------------------------------------------------------------
 *






|







376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
			*errorCodePtr = ECONNABORTED;
			written = -1;
			break;
		default:
			dprintf(" unknown err: %d", err);
			break;
	}

	dprintf("Output(%d) -> %d", toWrite, written);
	return(written);
}

/*
 *-------------------------------------------------------------------
 *
773
774
775
776
777
778
779
780




781
782
783
784
785
786
787
			err = SSL_connect(statePtr->ssl);
		}

		if (err > 0) {
			dprintf("That seems to have gone okay");

			BIO_flush(statePtr->bio);




		}

		rc = SSL_get_error(statePtr->ssl, err);

		dprintf("Got error: %i (rc = %i)", err, rc);

		bioShouldRetry = 0;






|
>
>
>
>







782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
			err = SSL_connect(statePtr->ssl);
		}

		if (err > 0) {
			dprintf("That seems to have gone okay");

			err = BIO_flush(statePtr->bio);

			if (err <= 0) {
				dprintf("Flushing the lower layers failed, this will probably terminate this session");
			}
		}

		rc = SSL_get_error(statePtr->ssl, err);

		dprintf("Got error: %i (rc = %i)", err, rc);

		bioShouldRetry = 0;