static int display_add_line(pool *p, const char *resp_code, const char *resp_msg) { /* Handle the case where the data to Display might contain only one line. */ if (first_msg_sent == FALSE && first_msg == NULL) { first_msg = pstrdup(p, resp_msg); return 0; } if (first_msg != NULL) { pr_response_send_raw("%s-%s", resp_code, first_msg); first_msg = NULL; first_msg_sent = TRUE; prev_msg = pstrdup(p, resp_msg); return 0; } if (prev_msg != NULL) { if (session.multiline_rfc2228) { pr_response_send_raw("%s-%s", resp_code, prev_msg); } else { pr_response_send_raw(" %s", prev_msg); } } prev_msg = pstrdup(p, resp_msg); return 0; }
int proxy_ftp_ctrl_send_resp(pool *p, conn_t *ctrl_conn, pr_response_t *resp, unsigned int resp_nlines) { pool *curr_pool; (void) ctrl_conn; pr_trace_msg(trace_channel, 9, "backend->frontend response: %s%s%s", resp->num, resp_nlines == 1 ? " " : "", resp->msg); curr_pool = pr_response_get_pool(); if (curr_pool == NULL) { pr_response_set_pool(p); } if (resp_nlines > 1) { pr_response_send_raw("%s%s", resp->num, resp->msg); } else { pr_response_send(resp->num, "%s", resp->msg); } pr_response_set_pool(curr_pool); return 0; }
static int display_flush_lines(pool *p, const char *resp_code, int flags) { if (first_msg != NULL) { if (session.auth_mech != NULL) { if (flags & PR_DISPLAY_FL_NO_EOM) { pr_response_send_raw("%s-%s", resp_code, first_msg); } else { pr_response_send_raw("%s %s", resp_code, first_msg); } } else { /* There is a special case if the client has not yet authenticated; it * means we are handling a DisplayConnect file. The server will send * a banner as well, so we need to treat this is the start of a multiline * response. */ pr_response_send_raw("%s-%s", resp_code, first_msg); } } else { if (prev_msg) { if (session.multiline_rfc2228) { pr_response_send_raw("%s-%s", resp_code, prev_msg); } else { if (flags & PR_DISPLAY_FL_NO_EOM) { pr_response_send_raw(" %s", prev_msg); } else { pr_response_send_raw("%s %s", resp_code, prev_msg); } } } } /* Reset state for the next set of lines. */ first_msg_sent = FALSE; first_msg = NULL; prev_msg = NULL; return 0; }