123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- /*
- * Copyright (C) 2005 RingCentral Inc.
- * Created by Dmitry Semyonov <[email protected]>
- *
- *
- * This file is part of ser, a free SIP server.
- *
- * ser is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version
- *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- * [email protected]
- *
- * ser is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
- #include <oci.h>
- #include "../../dprint.h"
- #include "common.h"
- #include "utils.h"
- sb4 checkerr(dvoid *errhp, sword status, int line)
- {
- sb4 errcode = 0;
- if (status == OCI_SUCCESS)
- return 0;
- #define CASE_LOG_STR(_err) \
- case _err: \
- ERR("Error - " #_err); \
- break
- switch (status)
- {
- CASE_LOG_STR(OCI_SUCCESS_WITH_INFO);
- CASE_LOG_STR(OCI_NEED_DATA);
- CASE_LOG_STR(OCI_NO_DATA);
- CASE_LOG_STR(OCI_INVALID_HANDLE);
- CASE_LOG_STR(OCI_STILL_EXECUTING);
- CASE_LOG_STR(OCI_CONTINUE);
- case OCI_ERROR:
- {
- text errbuf[512];
- errbuf[0] = '\0';
-
- (void) OCIErrorGet(errhp, 1, NULL, &errcode, errbuf, sizeof(errbuf),
- OCI_HTYPE_ERROR);
-
- /* Special case. (Search 24334 in dbase.c for explanation.) */
- if (errcode == 24334)
- {
- DBG1("ORA-24334. Most likely not an error.\n");
- return 24334;
- }
-
- ERR("Error - %.*s", sizeof(errbuf), errbuf);
- break;
- }
-
- default:
- ERR("Error - unhandled status: %d", status);
- }
- ERR(". Line %d\n", line);
-
- return errcode;
- }
- const char *sqlt_to_str(ub2 sqlt)
- {
- #define CASE_STR(_val) case _val: return #_val
- switch (sqlt)
- {
- CASE_STR(SQLT_CHR);
- CASE_STR(SQLT_STR);
- CASE_STR(SQLT_INT);
- CASE_STR(SQLT_UIN);
- CASE_STR(SQLT_FLT);
- CASE_STR(SQLT_DAT);
- CASE_STR(SQLT_DATE);
- CASE_STR(SQLT_TIMESTAMP);
- CASE_STR(SQLT_TIMESTAMP_TZ);
- CASE_STR(SQLT_TIMESTAMP_LTZ);
- CASE_STR(SQLT_NUM);
- default:
- return "Unknown SQLT_xxx";
- }
- }
- /*
- * URL example: "oracle://serro:47serro11@localhost:port/ser"
- * XXX: Buffer lengths are not checked yet!
- */
- int parse_sql_url(const char *_sqlurl, char *sz_user, char *sz_passwd,
- char *sz_db)
- {
- /* Skip 'oracle://' part */
- while ( *_sqlurl != '\0' && *_sqlurl++ != ':' );
- if ( *_sqlurl++ != '/' || *_sqlurl++ != '/' )
- return -1;
- /* Get username */
- do {
- *sz_user++ = *_sqlurl++;
- } while ( *_sqlurl != ':' && *_sqlurl != '\0' );
- if ( *_sqlurl++ != ':' )
- return -2;
-
- *sz_user = '\0';
-
- /* Get password */
- do {
- *sz_passwd++ = *_sqlurl++;
- } while ( *_sqlurl != '@' && *_sqlurl != '\0' );
- if ( *_sqlurl++ != '@' )
- return -3;
- *sz_passwd = '\0';
-
- /* Skip 'localhost:port' part */
- while ( *_sqlurl != '\0' && *_sqlurl++ != '/' );
- if ( *_sqlurl == '\0' )
- return -4;
- /* Get db */
- do {
- *sz_db++ = *_sqlurl++;
- } while ( *_sqlurl != '\0' );
-
- *sz_db = '\0';
-
-
- return 0;
- }
|