#ifndef _SSL_H_
#include "ssl.h"
#endif
#ifndef _SSLCTX_H_
#include "sslctx.h"
#endif
#ifndef _SSLALLOC_H_
#include "sslalloc.h"
#endif
#ifndef _APPLE_GLUE_H_
#include "appleGlue.h"
#endif
#ifndef _SSL_DEBUG_H_
#include "sslDebug.h"
#endif
#include <CoreServices/../Frameworks/CarbonCore.framework/Headers/MacErrors.h>
#include <time.h>
#include <string.h>
typedef struct {
SSLErr serr;
OSStatus oerr;
} _sslErrMap;
static const _sslErrMap sslErrMap[] = {
{ SSLNoErr, noErr },
{ SSLMemoryErr, memFullErr },
{ SSLUnsupportedErr, unimpErr },
{ SSLProtocolErr, errSSLProtocol },
{ SSLNegotiationErr, errSSLNegotiation },
{ SSLFatalAlert, errSSLFatalAlert },
{ SSLWouldBlockErr, errSSLWouldBlock },
{ SSLIOErr, ioErr },
{ SSLSessionNotFoundErr, errSSLSessionNotFound },
{ SSLConnectionClosedGraceful, errSSLClosedGraceful },
{ SSLConnectionClosedError, errSSLClosedAbort },
{ X509CertChainInvalidErr, errSSLXCertChainInvalid },
{ SSLBadCert, errSSLBadCert },
{ SSLCryptoError, errSSLCrypto },
{ SSLInternalError, errSSLInternal },
{ SSLDataOverflow, errSSLCrypto },
{ SSLAttachFailure, errSSLModuleAttach },
{ SSLUnknownRootCert, errSSLUnknownRootCert },
{ SSLNoRootCert, errSSLNoRootCert },
{ SSLCertExpired, errSSLCertExpired },
{ SSLCertNotYetValid, errSSLCertNotYetValid },
{ SSLBadStateErr, badReqErr },
{ SSLConnectionClosedNoNotify, errSSLClosedNoNotify },
};
#define SIZEOF_ERR_MAP (sizeof(sslErrMap) / sizeof(_sslErrMap))
SSLErr sslIoRead(
SSLBuffer buf,
size_t *actualLength,
SSLContext *ctx)
{
UInt32 dataLength = buf.length;
OSStatus ortn;
*actualLength = 0;
ortn = (ctx->ioCtx.read)(ctx->ioCtx.ioRef,
buf.data,
&dataLength);
*actualLength = dataLength;
return sslErrFromOsStatus(ortn);
}
SSLErr sslIoWrite(
SSLBuffer buf,
size_t *actualLength,
SSLContext *ctx)
{
UInt32 dataLength = buf.length;
OSStatus ortn;
*actualLength = 0;
ortn = (ctx->ioCtx.write)(ctx->ioCtx.ioRef,
buf.data,
&dataLength);
*actualLength = dataLength;
return sslErrFromOsStatus(ortn);
}
SSLErr sslErrFromOsStatus(OSStatus o)
{
int i;
const _sslErrMap *emap = sslErrMap;
for(i=0; i<SIZEOF_ERR_MAP; i++) {
if(emap->oerr == o) {
return emap->serr;
}
emap++;
}
return SSLIOErr;
}
OSStatus sslErrToOsStatus(SSLErr s)
{
int i;
const _sslErrMap *emap = sslErrMap;
for(i=0; i<SIZEOF_ERR_MAP; i++) {
if(emap->serr == s) {
return emap->oerr;
}
emap++;
}
CASSERT(0);
return paramErr;
}
SSLErr sslTime(UInt32 *tim)
{
time_t t;
time(&t);
*tim = (UInt32)t;
return SSLNoErr;
}
#ifdef notdef
SSLErr sslConvertTime(UInt32 *time)
{
return SSLUnsupportedErr;
}
#endif