︙ | | | ︙ | |
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
/*
*-------------------------------------------------------------------
*
* TlsBlockModeProc --
*
* This procedure is invoked by the generic IO level
* to set blocking and nonblocking modes
*
* Results:
* 0 if successful or POSIX error code if failed.
*
* Side effects:
* Sets the device into blocking or nonblocking mode.
*
|
|
|
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
/*
*-------------------------------------------------------------------
*
* TlsBlockModeProc --
*
* This procedure is invoked by the generic IO level
* to set channel to blocking or nonblocking mode.
*
* Results:
* 0 if successful or POSIX error code if failed.
*
* Side effects:
* Sets the device into blocking or nonblocking mode.
*
|
︙ | | | ︙ | |
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
dprintf("TlsCloseProc(%p)", (void *) statePtr);
Tls_Clean(statePtr);
Tcl_EventuallyFree((ClientData)statePtr, Tls_Free);
return 0;
}
static int TlsClose2Proc(ClientData instanceData, /* The socket state. */
Tcl_Interp *interp, /* For errors - can be NULL. */
int flags) /* Flags to close read and/or write side of channel */
{
State *statePtr = (State *) instanceData;
dprintf("TlsClose2Proc(%p)", (void *) statePtr);
if ((flags & (TCL_CLOSE_READ|TCL_CLOSE_WRITE)) == 0) {
return TlsCloseProc(instanceData, interp);
}
return EINVAL;
}
/*
*------------------------------------------------------*
*
* Tls_WaitForConnect --
*
* Result:
* 0 if successful, -1 if failed.
*
* Side effects:
* Issues SSL_accept or SSL_connect
*
*------------------------------------------------------*
*/
int Tls_WaitForConnect(State *statePtr, int *errorCodePtr, int handshakeFailureIsPermanent) {
unsigned long backingError;
int err, rc;
int bioShouldRetry;
*errorCodePtr = 0;
dprintf("WaitForConnect(%p)", (void *) statePtr);
dprintFlags(statePtr);
if (!(statePtr->flags & TLS_TCL_INIT)) {
|
>
>
>
>
>
>
>
>
>
>
>
>
|
|
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
dprintf("TlsCloseProc(%p)", (void *) statePtr);
Tls_Clean(statePtr);
Tcl_EventuallyFree((ClientData)statePtr, Tls_Free);
return 0;
}
/*
*-------------------------------------------------------------------
*
* TlsClose2Proc --
*
* Similar to TlsCloseProc, but allows for separate close read and
* write side of channel.
*
*-------------------------------------------------------------------
*/
static int TlsClose2Proc(ClientData instanceData, /* The socket state. */
Tcl_Interp *interp, /* For errors - can be NULL. */
int flags) /* Flags to close read and/or write side of channel */
{
State *statePtr = (State *) instanceData;
dprintf("TlsClose2Proc(%p)", (void *) statePtr);
if ((flags & (TCL_CLOSE_READ|TCL_CLOSE_WRITE)) == 0) {
return TlsCloseProc(instanceData, interp);
}
return EINVAL;
}
/*
*------------------------------------------------------*
*
* Tls_WaitForConnect --
*
* Perform connect (client) or accept (server)
*
* Result:
* 0 if successful, -1 if failed.
*
* Side effects:
* Issues SSL_accept or SSL_connect
*
*------------------------------------------------------*
*/
int Tls_WaitForConnect(State *statePtr, int *errorCodePtr, int handshakeFailureIsPermanent) {
unsigned long backingError;
int err, rc = 0;
int bioShouldRetry;
*errorCodePtr = 0;
dprintf("WaitForConnect(%p)", (void *) statePtr);
dprintFlags(statePtr);
if (!(statePtr->flags & TLS_TCL_INIT)) {
|
︙ | | | ︙ | |
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
|
}
/*
*-------------------------------------------------------------------
*
* Tls_GetParent --
*
* Get parent for stacked channel.
*
* Results:
* Tcl_Channel or NULL if none.
*
*-------------------------------------------------------------------
*/
Tcl_Channel Tls_GetParent(State *statePtr, int maskFlags) {
|
|
|
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
|
}
/*
*-------------------------------------------------------------------
*
* Tls_GetParent --
*
* Get parent channel for a stacked channel.
*
* Results:
* Tcl_Channel or NULL if none.
*
*-------------------------------------------------------------------
*/
Tcl_Channel Tls_GetParent(State *statePtr, int maskFlags) {
|
︙ | | | ︙ | |
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
|
}
/*
*-------------------------------------------------------------------
*
* TlsSetOptionProc --
*
* Sets an option value for a SSL socket based channel, or a
* list of all options and their values.
*
* Results:
* TCL_OK if successful or TCL_ERROR if failed.
*
* Side effects:
* Updates channel option to new value.
*
|
|
<
|
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
|
}
/*
*-------------------------------------------------------------------
*
* TlsSetOptionProc --
*
* Sets an option value for a SSL socket based channel.
*
* Results:
* TCL_OK if successful or TCL_ERROR if failed.
*
* Side effects:
* Updates channel option to new value.
*
|
︙ | | | ︙ | |
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
|
Tcl_DriverSetOptionProc *setOptionProc;
dprintf("Called");
setOptionProc = Tcl_ChannelSetOptionProc(Tcl_GetChannelType(downChan));
if (setOptionProc != NULL) {
return (*setOptionProc)(Tcl_GetChannelInstanceData(downChan), interp, optionName, optionValue);
} else if (optionName == (char*) NULL) {
/*
* Request is query for all options, this is ok.
*/
return TCL_OK;
}
/*
* Request for a specific option has to fail, we don't have any.
*/
return Tcl_BadChannelOption(interp, optionName, "");
}
|
<
<
<
<
<
|
758
759
760
761
762
763
764
765
766
767
768
769
770
771
|
Tcl_DriverSetOptionProc *setOptionProc;
dprintf("Called");
setOptionProc = Tcl_ChannelSetOptionProc(Tcl_GetChannelType(downChan));
if (setOptionProc != NULL) {
return (*setOptionProc)(Tcl_GetChannelInstanceData(downChan), interp, optionName, optionValue);
}
/*
* Request for a specific option has to fail, we don't have any.
*/
return Tcl_BadChannelOption(interp, optionName, "");
}
|
︙ | | | ︙ | |
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
|
}
/*
*-------------------------------------------------------------------
*
* TlsWatchProc --
*
* Initialize the notifier to watch Tcl_Files from this channel.
*
* Results:
* None.
*
* Side effects:
* Sets up the notifier so that a future event on the channel
* will be seen by Tcl.
|
>
|
|
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
|
}
/*
*-------------------------------------------------------------------
*
* TlsWatchProc --
*
* Initialize the event notifier to watch for events of interest
* from this channel.
*
* Results:
* None.
*
* Side effects:
* Sets up the notifier so that a future event on the channel
* will be seen by Tcl.
|
︙ | | | ︙ | |
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
|
}
/*
*-------------------------------------------------------------------
*
* TlsGetHandleProc --
*
* Called from Tcl_GetChannelFile to retrieve o/s file handler
* from the SSL socket based channel.
*
* Results:
* The appropriate Tcl_File handle or NULL if none.
*
* Side effects:
* None.
*
|
|
|
|
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
|
}
/*
*-------------------------------------------------------------------
*
* TlsGetHandleProc --
*
* This procedure is invoked by the generic IO level to retrieve a
* device-specific handle from the SSL socket based channel.
*
* Results:
* The appropriate Tcl_File handle or NULL if none.
*
* Side effects:
* None.
*
|
︙ | | | ︙ | |
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
|
}
/*
*-------------------------------------------------------------------
*
* TlsNotifyProc --
*
* Handler called by Tcl to inform us of activity
* on the underlying channel.
*
* Results:
* Type of event or 0 if failed
*
* Side effects:
* May process the incoming event by itself.
*
|
|
>
>
|
|
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
|
}
/*
*-------------------------------------------------------------------
*
* TlsNotifyProc --
*
* This procedure is invoked by the generic IO level to notify the
* channel that an event occurred. It is used by stacked channel
* drivers that wish to be notified of events that occur on the
* underlying (stacked) channel.
*
* Results:
* Type of event or 0 if failed
*
* Side effects:
* May process the incoming event by itself.
*
|
︙ | | | ︙ | |