/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2002-2003 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #pragma ident "%Z%%M% %I% %E% SMI" #include #include #include #include #include #include #include #ifndef _BOOT extern const char *hstrerror(int); #endif static const char *errlist[] = { /* EHTTP_BADARG */ "One or more arguments are not valid", /* EHTTP_NOMEM */ "Insufficient memory", /* EHTTP_CONCLOSED */ "SSL connection is closed (but maybe not the" " underlying connection)", /* EHTTP_UNEXPECTED */ "SSL connection returned unexpected error", /* EHTTP_EOFERR */ "Unexpected/premature EOF", /* EHTTP_NOCERT */ "No certificate was presented", /* EHTTP_NOMATCH */ "'Peername' doesn't match 'host' or no " "matching entry", /* EHTTP_NODATA */ "No data was returned", /* EHTTP_NOT_1_1 */ "Not a HTTP/1.1 server", /* EHTTP_BADHDR */ "Invalid header", /* EHTTP_OORANGE */ "Request header line out of range", /* EHTTP_NORESP */ "No response or partial response received", /* EHTTP_BADRESP */ "Bad response or error response returned", /* EHTTP_NOHEADER */ "Chunked header expected but not found", /* EHTTP_NOBOUNDARY */ "Boundary line expected but not found", /* EHTTP_NOTMULTI */ "This is not a multipart transfer", /* EHTTP_BADSIZE */ "Could not determine msg body size" }; static int nerrs = { sizeof (errlist) / sizeof (errlist[0]) }; /* * http_errorstr - print the error associated with the source and errorcode * * Arguments: * errsrc - Which library caused the error (as returned by * http_get_lasterr()) * error - The error code returned * * Returns: * Pointer to error string for this error. */ char const * http_errorstr(uint_t errsrc, ulong_t error) { char const *msg = NULL; #ifdef _BOOT static char message[128]; #endif switch (errsrc) { case ERRSRC_SYSTEM: msg = strerror(error); if (msg == NULL) msg = "Unknown system error"; break; case ERRSRC_LIBHTTP: if (error == 0 || error > nerrs) msg = "Unknown libhttp error"; else msg = errlist[error - 1]; break; case ERRSRC_RESOLVE: #ifdef _BOOT (void) sprintf(message, "Host retrieval error %lu\n", error); msg = message; #else msg = hstrerror(error); #endif break; case ERRSRC_VERIFERR: msg = X509_verify_cert_error_string(error); break; case ERRSRC_LIBSSL: msg = ERR_error_string(error, NULL); break; default: msg = "Unknown error"; break; } return (msg); }