Beispiel #1
0
/**
 * @brief 主处理函数
 *
 * @return  int 
 * @retval   
**/
int 
op_query()
{
    int opret = 0;

    nshead_t *req_head;
    nshead_t *res_head;
    ub_buff_t req_buf;
    ub_buff_t res_buf;
    in_addr_t req_ip;

    req_head = (nshead_t *) ub_server_get_read_buf();
    res_head = (nshead_t *) ub_server_get_write_buf();
    if(NULL == req_head || NULL == res_head)
    {
        UB_LOG_FATAL("get req_head[%ld] || res_head[%ld] failed.",
                     (long)req_head, (long)res_head);
        return -1;
    }
    req_buf.buf = (char *)(req_head + 1);
    req_buf.size = ub_server_get_read_size() - sizeof(nshead_t);
    res_buf.buf = (char *)(res_head + 1);
    res_buf.size = ub_server_get_write_size() - sizeof(nshead_t);

    //设置一些log需要的字段
    char ip_str[20];
    ip_str[0] = 0;
    req_ip = ub_server_get_ip();
    inet_ntop(AF_INET, &req_ip, ip_str, sizeof(ip_str));
    ub_log_setbasic(UB_LOG_REQIP, "%s", ip_str);
    ub_log_setbasic(UB_LOG_LOGID, "%u", req_head->log_id);
    ub_log_setbasic(UB_LOG_REQSVR, "%s", req_head->provider);
    ub_log_setbasic(UB_LOG_SVRNAME, "%s", g_cfg.svr_query.svr_name);

    ub_log_pushnotice("req_dlen", "%d", req_head->body_len);
    *res_head = *req_head;
    strncpy(res_head->provider, req_head->provider,
            sizeof(res_head->provider));
    res_head->body_len = 0;
    res_head->reserved = 0;

	//处理查询
	struct timeval total_s,total_e;
	gettimeofday(&total_s, NULL);
	opret = process_query(req_head, &req_buf, res_head, &res_buf);
    if(opret != 0){
            UB_LOG_WARNING("[function:op_update]>>>process_query failed! errno:%d", opret);
            return -1;
    }    
	gettimeofday(&total_e, NULL);
	ub_log_setbasic(UB_LOG_PROCTIME, "%luus", TIME_US_DIFF(total_s, total_e));
    
    return opret;
}
/**
 *
 * @brief srch的命令处理回调函数
 *
 * @return
 *       0  : 成功
 *       -1 : 失败,socket将直接关闭,不给client返回错误信息
 **/
int
srch_cmdproc_callback()
{
    nshead_t *req_head;
    nshead_t *res_head;
    ub_buff_t req_buf;
    ub_buff_t res_buf;
    int cmd_no = -1;
    int ret = 0;

    //获取请求和回复buffer
    req_head = (nshead_t *) ub_server_get_read_buf();
    res_head = (nshead_t *) ub_server_get_write_buf();
    if(NULL == req_head || NULL == res_head) {
        UB_LOG_FATAL("srch process callback get buffer error.");
        return -1;
    }

    //获取请求和回复实际数据
    req_buf.buf = (char *) (req_head + 1);
    req_buf.size = ub_server_get_read_size() - sizeof (nshead_t);
    res_buf.buf = (char *) (res_head + 1);
    res_buf.size = ub_server_get_write_size() - sizeof (nshead_t);

    //取得命令号
    cmd_no = ((srch_req_t *) (req_buf.buf))->cmd_no;

    //ub_server中设置了: UB_LOG_REQIP, UB_LOGID, UB_LOG_PROCTIME, UB_LOG_ERRNO
    ub_log_setbasic(UB_LOG_REQSVR, "%s", req_head->provider);
    ub_log_setbasic(UB_LOG_SVRNAME, "%s", g_conf.srch.svr_name);
    ub_log_setbasic(UB_LOG_CMDNO, "%d", cmd_no);

    //ret = ub_process_cmdmap(srch_CMD_MAP, cmd_no, req_head, &req_buf, res_head, &res_buf);
	ret = srch_process(cmd_no, req_head, &req_buf, res_head, &res_buf);

    return ret;
}