Prechádzať zdrojové kódy

- Replaced with db_uri structure

Jan Janak 18 rokov pred
rodič
commit
8d25ebc328
2 zmenil súbory, kde vykonal 0 pridanie a 342 odobranie
  1. 0 280
      db/db_id.c
  2. 0 62
      db/db_id.h

+ 0 - 280
db/db_id.c

@@ -1,280 +0,0 @@
-/* 
- * $Id$
- *
- * Copyright (C) 2001-2005 iptel.org
- *
- * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#include "db_id.h"
-#include "../dprint.h"
-#include "../mem/mem.h"
-#include "../ut.h"
-#include <stdlib.h>
-#include <string.h>
-
-
-/*
- * Duplicate a string
- */
-static int dupl_string(char** dst, const char* begin, const char* end)
-{
-	if (*dst) pkg_free(*dst);
-
-	*dst = pkg_malloc(end - begin + 1);
-	if ((*dst) == NULL) {
-		return -1;
-	}
-
-	memcpy(*dst, begin, end - begin);
-	(*dst)[end - begin] = '\0';
-	return 0;
-}
-
-
-/*
- * Parse a database URL of form 
- * scheme://[username[:password]@]hostname[:port]/database
- *
- * Returns 0 if parsing was successful and -1 otherwise
- */
-static int parse_db_url(struct db_id* id, const char* url)
-{
-#define SHORTEST_DB_URL "s://a/b"
-#define SHORTEST_DB_URL_LEN (sizeof(SHORTEST_DB_URL) - 1)
-
-	enum state {
-		ST_SCHEME,     /* Scheme part */
-		ST_SLASH1,     /* First slash */
-		ST_SLASH2,     /* Second slash */
-		ST_USER_HOST,  /* Username or hostname */
-		ST_PASS_PORT,  /* Password or port part */
-		ST_HOST,       /* Hostname part */
-		ST_PORT,       /* Port part */
-		ST_DB          /* Database part */
-	};
-
-	enum state st;
-	int len, i;
-	const char* begin;
-	char* prev_token;
-
-	prev_token = 0;
-
-	if (!id || !url) {
-		goto err;
-	}
-	
-	len = strlen(url);
-	if (len < SHORTEST_DB_URL_LEN) {
-		goto err;
-	}
-	
-	     /* Initialize all attributes to 0 */
-	memset(id, 0, sizeof(struct db_id));
-	st = ST_SCHEME;
-	begin = url;
-
-	for(i = 0; i < len; i++) {
-		switch(st) {
-		case ST_SCHEME:
-			switch(url[i]) {
-			case ':':
-				st = ST_SLASH1;
-				if (dupl_string(&id->scheme, begin, url + i) < 0) goto err;
-				break;
-			}
-			break;
-
-		case ST_SLASH1:
-			switch(url[i]) {
-			case '/':
-				st = ST_SLASH2;
-				break;
-
-			default:
-				goto err;
-			}
-			break;
-
-		case ST_SLASH2:
-			switch(url[i]) {
-			case '/':
-				st = ST_USER_HOST;
-				begin = url + i + 1;
-				break;
-				
-			default:
-				goto err;
-			}
-			break;
-
-		case ST_USER_HOST:
-			switch(url[i]) {
-			case '@':
-				st = ST_HOST;
-				if (dupl_string(&id->username, begin, url + i) < 0) goto err;
-				begin = url + i + 1;
-				break;
-
-			case ':':
-				st = ST_PASS_PORT;
-				if (dupl_string(&prev_token, begin, url + i) < 0) goto err;
-				begin = url + i + 1;
-				break;
-
-			case '/':
-				if (dupl_string(&id->host, begin, url + i) < 0) goto err;
-				if (dupl_string(&id->database, url + i + 1, url + len) < 0) goto err;
-				return 0;
-			}
-			break;
-
-		case ST_PASS_PORT:
-			switch(url[i]) {
-			case '@':
-				st = ST_HOST;
-				id->username = prev_token;
-				if (dupl_string(&id->password, begin, url + i) < 0) goto err;
-				begin = url + i + 1;
-				break;
-
-			case '/':
-				id->host = prev_token;
-				id->port = str2s(begin, url + i - begin, 0);
-				if (dupl_string(&id->database, url + i + 1, url + len) < 0) goto err;
-				return 0;
-			}
-			break;
-
-		case ST_HOST:
-			switch(url[i]) {
-			case ':':
-				st = ST_PORT;
-				if (dupl_string(&id->host, begin, url + i) < 0) goto err;
-				begin = url + i + 1;
-				break;
-
-			case '/':
-				if (dupl_string(&id->host, begin, url + i) < 0) goto err;
-				if (dupl_string(&id->database, url + i + 1, url + len) < 0) goto err;
-				return 0;
-			}
-			break;
-
-		case ST_PORT:
-			switch(url[i]) {
-			case '/':
-				id->port = str2s(begin, url + i - begin, 0);
-				if (dupl_string(&id->database, url + i + 1, url + len) < 0) goto err;
-				return 0;
-			}
-			break;
-			
-		case ST_DB:
-			break;
-		}
-	}
-
-	if (st != ST_DB) goto err;
-	return 0;
-
- err:
-	if (id->scheme) pkg_free(id->scheme);
-	if (id->username) pkg_free(id->username);
-	if (id->password) pkg_free(id->password);
-	if (id->host) pkg_free(id->host);
-	if (id->database) pkg_free(id->database);
-	if (prev_token) pkg_free(prev_token);
-	return -1;
-}
-
-
-/*
- * Create a new connection identifier
- */
-struct db_id* new_db_id(const char* url)
-{
-	struct db_id* ptr;
-
-	if (!url) {
-		LOG(L_ERR, "new_db_id: Invalid parameter\n");
-		return 0;
-	}
-
-	ptr = (struct db_id*)pkg_malloc(sizeof(struct db_id));
-	if (!ptr) {
-		LOG(L_ERR, "new_db_id: No memory left\n");
-		goto err;
-	}
-	memset(ptr, 0, sizeof(struct db_id));
-
-	if (parse_db_url(ptr, url) < 0) {
-		LOG(L_ERR, "new_db_id: Error while parsing database URL: %s\n", url);
-		goto err;
-	}
-
-	return ptr;
-
- err:
-	if (ptr) pkg_free(ptr);
-	return 0;
-}
-
-
-/* compare s1 & s2  with a function f (which should return 0 if ==);
- * s1 & s2 can be null
- * return 0 if match, 1 if not */
-#define cmpstr(s1, s2, f) \
-	((s1)!=(s2)) && ((s1)==0 || (s2)==0 || (f)((s1), (s2))!=0)
-
-/*
- * Compare two connection identifiers
- */
-unsigned char cmp_db_id(struct db_id* id1, struct db_id* id2)
-{
-	if (!id1 || !id2) return 0;
-	if (id1->port != id2->port) return 0;
-
-	if (cmpstr(id1->scheme, id2->scheme, strcmp)) return 0;
-	if (cmpstr(id1->username, id2->username, strcmp)) return 0;
-	if (cmpstr(id1->password, id2->password, strcmp)) return 0;
-	if (cmpstr(id1->host, id2->host, strcasecmp)) return 0;
-	if (cmpstr(id1->database, id2->database, strcmp)) return 0;
-	return 1;
-}
-
-
-/*
- * Free a connection identifier
- */
-void free_db_id(struct db_id* id)
-{
-	if (!id) return;
-
-	if (id->scheme) pkg_free(id->scheme);
-	if (id->username) pkg_free(id->username);
-	if (id->password) pkg_free(id->password);
-	if (id->host) pkg_free(id->host);
-	if (id->database) pkg_free(id->database);
-	pkg_free(id);
-}

+ 0 - 62
db/db_id.h

@@ -1,62 +0,0 @@
-/* 
- * $Id$
- *
- * Copyright (C) 2001-2005 iptel.org
- *
- * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifndef _DB_ID_H
-#define _DB_ID_H
-
-#include "../str.h"
-
-
-struct db_id {
-	char* scheme;        /* URL scheme */
-	char* username;      /* Username, case sensitive */
-	char* password;      /* Password, case sensitive */
-	char* host;          /* Host or IP, case insensitive */
-	unsigned short port; /* Port number */
-	char* database;      /* Database, case sensitive */
-};
-
-
-/*
- * Create a new connection identifier
- */
-struct db_id* new_db_id(const char* url);
-
-
-/*
- * Compare two connection identifiers
- */
-unsigned char cmp_db_id(struct db_id* id1, struct db_id* id2);
-
-
-/*
- * Free a connection identifier
- */
-void free_db_id(struct db_id* id);
-
-
-#endif /* _DB_ID_H */