Пример #1
0
STATIC void test_onQueryFunc(
    const Wilddog_Node_T* p_snapshot, 
    void* arg, 
    Wilddog_Return_T err)
{
    if(err < WILDDOG_HTTP_OK || err >= WILDDOG_HTTP_NOT_MODIFIED)
    {
        wilddog_debug("query error!err = %d", err);
        return;
    }
    wilddog_debug("query success!");
    if(p_snapshot)
    {
        *(Wilddog_Node_T**)arg = wilddog_node_clone(p_snapshot);
    }
    
    return;
}
Пример #2
0
void Observer_CB( const Wilddog_Node_T* p_snapshot,  void* arg,Wilddog_Return_T err)
{
		guu_is_wilddog_t *ptr_gwd;

	  ptr_gwd = (guu_is_wilddog_t*)arg;

		ptr_gwd->observer_finished = TRUE;

    if(err < WILDDOG_HTTP_OK || err >= WILDDOG_HTTP_NOT_MODIFIED)
    {
        wilddog_debug("addObserver failed!");
        return;
    }
		ptr_gwd->snapshot_clone = wilddog_node_clone(p_snapshot);
		/*
		*/
   // wilddog_debug("addObserver data!");
		ptr_gwd->node_val = wilddog_debug_n2jsonString(p_snapshot);
		//printf("%s\n",ptr_gwd->node_val);		
#ifdef INLISP
		if(ptr_gwd->node_val !=NULL)
		{
			strncpy(json_buff,ptr_gwd->node_val,JSON_BUFF_LEN);
			if(newlisp_process_json!=NULL)
			{
				newlisp_process_json();
			}
		}
#endif
		
		// simulate response 
		wilddog_debug_printnode(p_snapshot);
		printf("\n"); fflush(stdout);
		
		wfree(ptr_gwd->node_val);
    return;
}
Пример #3
0
STATIC void observer_callback
    (
    const Wilddog_Node_T* p_snapshot, 
    void* arg,
    Wilddog_Return_T err
    )
{
    int ret = 0;
    char cmd[1024];
    static int times=0;
    pid_t pid;
    char * pstr = NULL;
    char * pleaf = NULL;
    Wilddog_Node_T *p_clone = NULL;
    Wilddog_Str_T *p_key = NULL;
    char *d = " ";
    char *ps = NULL;
    char *args[0];
    int i = 0,j = 1;

    memset(cmd,0,1024);
    *((*(WATCH_CTX*)arg).isFinished)= TRUE;
    if(err < WILDDOG_HTTP_OK || err >= WILDDOG_HTTP_NOT_MODIFIED)
    {
        wilddog_debug("addObserver failed!");
        return;
    }

    if(strncmp("yes", (*(WATCH_CTX*)arg).data, strlen("yes")) == 0 && times == 0)
    {
        times++;
        return;
    }

    pid = fork();
    if(pid == -1)
        perror("fork");

    if(!pid)
    {
        p_clone = wilddog_node_clone(p_snapshot);
        p_key = p_clone->p_wn_key;
        p_clone->p_wn_key = NULL;
        pstr = (char *)wilddog_debug_n2jsonString(p_clone);
        fflush(stdout);
        /*Handle cmd's arg, add to arg table. Such as "ls -l", "-l" is an arg*/
        
        if((strncmp("no", (*(WATCH_CTX*)arg).quote, strlen("no")) != 0) && p_clone->p_wn_child == NULL && p_clone->d_wn_type == WILDDOG_NODE_TYPE_UTF8STRING)
        {
            /*If node is leaf and value is string, seperate to args by space*/
            pleaf = wmalloc(strlen(pstr)-1);
            memcpy(pleaf, pstr+1, strlen(pstr)-2);
            *(pleaf+strlen(pleaf)) = '\0';
            args[0] = strtok( (char *)((*(WATCH_CTX*)arg).cmd), d);
            while(ps = strtok(NULL,d))
            {
                args[j++] = ps;
            }
            args[j++] = strtok(pleaf, d);
            while(ps = strtok(NULL,d))
            {
                args[j++] = ps;
            }

            args[j] = NULL;
        }
        else
        {
            args[0] = strtok( (char *)((*(WATCH_CTX*)arg).cmd), d);
            while(ps = strtok(NULL,d))
            {
                args[j++] = ps;
            }
            
            args[j] = wmalloc(strlen(pstr)+1);
            memcpy(args[j], pstr, strlen(pstr));
            args[++j] = NULL;
        }

        if(strncmp("yes", (*(WATCH_CTX*)arg).verbose, strlen("yes")) == 0)
        {

            printf("exec this cmd and param: ");   
            for(i = 0; i < j; i++)
            {
                printf("%s ", args[i]);
                fflush(stdout);
            }
            printf("\n\n");
            fflush(stdout);
        }
        
        ret = execvp((char *)((*(WATCH_CTX*)arg).cmd), args);  
        wfree(pstr);
        wfree(pleaf);
        for( i = 0; i < j+1; i++)
            wfree(args[i]);
        p_clone->p_wn_key = p_key;
        wilddog_node_delete(p_clone);
        if(ret == -1)
        {
            perror("execv");
            exit(EXIT_FAILURE);
        }
    }
    
    return;
}