} else if (ss->ssl3) {
} else if (ss->ssl3.initialized) {
SSL_GetChannelInfo(PRFileDesc *fd, SSLChannelInfo *info, PRUintn len){    sslSocket *      ss;    SSLChannelInfo   inf;    sslSessionID *   sid;    if (!info || len < sizeof inf.length) {     	return SECSuccess;    }    ss = ssl_FindSocket(fd);    if (!ss) {	SSL_DBG(("%d: SSL[%d]: bad socket in SSL_GetChannelInfo",		 SSL_GETPID(), fd));	return SECFailure;    }    memset(&inf, 0, sizeof inf);    inf.length = PR_MIN(sizeof inf, len);    if (ss->useSecurity && ss->firstHsDone) {        sid = ss->sec.ci.sid;	inf.protocolVersion  = ss->version;	inf.authKeyBits      = ss->sec.authKeyBits;	inf.keaKeyBits       = ss->sec.keaKeyBits;	if (ss->version < SSL_LIBRARY_VERSION_3_0) { /* SSL2 */	    inf.cipherSuite      = ss->sec.cipherType | 0xff00;	} else if (ss->ssl3) { 		/* SSL3 and TLS */	    /* XXX  These should come from crSpec */	    inf.cipherSuite      = ss->ssl3->hs.cipher_suite;	}	if (sid) {	    inf.creationTime   = sid->creationTime;	    inf.lastAccessTime = sid->lastAccessTime;	    inf.expirationTime = sid->expirationTime;	    if (ss->version < SSL_LIBRARY_VERSION_3_0) { /* SSL2 */	        inf.sessionIDLength = SSL2_SESSIONID_BYTES;		memcpy(inf.sessionID, sid->u.ssl2.sessionID, SSL2_SESSIONID_BYTES);	    } else {		unsigned int sidLen = sid->u.ssl3.sessionIDLength;	        sidLen = PR_MIN(sidLen, sizeof inf.sessionID);	        inf.sessionIDLength = sidLen;		memcpy(inf.sessionID, sid->u.ssl3.sessionID, sidLen);	    }	}    }    memcpy(info, &inf, inf.length);    return SECSuccess;}