Ejemplo n.º 1
0
/**
 * Takes delimiter tags and sets the delimiter for the parser.
 * 
 * @param sds tag  The tag 
 *
 * @retval sdsempty()  Emtpy sds string.
 */
static sds tag_delimiter(sds tag) 
{
	puts("tag_delimiter");
	printf("tag found: '%s'\n",tag);
	sds re = sdsempty();
	sds oldl = sdsdup(ldelim), oldr = sdsdup(rdelim);
	re = sdscatprintf(re, "(%s=\\S+)\\s+(\\S+=%s)", oldl, oldr);
	struct slre_cap caps[2];

	int i;

	if ((i = slre_match(re, tag, sdslen(tag), caps, 2)) > 0) {
		ldelim = sdscpylen(ldelim, caps[0].ptr, caps[0].len);
		rdelim = sdscpylen(rdelim, caps[1].ptr, caps[1].len);
				
		oldl = sdscatprintf(sdsempty(), "%s=", oldl);
		oldr = sdscatprintf(sdsempty(), "=%s", oldr);

		ldelim = sdsreplace(ldelim, oldl, NULL);
		rdelim = sdsreplace(rdelim, oldr, NULL);

		printf("ldelim: '%s'\n", ldelim);
		printf("rdelim: '%s'\n", rdelim);
	}
	printf("Matched:  %d\n",i);
	puts("free oldl); sdsfree(oldr); sdsfree(re");
	sdsfree(oldl); sdsfree(oldr); sdsfree(re);
	return sdsempty();
}
Ejemplo n.º 2
0
int resloveMessage(char **msg, vuiClient *c)
{
    char *buf;
    char *body;
    int left;
    buf = *msg;


    body = strstr(buf, "\r\n\r\n");
    if (NULL == body)return -2;//continue read //头部没有结束 
    body = body + 4; 
    c->querymsg = sdscpylen(c->querymsg, buf, body - buf);

    if (0 != resolveHeader(c->querymsg, &c->prot)){
        *msg = body;
        return -1;
    }
    left = sdslen(c->querybuf) - (body - c->querybuf);
    if (c->prot.lenght <= left)
    {
        c->querymsg = sdscatlen(c->querymsg, body, c->prot.lenght);
        *msg = body + c->prot.lenght;
        return 0;
    }
    c->prot.waiting = c->prot.lenght - left;
    c->querymsg = sdscat(c->querymsg, body);
    return -3;
}
Ejemplo n.º 3
0
sds
cursor_next_key(cursor_t *cursor)
{
    const char *str;
    size_t len;
    sds key;

    if (!leveldb_iter_valid(cursor->iter)) {
        return NULL;
    }

    str = leveldb_iter_key(cursor->iter, &len);
    key = sdscpylen(sdsempty(), str, len);  /* TODO: check mem */

    leveldb_iter_next(cursor->iter);
    return key;
}
Ejemplo n.º 4
0
/**
 * Replaces the string `search` with `replace` in string `sds`
 * 
 * @param sds str  The string to be manipulated
 * @param sds search  The search string
 * @param char *replace  The replacement string
 *
 * @retval sds str  The manipulated string.
 */
static sds sdsreplace(sds str, sds search, char *replace) 
{
	puts("sdsreplace");
	sds buff = sdsempty();
	char *p;

	if (!(p = strstr(str, search)))
		return str;

	buff = sdscatlen(buff, str, p-str);
	if (replace != NULL) {
		buff = sdscat(buff, replace);
	}
	buff = sdscat(buff, p+sdslen(search));
	//sdsfree(search);

	str = sdscpylen(str,buff,sdslen(buff)); 
	puts("free buff");
	//sdsfree(buff);
	return str;
}
Ejemplo n.º 5
0
/**
 * Parses a matched tag and routes it to the relevant function.
 *
 * @param sds tag  The matched tag.
 *
 * @retval sds tag  The parsed tag.
 */
static sds parse_tag(sds tag)
{
	puts("parse_tag");
	sds buff = sdsempty(); 
	switch (tag[(strlen(ldelim))]) {
		case '!':
			buff = tag_comment(tag);
			break;
		case '>':
			buff = tag_partial(tag);
			break;
		case '=':
			buff = tag_delimiter(tag);
			break;
		default:
			buff = tag_variable(tag);
			break;
	}

	tag = sdscpylen(tag,buff,sdslen(buff)); 
	puts("free buff");
	//sdsfree(buff); 
	return tag;
}
Ejemplo n.º 6
0
static void redis_pack_command(lua_State *vm, const char *id, char *cmd, int len)
{
	int sockfd;
	struct request *req, *link;
	
	link = linkpool_get(id);
	if(link == NULL)
	{
		return ;
	}
	
	lua_getglobal(vm, "__USERDATA__"); 
	sockfd  = luaL_checkinteger(vm, -1);   
	lua_pop(vm, 1);  
	
	req = &srv.req[sockfd];
	
	req->link     = link;
	req->state    = REDIS_SEND;
	req->handler  = sockio_write;
	req->buf      = sdscpylen(req->buf, cmd, len);
	
	srv.el->insert(req->link->fd, req, FDEVENT_WRITE);
}
Ejemplo n.º 7
0
/* Like sdscpylen() but 't' must be a null-termined string so that the length
 * of the string is obtained with strlen(). */
sds sdscpy(sds s, const char *t) {
    return sdscpylen(s, t, strlen(t));
}
Ejemplo n.º 8
0
/**
 * Parses a string buffer for mustache tags.
 *
 * @param sds str  The string buffer to parse.
 *
 * @retval sds str  The parsed string buffer.
 */
static sds match_tags(sds str)
{
	puts("match_tags");
	sds re = sdsempty(), s = sdsempty(), buff = sdsempty(); 
	re = sdscatprintf(re, "(%s[\\S\\s]+?%s)", ldelim, rdelim);

	struct slre_cap caps[1];
	int i, sl = sdslen(str);

	struct slre_cap* match = slre_match_all(re, str, sl, caps, 1);
	int matches = slre_match_count(re, str, sl, caps, 1);
	
	sds remain = sdsdup(str);
	sds part = sdsempty();
	char *pos, *end, type;
	
	for (i=0; i < matches; i++) {
		s = sdsempty(); 
		s = sdscatprintf(s,"%.*s", match[i].len, match[i].ptr);
		
		if (!(pos = strstr(remain, s)))
			continue;

		part = sdscpylen(part, remain, pos-remain); 

		remain = sdscpy(remain, pos+sdslen(s)); 
	
		buff = sdscat(buff,part);

		type = s[(strlen(ldelim))];
		
		if (type == '#' || type == '^') {
			sds endtag = sdsdup(s);
			sds tag = sdscpylen( 
				sdsempty(), 
				( s + sdslen(ldelim) + 1 ),
				(
					sdslen(s) -
					sdslen(ldelim) - 
					sdslen(rdelim) - 1
				)
			);

			endtag[(sdslen(ldelim))] = '/';

			end = strstr(remain, endtag);
			printf("part: '%s'\n", part);
			
			s = sdscatlen(sdsempty(), remain, end-remain); 
			printf("search: '%s'\n", s);
			
			remain = sdscpy(remain, end+sdslen(endtag)); 
			printf("remain: '%s'\n", remain);

			//sds tmp = sdsempty();
			//tmp = match_tags(tmp);
			buff = parse_section(s, tag, type);
			//sdsfree(tmp);
			//buff = sdscat(buff, tmp);
		} else {
			buff = sdscat(buff,parse_tag(s));
			puts("foo");		
		}


	}

	buff = sdscat(buff,remain);
	str = sdscpylen(str,buff,sdslen(buff)); 
	
	puts("free part");
	sdsfree(part);
	puts("free remain");
	sdsfree(remain);
	puts("free buff");
	//sdsfree(buff);
	puts("free re");
	sdsfree(re);
	puts("free s");
//	sdsfree(s);
//	puts("return");
	return str;
}