utils/pdbt/carrier.c
d32fa103
 /*
  * Copyright (C) 2009 1&1 Internet AG
  *
  * This file is part of sip-router, a free SIP server.
  *
  * sip-router 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
  *
  * sip-router 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 
9e1ff448
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
d32fa103
  */
 
 #define _GNU_SOURCE
 #include "carrier.h"
 #include "log.h"
 #include <unistd.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 
 
 
 char *cnames[MAX_CARRIERID+1];
 
 
 
 
 void init_carrier_names() {
 	int i;
 
 	for (i=0; i<=MAX_CARRIERID; i++) cnames[i]=NULL;
 	cnames[OTHER_CARRIERID] = "other carriers merged by this tool";
 }
 
 
 
 
 int load_carrier_names(char *filename) {
 	FILE * fp;
 	char * line = NULL;
 	size_t len = 0;
 	ssize_t read;
 	char *p;
 	int n;
 	char idstr[4];
 	long int id;
 	int ret=0;
 
 	idstr[3]=0;
 
 	fp = fopen(filename, "r");
 	if (fp == NULL) {
 		LERR("cannot open file '%s'\n", filename);
 		return -1;
 	}
 
 	n=1;
 	while ((read = getline(&line, &len, fp)) != -1) {
 		p=line;
 		len=strlen(p);
 
 		if (len<=5) {
 			LWARNING("invalid line %ld\n", (long int)n);
 			ret=-1;
 			goto nextline;
 		}
 
 		idstr[0] = p[1];
 		idstr[1] = p[2];
 		idstr[2] = p[3];
 		p+=5;
 		len-=5;
 		
 		id = strtol(idstr, NULL, 10);
 		if (!IS_VALID_PDB_CARRIERID(id)) {
 			LWARNING("invalid carrier id '%s'\n", idstr);
 			ret=-1;
 			goto nextline;
 		}
 		
 		cnames[id]=malloc(len+1);
 		if (cnames[id]==NULL) {
 			LERR("out of memory (needed %ld bytes)\n", (long int)len);
 			ret=-1;
 			exit(-1);
 		}
 		
91f79909
 		strncpy(cnames[id], p, len - 1);
 		cnames[id][len - 1]=0;
d32fa103
 
 	nextline:
 		n++;
 	}
 
 	if (line) free(line);
 	fclose(fp);
 
 	return ret;
 }
 
 
 
 
 char *carrierid2name(carrier_t carrier) {
 	char *s;
 	if (!IS_VALID_CARRIERID(carrier)) s="invalid carrier id";
 	else s=cnames[carrier];
 	if (s==NULL) s="unknown carrier";
 	return s;
 }