1
2
3
4
5
6
7
8
9
10
11
|
/*
* Copyright (C) 1997-1999 Matt Newman <matt@novadigm.com>
*
* $Header: /home/rkeene/tmp/cvs2fossil/../tcltls/tls/tls/tls.c,v 1.6 2000/06/06 01:34:11 welch Exp $
*
* TLS (aka SSL) Channel - can be layered on any bi-directional
* Tcl_Channel (Note: Requires Trf Core Patch)
*
* This was built (almost) from scratch based upon observation of
* OpenSSL 0.9.2B
*
|
|
|
1
2
3
4
5
6
7
8
9
10
11
|
/*
* Copyright (C) 1997-1999 Matt Newman <matt@novadigm.com>
*
* $Header: /home/rkeene/tmp/cvs2fossil/../tcltls/tls/tls/tls.c,v 1.6.2.1 2000/07/11 04:58:46 hobbs Exp $
*
* TLS (aka SSL) Channel - can be layered on any bi-directional
* Tcl_Channel (Note: Requires Trf Core Patch)
*
* This was built (almost) from scratch based upon observation of
* OpenSSL 0.9.2B
*
|
︙ | | | ︙ | |
536
537
538
539
540
541
542
543
544
545
546
547
548
549
|
return TCL_ERROR;
}
chan = Tcl_GetChannel(interp, Tcl_GetStringFromObj(objv[1], NULL), NULL);
if (chan == (Tcl_Channel) NULL) {
return TCL_ERROR;
}
if (Tcl_GetChannelType(chan) != Tls_ChannelType()) {
Tcl_AppendResult(interp, "bad channel \"", Tcl_GetChannelName(chan),
"\": not a TLS channel", NULL);
return TCL_ERROR;
}
statePtr = (State *)Tcl_GetChannelInstanceData( chan);
|
>
>
>
>
>
>
|
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
|
return TCL_ERROR;
}
chan = Tcl_GetChannel(interp, Tcl_GetStringFromObj(objv[1], NULL), NULL);
if (chan == (Tcl_Channel) NULL) {
return TCL_ERROR;
}
#ifdef TCL_CHANNEL_VERSION_2
/*
* Make sure to operate on the topmost channel
*/
chan = Tcl_GetTopChannel(chan);
#endif
if (Tcl_GetChannelType(chan) != Tls_ChannelType()) {
Tcl_AppendResult(interp, "bad channel \"", Tcl_GetChannelName(chan),
"\": not a TLS channel", NULL);
return TCL_ERROR;
}
statePtr = (State *)Tcl_GetChannelInstanceData( chan);
|
︙ | | | ︙ | |
628
629
630
631
632
633
634
635
636
637
638
639
640
641
|
return TCL_ERROR;
}
chan = Tcl_GetChannel(interp, Tcl_GetStringFromObj(objv[1], NULL), NULL);
if (chan == (Tcl_Channel) NULL) {
return TCL_ERROR;
}
for (idx = 2; idx < objc; idx++) {
char *opt = Tcl_GetStringFromObj(objv[idx], NULL);
if (opt[0] != '-')
break;
|
>
>
>
>
>
>
|
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
|
return TCL_ERROR;
}
chan = Tcl_GetChannel(interp, Tcl_GetStringFromObj(objv[1], NULL), NULL);
if (chan == (Tcl_Channel) NULL) {
return TCL_ERROR;
}
#ifdef TCL_CHANNEL_VERSION_2
/*
* Make sure to operate on the topmost channel
*/
chan = Tcl_GetTopChannel(chan);
#endif
for (idx = 2; idx < objc; idx++) {
char *opt = Tcl_GetStringFromObj(objv[idx], NULL);
if (opt[0] != '-')
break;
|
︙ | | | ︙ | |
676
677
678
679
680
681
682
683
684
685
686
687
688
689
|
if (model != NULL) {
int mode;
/* Get the "model" context */
chan = Tcl_GetChannel( interp, model, &mode);
if (chan == (Tcl_Channel)0) {
return TCL_ERROR;
}
if (Tcl_GetChannelType(chan) != Tls_ChannelType()) {
Tcl_AppendResult(interp, "bad channel \"", Tcl_GetChannelName(chan),
"\": not a TLS channel", NULL);
return TCL_ERROR;
}
statePtr = (State *)Tcl_GetChannelInstanceData( chan);
ctx = statePtr->ctx;
|
>
>
>
>
>
>
|
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
|
if (model != NULL) {
int mode;
/* Get the "model" context */
chan = Tcl_GetChannel( interp, model, &mode);
if (chan == (Tcl_Channel)0) {
return TCL_ERROR;
}
#ifdef TCL_CHANNEL_VERSION_2
/*
* Make sure to operate on the topmost channel
*/
chan = Tcl_GetTopChannel(chan);
#endif
if (Tcl_GetChannelType(chan) != Tls_ChannelType()) {
Tcl_AppendResult(interp, "bad channel \"", Tcl_GetChannelName(chan),
"\": not a TLS channel", NULL);
return TCL_ERROR;
}
statePtr = (State *)Tcl_GetChannelInstanceData( chan);
ctx = statePtr->ctx;
|
︙ | | | ︙ | |
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
|
#if TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION < 2
statePtr->parent = chan;
statePtr->self = Tcl_ReplaceChannel( interp,
Tls_ChannelType(), (ClientData) statePtr,
(TCL_READABLE | TCL_WRITABLE), statePtr->parent);
#else
statePtr->self = chan;
Tcl_StackChannel( interp, Tls_ChannelType(), (ClientData) statePtr,
(TCL_READABLE | TCL_WRITABLE), chan);
#endif
if (statePtr->self == (Tcl_Channel) NULL) {
/*
* No use of Tcl_EventuallyFree because no possible Tcl_Preserve.
*/
Tls_Free((char *) statePtr);
return TCL_ERROR;
|
>
>
>
>
|
>
|
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
|
#if TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION < 2
statePtr->parent = chan;
statePtr->self = Tcl_ReplaceChannel( interp,
Tls_ChannelType(), (ClientData) statePtr,
(TCL_READABLE | TCL_WRITABLE), statePtr->parent);
#else
#ifdef TCL_CHANNEL_VERSION_2
statePtr->self = Tcl_StackChannel(interp, Tls_ChannelType(),
(ClientData) statePtr, (TCL_READABLE | TCL_WRITABLE), chan);
#else
statePtr->self = chan;
Tcl_StackChannel( interp, Tls_ChannelType(), (ClientData) statePtr,
(TCL_READABLE | TCL_WRITABLE), chan);
#endif
#endif
if (statePtr->self == (Tcl_Channel) NULL) {
/*
* No use of Tcl_EventuallyFree because no possible Tcl_Preserve.
*/
Tls_Free((char *) statePtr);
return TCL_ERROR;
|
︙ | | | ︙ | |
986
987
988
989
990
991
992
993
994
995
996
997
998
999
|
}
channelName = Tcl_GetStringFromObj(objv[1], NULL);
chan = Tcl_GetChannel( interp, channelName, &mode);
if (chan == (Tcl_Channel)0) {
return TCL_ERROR;
}
if (Tcl_GetChannelType(chan) != Tls_ChannelType()) {
Tcl_AppendResult(interp, "bad channel \"", Tcl_GetChannelName(chan),
"\": not a TLS channel", NULL);
return TCL_ERROR;
}
statePtr = (State *)Tcl_GetChannelInstanceData( chan);
peer = SSL_get_peer_certificate(statePtr->ssl);
|
>
>
>
>
>
>
|
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
|
}
channelName = Tcl_GetStringFromObj(objv[1], NULL);
chan = Tcl_GetChannel( interp, channelName, &mode);
if (chan == (Tcl_Channel)0) {
return TCL_ERROR;
}
#ifdef TCL_CHANNEL_VERSION_2
/*
* Make sure to operate on the topmost channel
*/
chan = Tcl_GetTopChannel(chan);
#endif
if (Tcl_GetChannelType(chan) != Tls_ChannelType()) {
Tcl_AppendResult(interp, "bad channel \"", Tcl_GetChannelName(chan),
"\": not a TLS channel", NULL);
return TCL_ERROR;
}
statePtr = (State *)Tcl_GetChannelInstanceData( chan);
peer = SSL_get_peer_certificate(statePtr->ssl);
|
︙ | | | ︙ | |