Beispiel #1
0
static str xmlrpc_print(evi_reply_sock *sock)
{
	str aux, *method;

	xmlrpc_print_s.len = 0;

	if (!sock) {
		LM_DBG("Nothing to print");
		goto end;
	}

	if (sock->flags & EVI_ADDRESS)
		DO_PRINT(sock->address.s, sock->address.len);

	if (sock->flags & EVI_PORT) {
		DO_PRINT(":", 1);
		aux.s = int2str(sock->port, &aux.len);
		DO_PRINT(aux.s, aux.len);
	}
		
	if (sock->flags & EVI_PARAMS) {
		DO_PRINT(":", 1);
		method = (str *) &sock->params;
		DO_PRINT(method->s, method->len);
	}

end:
	return xmlrpc_print_s;
}
Beispiel #2
0
static str rmq_print(evi_reply_sock *sock)
{
    rmq_params_t * param;
    rmq_print_s.len = 0;

    if (!sock) {
        LM_DBG("Nothing to print");
        goto end;
    }

    if (!(sock->flags & EVI_PARAMS))
        goto end;

    param = sock->params;
    if (param->flags & RMQ_PARAM_USER) {
        DO_PRINT(param->user.s, param->user.len - 1 /* skip 0 */);
        DO_PRINT("@", 1);
    }
    if (sock->flags & EVI_ADDRESS)
        DO_PRINT(sock->address.s, sock->address.len - 1);

    if (param->flags & RMQ_PARAM_EXCH) {
        DO_PRINT("/", 1);
        DO_PRINT(param->exchange.s, param->exchange.len - 1);
    }
end:
    return rmq_print_s;
}
Beispiel #3
0
static str xmlrpc_print(evi_reply_sock *sock)
{
	str aux;
	struct xmlrpc_sock_param *params;

	xmlrpc_print_s.len = 0;

	if (!sock) {
		LM_DBG("Nothing to print\n");
		goto end;
	}
	params = sock->params;

	if (sock->flags & EVI_ADDRESS)
		DO_PRINT(sock->address.s, sock->address.len);

	if (sock->flags & EVI_PORT) {
		DO_PRINT(":", 1);
		aux.s = int2str(sock->port, &aux.len);
		DO_PRINT(aux.s, aux.len);
	}

	if (sock->flags & EVI_PARAMS) {
		DO_PRINT(":", 1);
		DO_PRINT(params->method.s, params->method.len);
	}

end:
	return xmlrpc_print_s;
}
bool process_document(PD_FUNC get_info, PD_FUNC output, VOIDPTR info)
{
    int       tok;
    int       size,
              width;
    int       col;
    char      page_text[10];
    PD_INFO   pd;
    char      nl = '\n',
              sp = ' ';
    bool first_topic;

    pd.pnum = 1;
    pd.lnum = 0;

    output(PD_HEADING, &pd, info);

    bool first_section = true;

    while (get_info(PD_GET_CONTENT, &pd, info))
    {
        if (!output(PD_START_SECTION, &pd, info))
            return false;

        if (pd.new_page && pd.lnum != 0)
        {
            if (!output(PD_FOOTING, &pd, info))
                return false;
            ++pd.pnum;
            pd.lnum = 0;
            if (!output(PD_HEADING, &pd, info))
                return false;
        }

        else
        {
            if (pd.lnum+2 > PAGE_DEPTH-CONTENT_BREAK)
            {
                if (!output(PD_FOOTING, &pd, info))
                    return false;
                ++pd.pnum;
                pd.lnum = 0;
                if (!output(PD_HEADING, &pd, info))
                    return false;
            }
            else if (pd.lnum > 0)
            {
                if (!DO_PRINTN(nl, 2))
                    return false;
                pd.lnum += 2;
            }
        }

        if (!output(PD_SET_SECTION_PAGE, &pd, info))
            return false;

        if (!first_section)
        {
            if (!output(PD_PRINT_SEC, &pd, info))
                return false;
            ++pd.lnum;
        }

        first_topic = true;

        bool skip_blanks;
        while (get_info(PD_GET_TOPIC, &pd, info))
        {
            if (!output(PD_START_TOPIC, &pd, info))
                return false;

            skip_blanks = false;
            col = 0;

            if (!first_section)     /* do not skip blanks for DocContents */
            {
                while (pd.len > 0)
                {
                    tok = find_token_length(DOC, pd.curr, pd.len, &size, nullptr);
                    if (tok != TOK_XDOC && tok != TOK_XONLINE &&
                            tok != TOK_NL   && tok != TOK_DONE)
                        break;
                    pd.curr += size;
                    pd.len  -= size;
                }
                if (first_topic && pd.len != 0)
                {
                    if (!DO_PRINTN(nl, 1))
                        return false;
                    ++pd.lnum;
                }
            }

            if (pd.lnum > PAGE_DEPTH-TOPIC_BREAK)
            {
                if (!output(PD_FOOTING, &pd, info))
                    return false;
                ++pd.pnum;
                pd.lnum = 0;
                if (!output(PD_HEADING, &pd, info))
                    return false;
            }
            else if (!first_topic)
            {
                if (!DO_PRINTN(nl, 1))
                    return false;
                pd.lnum++;
            }

            if (!output(PD_SET_TOPIC_PAGE, &pd, info))
                return false;

            do
            {
                if (!output(PD_PERIODIC, &pd, info))
                    return false;

                tok = find_token_length(DOC, pd.curr, pd.len, &size, &width);

                switch (tok)
                {
                case TOK_PARA:
                {
                    int       indent,
                              margin;
                    unsigned  holdlen = 0;
                    char *holdcurr = 0;
                    int       in_link = 0;

                    ++pd.curr;

                    indent = *pd.curr++;
                    margin = *pd.curr++;

                    pd.len -= 3;

                    if (!DO_PRINTN(sp, indent))
                        return false;

                    col = indent;

                    while (true)
                    {
                        if (!output(PD_PERIODIC, &pd, info))
                            return false;

                        tok = find_token_length(DOC, pd.curr, pd.len, &size, &width);

                        if (tok == TOK_NL || tok == TOK_FF)
                            break;

                        if (tok == TOK_DONE)
                        {
                            if (in_link == 0)
                            {
                                col = 0;
                                ++pd.lnum;
                                if (!DO_PRINTN(nl, 1))
                                    return false;
                                break;
                            }

                            else if (in_link == 1)
                            {
                                tok = TOK_SPACE;
                                width = 1;
                                size = 0;
                                ++in_link;
                            }

                            else if (in_link == 2)
                            {
                                tok = TOK_WORD;
                                width = (int) strlen(page_text);
                                col += 8 - width;
                                size = 0;
                                pd.curr = page_text;
                                ++in_link;
                            }

                            else if (in_link == 3)
                            {
                                pd.curr = holdcurr;
                                pd.len = holdlen;
                                in_link = 0;
                                continue;
                            }
                        }

                        if (tok == TOK_PARA)
                        {
                            col = 0;   /* fake a nl */
                            ++pd.lnum;
                            if (!DO_PRINTN(nl, 1))
                                return false;
                            break;
                        }

                        if (tok == TOK_XONLINE || tok == TOK_XDOC)
                        {
                            pd.curr += size;
                            pd.len -= size;
                            continue;
                        }

                        if (tok == TOK_LINK)
                        {
                            pd.s = pd.curr+1;
                            if (get_info(PD_GET_LINK_PAGE, &pd, info))
                            {
                                in_link = 1;
                                sprintf(page_text, "(p. %d)", pd.i);
                            }
                            else
                                in_link = 3;
                            holdcurr = pd.curr + size;
                            holdlen = pd.len - size;
                            pd.len = size - 2 - 3*sizeof(int);
                            pd.curr += 1 + 3*sizeof(int);
                            continue;
                        }

                        /* now tok is TOK_SPACE or TOK_WORD */

                        if (col+width > PAGE_WIDTH)
                        {   /* go to next line... */
                            if (!DO_PRINTN(nl, 1))
                                return false;
                            if (++pd.lnum >= PAGE_DEPTH)
                            {
                                if (!output(PD_FOOTING, &pd, info))
                                    return false;
                                ++pd.pnum;
                                pd.lnum = 0;
                                if (!output(PD_HEADING, &pd, info))
                                    return false;
                            }

                            if (tok == TOK_SPACE)
                                width = 0;   /* skip spaces at start of a line */

                            if (!DO_PRINTN(sp, margin))
                                return false;
                            col = margin;
                        }

                        if (width > 0)
                        {
                            if (tok == TOK_SPACE)
                            {
                                if (!DO_PRINTN(sp, width))
                                    return false;
                            }
                            else
                            {
                                if (!DO_PRINT(pd.curr, (size == 0) ? width : size))
                                    return false;
                            }
                        }

                        col += width;
                        pd.curr += size;
                        pd.len -= size;
                    }

                    skip_blanks = false;
                    size = 0;
                    width = size;
                    break;
                }

                case TOK_NL:
                    if (skip_blanks && col == 0)
                        break;

                    ++pd.lnum;

                    if (pd.lnum >= PAGE_DEPTH || (col == 0 && pd.lnum >= PAGE_DEPTH-BLANK_BREAK))
                    {
                        if (col != 0)      /* if last wasn't a blank line... */
                        {
                            if (!DO_PRINTN(nl, 1))
                                return false;
                        }
                        if (!output(PD_FOOTING, &pd, info))
                            return false;
                        ++pd.pnum;
                        pd.lnum = 0;
                        skip_blanks = true;
                        if (!output(PD_HEADING, &pd, info))
                            return false;
                    }
                    else
                    {
                        if (!DO_PRINTN(nl, 1))
                            return false;
                    }

                    col = 0;
                    break;

                case TOK_FF:
                    if (skip_blanks)
                        break;
                    if (!output(PD_FOOTING, &pd, info))
                        return false;
                    col = 0;
                    pd.lnum = 0;
                    ++pd.pnum;
                    if (!output(PD_HEADING, &pd, info))
                        return false;
                    break;

                case TOK_CENTER:
                    width = (PAGE_WIDTH - find_line_width(DOC, pd.curr, pd.len)) / 2;
                    if (!DO_PRINTN(sp, width))
                        return false;
                    break;

                case TOK_LINK:
                    skip_blanks = false;
                    if (!DO_PRINT(pd.curr+1+3*sizeof(int),
                                  size-3*sizeof(int)-2))
                        return false;
                    pd.s = pd.curr+1;
                    if (get_info(PD_GET_LINK_PAGE, &pd, info))
                    {
                        width += 9;
                        sprintf(page_text, " (p. %d)", pd.i);
                        if (!DO_PRINT(page_text, (int) strlen(page_text)))
                            return false;
                    }
                    break;

                case TOK_WORD:
                    skip_blanks = false;
                    if (!DO_PRINT(pd.curr, size))
                        return false;
                    break;

                case TOK_SPACE:
                    skip_blanks = false;
                    if (!DO_PRINTN(sp, width))
                        return false;
                    break;

                case TOK_DONE:
                case TOK_XONLINE:   /* skip */
                case TOK_XDOC:      /* ignore */
                    break;

                } /* switch */

                pd.curr += size;
                pd.len  -= size;
                col     += width;
            }
            while (pd.len > 0);

            get_info(PD_RELEASE_TOPIC, &pd, info);

            first_topic = false;
        } /* while */

        first_section = false;
    } /* while */

    if (!output(PD_FOOTING, &pd, info))
        return false;

    return true;
}