Diff

Differences From Artifact [93e5605483]:

To Artifact [fad08a4111]:


22
23
24
25
26
27
28
29

30
31
32
33
34
35
36
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
 *       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
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;
    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
710
711
712
713
714
715
716

717
718
719
720
721
722
723
724







-
+







}

/*
 *-------------------------------------------------------------------
 *
 * Tls_GetParent --
 *
 *    Get parent for stacked channel.
 *    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
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, or a
 *    Sets an option value for a SSL socket based channel.
 *    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.
 *
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
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);
    } 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, "");
}

856
857
858
859
860
861
862

863

864
865
866
867
868
869
870
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
 *    Initialize the notifier to watch Tcl_Files from this channel.
 *    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
944
945
946
947
948
949
950


951
952
953
954
955
956
957
958
959







-
-
+
+







}

/*
 *-------------------------------------------------------------------
 *
 * TlsGetHandleProc --
 *
 *    Called from Tcl_GetChannelFile to retrieve o/s file handler
 *    from the SSL socket based channel.
 *    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
969
970
971
972
973
974
975


976
977
978
979
980
981
982
983
984
985
986







-
-
+
+
+
+







}

/*
 *-------------------------------------------------------------------
 *
 * TlsNotifyProc --
 *
 *    Handler called by Tcl to inform us of activity
 *    on the underlying channel.
 *    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.
 *