Exemplo n.º 1
0
/* - utilities ---------------------------------------------------------- */
struct json_object* asterisk_sip_peers_parser(const char* line, size_t length)
{
  char* name;
  char* host;
  char* port;
  char* status;
  char* latency;
  const char* cursor = line;
  if (strncasecmp(line, "Name/username", 13) == 0 ||
      strcasestr(line, "[Monitored:")        != 0)  {
    return NULL;
  }  
  /*        1         2         3         4         5         6         7         8
  012345678901234567890123456789012345678901234567890123456789012345678901234567890  
  Name/username              Host            Dyn Nat ACL Port     Status         */
  struct json_object* peer = json_object_new_object();
  json_object_object_add(peer, "name",   json_object_new_string (trimr(cut_field(line,  0, 26))));
  json_object_object_add(peer, "host",   json_object_new_string (trimr(cut_field(line, 27, 42))));
  json_object_object_add(peer, "port",   json_object_new_string (trimr(cut_field(line, 55, 63))));
  cursor = parse_field(line + 64, length, (char[]){' ',-1}, &status);
Exemplo n.º 2
0
/*
 * Preprocesses a line applying the necessary transformations
 * specified by command line options and returns the preprocessed
 * string, which can be used to compare.
 */
int
preproc(struct bwstring *s, struct keys_array *ka)
{

	if (sort_opts_vals.kflag)
		for (size_t i = 0; i < keys_num; i++) {
			struct bwstring *key;
			struct key_specs *kspecs;
			struct sort_mods *sm;

			kspecs = &(keys[i]);
			key = cut_field(s, kspecs);

			sm = &(kspecs->sm);
			if (sm->dflag)
				key = dictionary_order(key);
			else if (sm->iflag)
				key = ignore_nonprinting(key);
			if (sm->fflag || sm->Mflag)
				key = ignore_case(key);

			set_key_on_keys_array(ka, key, i);
		}
	else {
		struct bwstring *ret = NULL;
		struct sort_mods *sm = default_sort_mods;

		if (sm->bflag) {
			if (ret == NULL)
				ret = bwsdup(s);
			ret = ignore_leading_blanks(ret);
		}
		if (sm->dflag) {
			if (ret == NULL)
				ret = bwsdup(s);
			ret = dictionary_order(ret);
		} else if (sm->iflag) {
			if (ret == NULL)
				ret = bwsdup(s);
			ret = ignore_nonprinting(ret);
		}
		if (sm->fflag || sm->Mflag) {
			if (ret == NULL)
				ret = bwsdup(s);
			ret = ignore_case(ret);
		}
		if (ret == NULL)
			set_key_on_keys_array(ka, s, 0);
		else
			set_key_on_keys_array(ka, ret, 0);
	}

	return 0;
}
Exemplo n.º 3
0
int comp_fielded(char *s1, char *s2) {
	int numeric = 0;	// 1 -- string of numbers
	int reverse = 0;	// 1 -- reverse order
	int caseinsensitive = 0;// 1 -- case insensitive sort
	int directory = 0;	// 1 -- directory order sort
	/** compare operation */
	int (*comp)(void*,void*) = (int (*)(void*,void*))strcmp;

	int res = 0;
	int res1 = 0;
	int res2 = 0;
	int field_len1 = 0;
	int field_len2 = 0;
	// set current processing field
	field = 0;

	while (field != fields_count) {
		comp = (int (*)(void*,void*))strcmp;
		numeric = options[field][NUMERIC];
		reverse = options[field][REVERSE];
		caseinsensitive = options[field][CASEINSENSITIVE];
		directory = options[field][DIRECTORY];

		if (numeric && reverse)
			comp = (int (*)(void*,void*))numcmp_reverse;
		else if (numeric)
			comp = (int (*)(void*,void*))numcmp;
		else if (caseinsensitive && reverse)
			comp = (int (*)(void*,void*))strcmp_reverse_incase;
		else if (reverse)
			comp = (int (*)(void*,void*))strcmp_reverse;
		else if (caseinsensitive && directory)
			comp = (int (*)(void*,void*))dircmp_incase;
		else if (directory)
			comp = (int (*)(void*,void*))dircmp;
		else if (caseinsensitive)
			comp = (int (*)(void*,void*))strcmp_incase;

		/** compare strings only till delimiter */
		res1 = cut_field(s1);
		res2 = cut_field(s2);

		field_len1 = strlen(s1);
		field_len2 = strlen(s2);

		res = comp(s1, s2);
		/** return DELIMITER after cut_field() */
		if (!res1) s1[field_len1] = DELIMITER;
		if (!res2) s2[field_len2] = DELIMITER;
		if (res == 0) {
			/** this error checking is duplicate of while()? */
			if (res1 && res2)
				break;
			else if (res1)
				return -1;
			else if (res2)
				return 1;
			else {
				field++;
//				res = shift_to_delimiter(s1, s2);
				s1 = s1 + field_len1 + 1;
				s2 = s2 + field_len2 + 1;
//				if (res)
//					break;
				continue;
			}
		}
		else
			return res;
	}
	return 0;
}