summaryrefslogtreecommitdiff
path: root/rx/BuildReq.c
diff options
context:
space:
mode:
Diffstat (limited to 'rx/BuildReq.c')
-rw-r--r--rx/BuildReq.c150
1 files changed, 150 insertions, 0 deletions
diff --git a/rx/BuildReq.c b/rx/BuildReq.c
new file mode 100644
index 0000000..50ba6b5
--- /dev/null
+++ b/rx/BuildReq.c
@@ -0,0 +1,150 @@
+/* $Xorg: BuildReq.c,v 1.4 2001/02/09 02:05:58 xorgcvs Exp $ */
+/*
+
+Copyright 1996, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
+ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABIL-
+ITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall
+not be used in advertising or otherwise to promote the sale, use or
+other dealings in this Software without prior written authorization from
+The Open Group.
+
+*/
+
+#include "RxI.h"
+
+/* build the GET request to perform to launch the remote application */
+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];
+
+ /* the action parameter is mandatory */
+ if (params->action == NULL)
+ return NULL;
+
+ /*
+ * compute string size
+ */
+ 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; /* URL + delimiter */
+
+ /* RX_EMBEDDED + "=" + value + delimiter,
+ sizeof including '\0' no need to add anything for the delimiter */
+ if (params->embedded != RxUndef)
+ len += (embed_len = sizeof(RX_EMBEDDED) +
+ (params->embedded == RxTrue ? sizeof(RX_YES) : sizeof(RX_NO)));
+
+ /* RX_WIDTH + "=" + value + delimiter */
+ if (params->width != RxUndef) {
+ sprintf(width_str, "%d", params->width);
+ len += (width_len = sizeof(RX_WIDTH) + strlen(width_str) + 1);
+ }
+ /* RX_HEIGHT + "=" + value + delimiter */
+ if (params->height != RxUndef) {
+ sprintf(height_str, "%d", params->height);
+ len += (height_len = sizeof(RX_HEIGHT) + strlen(height_str) + 1);
+ }
+ if (params->ui != NULL)
+ /* "UI=" + URL + delimiter */
+ len += (ui_len = sizeof(RX_UI)+ strlen(params->ui) + 1);
+ if (params->print != NULL)
+ /* "PRINT=" + URL + delimiter */
+ len += (print_len = sizeof(RX_PRINT) + strlen(params->print) + 1);
+
+ /* RX_X_UI_LBX + "=" + value + delimiter,
+ sizeof including '\0' no need to add anything for the delimiter */
+ 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) /* 6 for ";auth=" */
+ x_ui_lbx_len += strlen(params->x_ui_lbx_auth) + 6;
+ } else
+ x_ui_lbx_len += sizeof(RX_NO);
+ len += x_ui_lbx_len;
+ }
+
+ /* RX_X_PRINT_LBX + "=" + value + delimiter,
+ sizeof including '\0' no need to add anything for the delimiter */
+ 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) /* 6 for ";auth=" */
+ x_print_lbx_len += strlen(params->x_print_lbx_auth) + 6;
+ } else
+ x_print_lbx_len += sizeof(RX_NO);
+ len += x_print_lbx_len;
+ }
+
+ /*
+ * malloc string and set it
+ */
+ 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; /* be careful delimiter is included here */
+ }
+ 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;
+}