#include "RxI.h"
char *
RxBuildRequest(RxReturnParams *params)
{
char *request, *ptr;
int len, action_len, embed_len, width_len, height_len,
ui_len, print_len, x_ui_lbx_len, x_print_lbx_len;
char width_str[10], height_str[10];
if (params->action == NULL)
return NULL;
action_len = embed_len = width_len = height_len = 0;
ui_len = print_len = x_ui_lbx_len = x_print_lbx_len = 0;
len = (action_len = strlen(params->action)) + 1;
if (params->embedded != RxUndef)
len += (embed_len = sizeof(RX_EMBEDDED) +
(params->embedded == RxTrue ? sizeof(RX_YES) : sizeof(RX_NO)));
if (params->width != RxUndef) {
sprintf(width_str, "%d", params->width);
len += (width_len = sizeof(RX_WIDTH) + strlen(width_str) + 1);
}
if (params->height != RxUndef) {
sprintf(height_str, "%d", params->height);
len += (height_len = sizeof(RX_HEIGHT) + strlen(height_str) + 1);
}
if (params->ui != NULL)
len += (ui_len = sizeof(RX_UI)+ strlen(params->ui) + 1);
if (params->print != NULL)
len += (print_len = sizeof(RX_PRINT) + strlen(params->print) + 1);
if (params->x_ui_lbx != RxUndef) {
x_ui_lbx_len = sizeof(RX_X_UI_LBX);
if (params->x_ui_lbx == RxTrue) {
x_ui_lbx_len += sizeof(RX_YES);
if (params->x_ui_lbx_auth != NULL)
x_ui_lbx_len += strlen(params->x_ui_lbx_auth) + 6;
} else
x_ui_lbx_len += sizeof(RX_NO);
len += x_ui_lbx_len;
}
if (params->x_print_lbx != RxUndef) {
x_print_lbx_len = sizeof(RX_X_PRINT_LBX);
if (params->x_print_lbx == RxTrue) {
x_print_lbx_len += sizeof(RX_YES);
if (params->x_print_lbx_auth != NULL)
x_print_lbx_len += strlen(params->x_print_lbx_auth) + 6;
} else
x_print_lbx_len += sizeof(RX_NO);
len += x_print_lbx_len;
}
request = ptr = (char *)Malloc(len);
strcpy(ptr, params->action);
ptr += action_len;
if (embed_len != 0) {
sprintf(ptr, "%c%s=%s", RX_QUERY_DELIMITER, RX_EMBEDDED,
(params->embedded == RxTrue ? RX_YES : RX_NO));
ptr += embed_len;
}
if (width_len != 0) {
sprintf(ptr, "%c%s=%s", RX_QUERY_DELIMITER, RX_WIDTH, width_str);
ptr += width_len;
}
if (height_len != 0) {
sprintf(ptr, "%c%s=%s", RX_QUERY_DELIMITER, RX_HEIGHT, height_str);
ptr += height_len;
}
if (ui_len != 0) {
sprintf(ptr, "%c%s=%s", RX_QUERY_DELIMITER, RX_UI, params->ui);
ptr += ui_len;
}
if (print_len != 0) {
sprintf(ptr, "%c%s=%s", RX_QUERY_DELIMITER, RX_PRINT, params->print);
ptr += print_len;
}
if (x_ui_lbx_len != 0) {
if (params->x_ui_lbx == RxTrue && params->x_ui_lbx_auth != NULL)
sprintf(ptr, "%c%s=%s;auth=%s", RX_QUERY_DELIMITER, RX_X_UI_LBX,
RX_YES, params->x_ui_lbx_auth);
else
sprintf(ptr, "%c%s=%s", RX_QUERY_DELIMITER, RX_X_UI_LBX,
(params->x_ui_lbx == RxTrue ? RX_YES : RX_NO));
ptr += x_ui_lbx_len;
}
if (x_print_lbx_len != 0) {
if (params->x_print_lbx == RxTrue
&& params->x_print_lbx_auth != NULL)
sprintf(ptr, "%c%s=%s;auth=%s", RX_QUERY_DELIMITER,
RX_X_PRINT_LBX, RX_YES, params->x_print_lbx_auth);
else
sprintf(ptr, "%c%s=%s", RX_QUERY_DELIMITER, RX_X_PRINT_LBX,
(params->x_print_lbx == RxTrue ? RX_YES : RX_NO));
ptr += x_print_lbx_len;
}
return request;
}