Example #1
0
char *xcap_uri_for_rls_resource(const str_t *xcap_root, const str_t *uri)
{
	dstring_t s;
	int l;
	str_t c_uri;
	char *dst = NULL;

	if (!xcap_root) return NULL;
	dstr_init(&s, 2 * xcap_root->len + 32);
	dstr_append_str(&s, xcap_root);
	if (xcap_root->s[xcap_root->len - 1] != '/') dstr_append(&s, "/", 1);
	dstr_append_zt(&s, "rls-services/global/index/~~/rls-services/service[@uri=%22");
	canonicalize_uri(uri, &c_uri);
	dstr_append_str(&s, &c_uri);
	if (c_uri.s) cds_free(c_uri.s);
	
	dstr_append_zt(&s, "%22]");
	l = dstr_get_data_length(&s);
	if (l > 0) {
		dst = (char *)cds_malloc(l + 1);
		if (dst) {
			dstr_get_data(&s, dst);
			dst[l] = 0;
		}
	}
	dstr_destroy(&s);
	return dst;
}
static size_t write_data_func(void *ptr, size_t size, size_t nmemb, void *stream)
{
    int s = size * nmemb;
    /*	TRACE_LOG("%d bytes writen\n", s);*/
    if (s != 0) {
        if (dstr_append((dstring_t*)stream, ptr, s) != 0) {
            ERROR_LOG("can't append %d bytes into data buffer\n", s);
            return 0;
        }
    }
    return s;
}
Example #3
0
// set new content for a dstr
dstr* dstr_set(dstr* ds, const char* s)
{
	size_t len = strlen(s);
	if (ds->max_len <= len) {
		memcpy(ds->data, s, ds->max_len);
		ds->data[ds->max_len] = 0;
		ds->len = ds->max_len;
		dstr_append(ds, &s[ds->max_len]);	
	}else{
		memcpy(ds->data, s, len);
		ds->len = len;
	}

	return ds; 
}
Example #4
0
static inline int add_subs_state_hf(dstring_t *buf, watcher_status_t _s, time_t _e)
{
    char* num;
    int len;
    str s = STR_NULL;
    static str timeout = STR_STATIC_INIT("timeout");
    static str rejected = STR_STATIC_INIT("rejected");

    switch(_s) {
    case WS_ACTIVE:
        ;
        s = watcher_status_names[WS_ACTIVE];
        break;
    case WS_REJECTED:
    case WS_PENDING_TERMINATED:
    case WS_TERMINATED:
        s = watcher_status_names[WS_TERMINATED];
        break;
    case WS_PENDING:
        s = watcher_status_names[WS_PENDING];
        break;
    }

    dstr_append_zt(buf, "Subscription-State: ");
    dstr_append_str(buf, &s);

    switch(_s) {
    case WS_PENDING:
        ;
    case WS_ACTIVE:
        dstr_append_zt(buf, ";expires=");
        num = int2str((unsigned int)_e, &len);
        dstr_append(buf, num, len);
        break;

    case WS_REJECTED:
    case WS_PENDING_TERMINATED:
    case WS_TERMINATED:
        dstr_append_zt(buf, ";reason=");
        if (_e <= 0) dstr_append_str(buf, &timeout);
        else dstr_append_str(buf, &rejected);
        break;

    }

    dstr_append_zt(buf, "\r\n");
    return 0;
}
Example #5
0
char *xcap_uri_for_rls_services(const str_t *xcap_root)
{
	dstring_t s;
	int l;
	char *dst = NULL;

	if (!xcap_root) return NULL;
	dstr_init(&s, 2 * xcap_root->len + 32);
	dstr_append_str(&s, xcap_root);
	if (xcap_root->s[xcap_root->len - 1] != '/') dstr_append(&s, "/", 1);
	dstr_append_zt(&s, "rls-services/global/index");
	
	l = dstr_get_data_length(&s);
	if (l > 0) {
		dst = (char *)cds_malloc(l + 1);
		if (dst) {
			dstr_get_data(&s, dst);
			dst[l] = 0;
		}
	}
	dstr_destroy(&s);
	return dst;
}
Example #6
0
/*
 * NAME:	process()
 * DESCRIPTION:	sort and display results
 */
static
int process(hfsvol *vol, darray *dirs, darray *files,
	    int flags, int options, int width)
{
  int i, dsz, fsz;
  queueent *ents;
  int result = 0;

  dsz = darr_size(dirs);
  fsz = darr_size(files);

  if (fsz)
    {
      sortfiles(files, flags, options);
      if (showfiles(files, flags, options, width) == -1)
	result = -1;

      flags |= HLS_NAME | HLS_SPACE;
    }
  else if (dsz > 1)
    flags |= HLS_NAME;

  ents = darr_array(dirs);

  for (i = 0; i < dsz; ++i)
    {
      const char *path;
      hfsdir *dir;
      queueent ent;

      darr_shrink(files, 0);

      path = PATH(ents[i]);
      dir  = hfs_opendir(vol, path);
      if (dir == 0)
	{
	  hfsutil_perrorp(path);
	  result = -1;
	  continue;
	}

      while (hfs_readdir(dir, &ent.dirent) != -1)
	{
	  if ((ent.dirent.fdflags & HFS_FNDR_ISINVISIBLE) &&
	      ! (flags & HLS_ALL_FILES))
	    continue;

	  ent.path = 0;
	  ent.free = 0;

	  if (darr_append(files, &ent) == 0)
	    {
	      fprintf(stderr, "%s: not enough memory\n", argv0);
	      result = -1;
	      break;
	    }

	  if ((ent.dirent.flags & HFS_ISDIR) && (flags & HLS_RECURSIVE))
	    {
	      dstring str;

	      dstr_init(&str);

	      if (strchr(path, ':') == 0 &&
		  dstr_append(&str, ":", 1) == -1)
		result = -1;

	      if (dstr_append(&str, path, -1) == -1)
		result = -1;

	      if (path[strlen(path) - 1] != ':' &&
		  dstr_append(&str, ":", 1) == -1)
		result = -1;

	      if (dstr_append(&str, ent.dirent.name, -1) == -1)
		result = -1;

	      ent.path = strdup(dstr_string(&str));
	      if (ent.path)
		ent.free = dpfree;
	      else
		result = -1;

	      dstr_free(&str);

	      if (darr_append(dirs, &ent) == 0)
		{
		  result = -1;
		  if (ent.path)
		    free(ent.path);
		}

	      if (result)
		{
		  fprintf(stderr, "%s: not enough memory\n", argv0);
		  break;
		}

	      dsz  = darr_size(dirs);
	      ents = darr_array(dirs);
	    }
	}

      hfs_closedir(dir);

      if (result)
	break;

      if (flags & HLS_SPACE)
	printf("\n");
      if (flags & HLS_NAME)
	printf("%s%s", path,
	       path[strlen(path) - 1] == ':' ? "\n" : ":\n");

      sortfiles(files, flags, options);
      if (showfiles(files, flags, options, width) == -1)
	result = -1;

      flags |= HLS_NAME | HLS_SPACE;
    }

  return result;
}
Example #7
0
/*
 * NAME:	outpath()
 * DESCRIPTION:	modulate an output string given current flags
 */
static
int outpath(dstring *str, queueent *ent, int flags)
{
  const char *path;

  path = PATH(*ent);

  dstr_shrink(str, 0);

  if ((flags & HLS_QUOTE) &&
      dstr_append(str, "\"", 1) == -1)
    return -1;

  if (flags & (HLS_ESCAPE | HLS_QUOTE | HLS_QMARK_CTRL))
    {
      const char *ptr;

      for (ptr = path; *ptr; ++ptr)
	{
	  const char *add;
	  char buf[5];

	  if (flags & HLS_ESCAPE)
	    {
	      switch (*ptr)
		{
		case '\\':
		  add = "\\\\";
		  break;

		case '\n':
		  add = "\\n";
		  break;

		case '\b':
		  add = "\\b";
		  break;

		case '\r':
		  add = "\\r";
		  break;

		case '\t':
		  add = "\\t";
		  break;

		case '\f':
		  add = "\\f";
		  break;

		case ' ':
		  add = "\\ ";
		  break;

		case '\"':
		  add = "\\\"";
		  break;

		default:
		  if (isgraph(*ptr))
		    {
		      sprintf(buf, "%c", *ptr);
		      add = buf;
		    }
		  else
		    {
		      sprintf(buf, "\\%03o", (unsigned char) *ptr);
		      add = buf;
		    }
		}
	    }
	  else  /* ! (flags & HLS_ESCAPE) */
	    {
	      if (isprint(*ptr) || ! (flags & HLS_QMARK_CTRL))
		{
		  sprintf(buf, "%c", *ptr);
		  add = buf;
		}
	      else
		{
		  sprintf(buf, "?");
		  add = buf;
		}
	    }

	  if (dstr_append(str, add, -1) == -1)
	    return -1;
	}
    }
  else
    {
      if (dstr_append(str, path, -1) == -1)
	return -1;
    }

  if ((flags & HLS_QUOTE) &&
      dstr_append(str, "\"", 1) == -1)
    return -1;

  if (flags & HLS_INDICATOR)
    {
      char c = 0;

      if (ent->dirent.flags & HFS_ISDIR)
	c = ':';
      else if (strcmp(ent->dirent.u.file.type, "APPL") == 0)
	c = '*';

      if (c && dstr_append(str, &c, 1) == -1)
	return -1;
    }

  return 0;
}
Example #8
0
// create a new dstr by concatenate a dstr and a C string
dstr* dstr_concat(dstr* ds, const char* s)
{
	dstr* new_ds = dstr_copy(ds);
	return dstr_append(new_ds, s);
}
Example #9
0
int sstream_put(sstream_t *ss, const char *s, int len)
{
	/* if (!is_input_sstream(ss)) return -1;  */ /* dangerous optimalization */
	return dstr_append(&ss->out, s, len);
}